Merge remote-tracking branch 'eclipse/master' into luna
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / histogram / HistogramView.java
CommitLineData
6e512b93 1/*******************************************************************************
c8422608 2 * Copyright (c) 2009, 2013 Ericsson
1b055dfa 3 *
6e512b93
ASL
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
1b055dfa 8 *
6e512b93 9 * Contributors:
b59134e1 10 * William Bourque - Initial API and implementation
c392540b 11 * Yuriy Vashchuk - GUI reorganisation, simplification and some related code improvements.
1b055dfa 12 * Yuriy Vashchuk - Histograms optimisation.
c392540b
FC
13 * Yuriy Vashchuk - Histogram Canvas Heritage correction
14 * Francois Chouinard - Cleanup and refactoring
e0752744 15 * Francois Chouinard - Moved from LTTng to TMF
65cdf787 16 * Patrick Tasse - Update for mouse wheel zoom
6e512b93 17 *******************************************************************************/
3e9fdb8b 18
e0752744 19package org.eclipse.linuxtools.tmf.ui.views.histogram;
6e512b93 20
6c13869b 21import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest.ExecutionType;
f6ad2e3d 22import org.eclipse.linuxtools.tmf.core.request.TmfDataRequest;
6c13869b
FC
23import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
24import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
38df2c82 25import org.eclipse.linuxtools.tmf.core.signal.TmfSignalThrottler;
6c13869b 26import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
faa38350
PT
27import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
28import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
29import org.eclipse.linuxtools.tmf.core.signal.TmfTraceRangeUpdatedSignal;
30import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
31import org.eclipse.linuxtools.tmf.core.signal.TmfTraceUpdatedSignal;
3bd46eef
AM
32import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
33import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange;
34import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
faa38350 35import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
b59134e1
WB
36import org.eclipse.linuxtools.tmf.ui.views.TmfView;
37import org.eclipse.swt.SWT;
65cdf787 38import org.eclipse.swt.events.MouseWheelListener;
b59134e1 39import org.eclipse.swt.layout.GridData;
252ae4bd 40import org.eclipse.swt.layout.GridLayout;
6e512b93 41import org.eclipse.swt.widgets.Composite;
6e512b93 42
544fe9b7 43/**
faa38350 44 * The purpose of this view is to provide graphical time distribution statistics about the trace events.
544fe9b7 45 * <p>
c392540b
FC
46 * The view is composed of two histograms and two controls:
47 * <ul>
faa38350 48 * <li>an event distribution histogram for the whole trace;
c392540b
FC
49 * <li>an event distribution histogram for current time window (window span);
50 * <li>the timestamp of the currently selected event;
51 * <li>the window span (size of the time window of the smaller histogram).
52 * </ul>
53 * The histograms x-axis show their respective time range.
abbdd66a 54 *
f8177ba2 55 * @version 2.0
2af7df97 56 * @author Francois Chouinard
544fe9b7 57 */
c392540b
FC
58public class HistogramView extends TmfView {
59
60 // ------------------------------------------------------------------------
61 // Constants
62 // ------------------------------------------------------------------------
63
b544077e
BH
64 /**
65 * The view ID as defined in plugin.xml
66 */
e0752744 67 public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.histogram"; //$NON-NLS-1$
c392540b 68
c392540b
FC
69 // ------------------------------------------------------------------------
70 // Attributes
71 // ------------------------------------------------------------------------
72
73 // Parent widget
74 private Composite fParent;
75
faa38350
PT
76 // The current trace
77 private ITmfTrace fTrace;
c392540b 78
f8177ba2 79 // Current timestamp/time window - everything in the TIME_SCALE
faa38350
PT
80 private long fTraceStartTime;
81 private long fTraceEndTime;
c392540b
FC
82 private long fWindowStartTime;
83 private long fWindowEndTime;
d7ee91bb 84 private long fWindowSpan;
0fcf3b09
PT
85 private long fSelectionBeginTime;
86 private long fSelectionEndTime;
c392540b
FC
87
88 // Time controls
89 private HistogramTextControl fCurrentEventTimeControl;
90 private HistogramTextControl fTimeSpanControl;
91
92 // Histogram/request for the full trace range
93 private static FullTraceHistogram fFullTraceHistogram;
94 private HistogramRequest fFullTraceRequest;
95
96 // Histogram/request for the selected time range
97 private static TimeRangeHistogram fTimeRangeHistogram;
98 private HistogramRequest fTimeRangeRequest;
99
38df2c82
AM
100 // Throttlers for the time sync and time-range sync signals
101 private final TmfSignalThrottler fTimeSyncThrottle;
102 private final TmfSignalThrottler fTimeRangeSyncThrottle;
103
c392540b
FC
104 // ------------------------------------------------------------------------
105 // Constructor
106 // ------------------------------------------------------------------------
107
b544077e
BH
108 /**
109 * Default constructor
110 */
c392540b
FC
111 public HistogramView() {
112 super(ID);
38df2c82
AM
113 fTimeSyncThrottle = new TmfSignalThrottler(this, 200);
114 fTimeRangeSyncThrottle = new TmfSignalThrottler(this, 200);
c392540b
FC
115 }
116
6a13fa07 117 @Override
c392540b 118 public void dispose() {
1b055dfa 119 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
4dc47e28
FC
120 fTimeRangeRequest.cancel();
121 }
1b055dfa 122 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
4dc47e28
FC
123 fFullTraceRequest.cancel();
124 }
6a13fa07
FC
125 fFullTraceHistogram.dispose();
126 fTimeRangeHistogram.dispose();
f8177ba2
FC
127 fCurrentEventTimeControl.dispose();
128 fTimeSpanControl.dispose();
4dc47e28 129 super.dispose();
c392540b
FC
130 }
131
132 // ------------------------------------------------------------------------
133 // TmfView
134 // ------------------------------------------------------------------------
135
136 @Override
c392540b
FC
137 public void createPartControl(Composite parent) {
138
139 fParent = parent;
140
141 // Control labels
142 final String currentEventLabel = Messages.HistogramView_currentEventLabel;
143 final String windowSpanLabel = Messages.HistogramView_windowSpanLabel;
144
145 // --------------------------------------------------------------------
146 // Set the HistogramView layout
147 // --------------------------------------------------------------------
148
149 Composite viewComposite = new Composite(fParent, SWT.FILL);
150 GridLayout gridLayout = new GridLayout();
151 gridLayout.numColumns = 2;
152 gridLayout.horizontalSpacing = 5;
153 gridLayout.verticalSpacing = 0;
154 gridLayout.marginHeight = 0;
155 gridLayout.marginWidth = 0;
156 viewComposite.setLayout(gridLayout);
157
158 // Use all available space
159 GridData gridData = new GridData();
160 gridData.horizontalAlignment = SWT.FILL;
161 gridData.verticalAlignment = SWT.FILL;
162 gridData.grabExcessHorizontalSpace = true;
163 viewComposite.setLayoutData(gridData);
164
165 // --------------------------------------------------------------------
166 // Time controls
167 // --------------------------------------------------------------------
168
169 Composite controlsComposite = new Composite(viewComposite, SWT.FILL);
170 gridLayout = new GridLayout();
171 gridLayout.numColumns = 2;
172 gridLayout.marginHeight = 0;
173 gridLayout.marginWidth = 0;
174 gridLayout.horizontalSpacing = 5;
175 gridLayout.verticalSpacing = 0;
f8177ba2 176 gridLayout.makeColumnsEqualWidth = false;
c392540b
FC
177 gridLayout.marginLeft = 5;
178 gridLayout.marginRight = 5;
179 controlsComposite.setLayout(gridLayout);
180
181 // Current event time control
182 gridData = new GridData();
183 gridData.horizontalAlignment = SWT.CENTER;
184 gridData.verticalAlignment = SWT.CENTER;
f8177ba2 185 fCurrentEventTimeControl = new HistogramCurrentTimeControl(this, controlsComposite, currentEventLabel, 0L);
c392540b 186 fCurrentEventTimeControl.setLayoutData(gridData);
da7bdcbc 187 fCurrentEventTimeControl.setValue(Long.MIN_VALUE);
c392540b
FC
188
189 // Window span time control
190 gridData = new GridData();
191 gridData.horizontalAlignment = SWT.CENTER;
192 gridData.verticalAlignment = SWT.CENTER;
f8177ba2 193 fTimeSpanControl = new HistogramTimeRangeControl(this, controlsComposite, windowSpanLabel, 0L);
c392540b 194 fTimeSpanControl.setLayoutData(gridData);
da7bdcbc 195 fTimeSpanControl.setValue(Long.MIN_VALUE);
c392540b
FC
196
197 // --------------------------------------------------------------------
198 // Time range histogram
199 // --------------------------------------------------------------------
200
201 Composite timeRangeComposite = new Composite(viewComposite, SWT.FILL);
202 gridLayout = new GridLayout();
203 gridLayout.numColumns = 1;
204 gridLayout.marginHeight = 0;
205 gridLayout.marginWidth = 0;
206 gridLayout.marginTop = 5;
207 gridLayout.horizontalSpacing = 0;
208 gridLayout.verticalSpacing = 0;
209 gridLayout.marginLeft = 5;
210 gridLayout.marginRight = 5;
211 timeRangeComposite.setLayout(gridLayout);
212
213 // Use remaining horizontal space
214 gridData = new GridData();
215 gridData.horizontalAlignment = SWT.FILL;
216 gridData.verticalAlignment = SWT.FILL;
217 gridData.grabExcessHorizontalSpace = true;
218 timeRangeComposite.setLayoutData(gridData);
219
220 // Histogram
221 fTimeRangeHistogram = new TimeRangeHistogram(this, timeRangeComposite);
222
223 // --------------------------------------------------------------------
224 // Full range histogram
225 // --------------------------------------------------------------------
226
227 Composite fullRangeComposite = new Composite(viewComposite, SWT.FILL);
228 gridLayout = new GridLayout();
229 gridLayout.numColumns = 1;
230 gridLayout.marginHeight = 0;
231 gridLayout.marginWidth = 0;
232 gridLayout.marginTop = 5;
233 gridLayout.horizontalSpacing = 0;
234 gridLayout.verticalSpacing = 0;
235 gridLayout.marginLeft = 5;
236 gridLayout.marginRight = 5;
237 fullRangeComposite.setLayout(gridLayout);
238
239 // Use remaining horizontal space
240 gridData = new GridData();
241 gridData.horizontalAlignment = SWT.FILL;
242 gridData.verticalAlignment = SWT.FILL;
243 gridData.horizontalSpan = 2;
244 gridData.grabExcessHorizontalSpace = true;
245 fullRangeComposite.setLayoutData(gridData);
246
247 // Histogram
248 fFullTraceHistogram = new FullTraceHistogram(this, fullRangeComposite);
249
65cdf787
PT
250 // Add mouse wheel listener to time span control
251 MouseWheelListener listener = fFullTraceHistogram.getZoom();
252 fTimeSpanControl.addMouseWheelListener(listener);
253
3ac5721a
AM
254 ITmfTrace trace = getActiveTrace();
255 if (trace != null) {
256 traceSelected(new TmfTraceSelectedSignal(this, trace));
1b055dfa 257 }
ecfd1d41 258 }
c392540b
FC
259
260 @Override
c392540b 261 public void setFocus() {
faa38350 262 fFullTraceHistogram.fCanvas.setFocus();
833a21aa 263 }
c392540b 264
f8177ba2
FC
265 void refresh() {
266 fParent.layout(true);
267 }
268
c392540b
FC
269 // ------------------------------------------------------------------------
270 // Accessors
271 // ------------------------------------------------------------------------
272
faa38350
PT
273 /**
274 * Returns the current trace handled by the view
275 *
276 * @return the current trace
277 * @since 2.0
278 */
279 public ITmfTrace getTrace() {
280 return fTrace;
281 }
282
b544077e
BH
283 /**
284 * Returns the time range of the current selected window (base on default time scale).
abbdd66a 285 *
b544077e 286 * @return the time range of current selected window.
3bd46eef 287 * @since 2.0
b544077e 288 */
c392540b 289 public TmfTimeRange getTimeRange() {
f8177ba2
FC
290 return new TmfTimeRange(
291 new TmfTimestamp(fWindowStartTime, ITmfTimestamp.NANOSECOND_SCALE),
292 new TmfTimestamp(fWindowEndTime, ITmfTimestamp.NANOSECOND_SCALE));
c392540b
FC
293 }
294
295 // ------------------------------------------------------------------------
296 // Operations
297 // ------------------------------------------------------------------------
298
b544077e 299 /**
0fcf3b09
PT
300 * Broadcast TmfSignal about new current selection time range.
301 * @param beginTime the begin time of current selection.
302 * @param endTime the end time of current selection.
b544077e 303 */
0fcf3b09
PT
304 void updateSelectionTime(long beginTime, long endTime) {
305 updateDisplayedSelectionTime(beginTime, endTime);
306 TmfTimestamp beginTs = new TmfTimestamp(beginTime, ITmfTimestamp.NANOSECOND_SCALE);
307 TmfTimestamp endTs = new TmfTimestamp(endTime, ITmfTimestamp.NANOSECOND_SCALE);
308 TmfTimeSynchSignal signal = new TmfTimeSynchSignal(this, beginTs, endTs);
309 fTimeSyncThrottle.queue(signal);
c392540b
FC
310 }
311
b544077e 312 /**
0fcf3b09 313 * Broadcast TmfSignal about new selection time range.
b544077e
BH
314 * @param startTime the new start time
315 * @param endTime the new end time
316 */
f8177ba2 317 void updateTimeRange(long startTime, long endTime) {
faa38350 318 if (fTrace != null) {
c392540b 319 // Build the new time range; keep the current time
f8177ba2
FC
320 TmfTimeRange timeRange = new TmfTimeRange(
321 new TmfTimestamp(startTime, ITmfTimestamp.NANOSECOND_SCALE),
322 new TmfTimestamp(endTime, ITmfTimestamp.NANOSECOND_SCALE));
c392540b
FC
323 fTimeSpanControl.setValue(endTime - startTime);
324
38df2c82
AM
325 updateDisplayedTimeRange(startTime, endTime);
326
c392540b 327 // Send the FW signal
0fcf3b09 328 TmfRangeSynchSignal signal = new TmfRangeSynchSignal(this, timeRange);
38df2c82 329 fTimeRangeSyncThrottle.queue(signal);
c392540b
FC
330 }
331 }
332
b544077e
BH
333 /**
334 * Broadcast TmfSignal about new selected time range.
335 * @param newDuration new duration (relative to current start time)
336 */
c392540b 337 public synchronized void updateTimeRange(long newDuration) {
faa38350 338 if (fTrace != null) {
6a13fa07 339 long delta = newDuration - fWindowSpan;
1c6a842a 340 long newStartTime = fWindowStartTime - (delta / 2);
6a13fa07 341 setNewRange(newStartTime, newDuration);
c392540b
FC
342 }
343 }
344
345 private void setNewRange(long startTime, long duration) {
41b5c37f
AM
346 long realStart = startTime;
347
348 if (realStart < fTraceStartTime) {
349 realStart = fTraceStartTime;
1b055dfa 350 }
c392540b 351
41b5c37f 352 long endTime = realStart + duration;
faa38350
PT
353 if (endTime > fTraceEndTime) {
354 endTime = fTraceEndTime;
1c6a842a 355 if ((endTime - duration) > fTraceStartTime) {
41b5c37f 356 realStart = endTime - duration;
1b055dfa 357 } else {
41b5c37f 358 realStart = fTraceStartTime;
6a13fa07 359 }
c392540b 360 }
41b5c37f 361 updateTimeRange(realStart, endTime);
833a21aa 362 }
c392540b
FC
363
364 // ------------------------------------------------------------------------
365 // Signal handlers
366 // ------------------------------------------------------------------------
367
b544077e 368 /**
faa38350 369 * Handles trace opened signal. Loads histogram if new trace time range is not
b544077e 370 * equal <code>TmfTimeRange.NULL_RANGE</code>
fec1ac0b 371 * @param signal the trace opened signal
faa38350 372 * @since 2.0
b544077e 373 */
1406f802 374 @TmfSignalHandler
faa38350 375 public void traceOpened(TmfTraceOpenedSignal signal) {
c392540b 376 assert (signal != null);
faa38350
PT
377 fTrace = signal.getTrace();
378 loadTrace();
ecfd1d41 379 }
550d787e 380
faa38350
PT
381 /**
382 * Handles trace selected signal. Loads histogram if new trace time range is not
383 * equal <code>TmfTimeRange.NULL_RANGE</code>
384 * @param signal the trace selected signal
385 * @since 2.0
386 */
387 @TmfSignalHandler
388 public void traceSelected(TmfTraceSelectedSignal signal) {
389 assert (signal != null);
390 if (fTrace != signal.getTrace()) {
391 fTrace = signal.getTrace();
392 loadTrace();
393 }
394 }
395
396 private void loadTrace() {
c392540b
FC
397 initializeHistograms();
398 fParent.redraw();
550d787e
FC
399 }
400
ea279a69 401 /**
faa38350
PT
402 * Handles trace closed signal. Clears the view and data model and cancels requests.
403 * @param signal the trace closed signal
ea279a69
FC
404 * @since 2.0
405 */
406 @TmfSignalHandler
faa38350
PT
407 public void traceClosed(TmfTraceClosedSignal signal) {
408
409 if (signal.getTrace() != fTrace) {
410 return;
411 }
ea279a69
FC
412
413 // Kill any running request
414 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
415 fTimeRangeRequest.cancel();
416 }
417 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
418 fFullTraceRequest.cancel();
419 }
420
421 // Initialize the internal data
faa38350
PT
422 fTrace = null;
423 fTraceStartTime = 0L;
424 fTraceEndTime = 0L;
f8177ba2
FC
425 fWindowStartTime = 0L;
426 fWindowEndTime = 0L;
d7ee91bb 427 fWindowSpan = 0L;
0fcf3b09
PT
428 fSelectionBeginTime = 0L;
429 fSelectionEndTime = 0L;
ea279a69
FC
430
431 // Clear the UI widgets
432 fFullTraceHistogram.clear();
433 fTimeRangeHistogram.clear();
da7bdcbc 434 fCurrentEventTimeControl.setValue(Long.MIN_VALUE);
f8177ba2 435
da7bdcbc 436 fTimeSpanControl.setValue(Long.MIN_VALUE);
ea279a69
FC
437 }
438
b544077e 439 /**
faa38350 440 * Handles trace range updated signal. Extends histogram according to the new time range. If a
b544077e
BH
441 * HistogramRequest is already ongoing, it will be cancelled and a new request with the new range
442 * will be issued.
abbdd66a 443 *
faa38350
PT
444 * @param signal the trace range updated signal
445 * @since 2.0
b544077e 446 */
74237cc3 447 @TmfSignalHandler
faa38350 448 public void traceRangeUpdated(TmfTraceRangeUpdatedSignal signal) {
74237cc3 449
faa38350 450 if (signal.getTrace() != fTrace) {
09d11238
PT
451 return;
452 }
453
74237cc3
FC
454 TmfTimeRange fullRange = signal.getRange();
455
faa38350
PT
456 fTraceStartTime = fullRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
457 fTraceEndTime = fullRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
74237cc3 458
faa38350
PT
459 fFullTraceHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
460 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
74237cc3 461
74237cc3
FC
462 sendFullRangeRequest(fullRange);
463 }
c392540b 464
b544077e 465 /**
faa38350
PT
466 * Handles the trace updated signal. Used to update time limits (start and end time)
467 * @param signal the trace updated signal
468 * @since 2.0
b544077e 469 */
a28d503d 470 @TmfSignalHandler
faa38350
PT
471 public void traceUpdated(TmfTraceUpdatedSignal signal) {
472 if (signal.getTrace() != fTrace) {
a28d503d
PT
473 return;
474 }
faa38350
PT
475 TmfTimeRange fullRange = signal.getTrace().getTimeRange();
476 fTraceStartTime = fullRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
477 fTraceEndTime = fullRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
a28d503d 478
faa38350
PT
479 fFullTraceHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
480 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
481
13ccc36b 482 fFullTraceHistogram.setTimeRange(fTimeRangeHistogram.getStartTime(), fWindowSpan);
15844a4e 483 fTimeRangeHistogram.setTimeRange(fTimeRangeHistogram.getStartTime(), fWindowSpan);
13ccc36b 484
faa38350
PT
485 if ((fFullTraceRequest != null) && fFullTraceRequest.getRange().getEndTime().compareTo(signal.getRange().getEndTime()) < 0) {
486 sendFullRangeRequest(fullRange);
487 }
488}
a28d503d 489
b544077e
BH
490 /**
491 * Handles the current time updated signal. Sets the current time in the time range
492 * histogram as well as the full histogram.
abbdd66a 493 *
b544077e
BH
494 * @param signal the signal to process
495 */
c392540b
FC
496 @TmfSignalHandler
497 public void currentTimeUpdated(TmfTimeSynchSignal signal) {
498 // Because this can't happen :-)
499 assert (signal != null);
500
0fcf3b09
PT
501 // Update the selected time range
502 ITmfTimestamp beginTime = signal.getBeginTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE);
503 ITmfTimestamp endTime = signal.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE);
504 updateDisplayedSelectionTime(beginTime.getValue(), endTime.getValue());
ecfd1d41 505 }
f05aabed 506
b544077e
BH
507 /**
508 * Updates the current time range in the time range histogram and full range histogram.
509 * @param signal the signal to process
510 */
c392540b
FC
511 @TmfSignalHandler
512 public void timeRangeUpdated(TmfRangeSynchSignal signal) {
513 // Because this can't happen :-)
514 assert (signal != null);
515
faa38350 516 if (fTrace != null) {
1c6a842a
PT
517 // Validate the time range
518 TmfTimeRange range = signal.getCurrentRange().getIntersection(fTrace.getTimeRange());
519 if (range == null) {
520 return;
521 }
522
38df2c82
AM
523 updateDisplayedTimeRange(
524 range.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue(),
525 range.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue());
c392540b 526
38df2c82 527 // Send the event request to populate the small histogram
c392540b 528 sendTimeRangeRequest(fWindowStartTime, fWindowEndTime);
f8177ba2 529
c392540b
FC
530 fTimeSpanControl.setValue(fWindowSpan);
531 }
b59134e1 532 }
c392540b
FC
533
534 // ------------------------------------------------------------------------
535 // Helper functions
536 // ------------------------------------------------------------------------
537
538 private void initializeHistograms() {
faa38350 539 TmfTimeRange fullRange = updateTraceTimeRange();
0fcf3b09
PT
540 long selectionBeginTime = fTraceManager.getSelectionBeginTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
541 long selectionEndTime = fTraceManager.getSelectionEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
248af329
AM
542 long startTime = fTraceManager.getCurrentRange().getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
543 long duration = fTraceManager.getCurrentRange().getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue() - startTime;
74237cc3 544
faa38350
PT
545 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
546 fTimeRangeRequest.cancel();
547 }
74237cc3 548 fTimeRangeHistogram.clear();
faa38350 549 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
d7ee91bb 550 fTimeRangeHistogram.setTimeRange(startTime, duration);
0fcf3b09 551 fTimeRangeHistogram.setSelection(selectionBeginTime, selectionEndTime);
c392540b 552
faa38350
PT
553 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
554 fFullTraceRequest.cancel();
555 }
74237cc3 556 fFullTraceHistogram.clear();
faa38350 557 fFullTraceHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
d7ee91bb 558 fFullTraceHistogram.setTimeRange(startTime, duration);
0fcf3b09 559 fFullTraceHistogram.setSelection(selectionBeginTime, selectionEndTime);
c392540b 560
d7ee91bb
PT
561 fWindowStartTime = startTime;
562 fWindowSpan = duration;
563 fWindowEndTime = startTime + duration;
6a13fa07 564
0fcf3b09
PT
565 fSelectionBeginTime = selectionBeginTime;
566 fSelectionEndTime = selectionEndTime;
567 fCurrentEventTimeControl.setValue(fSelectionBeginTime);
f8177ba2 568
d7ee91bb 569 fTimeSpanControl.setValue(duration);
6a13fa07 570
2af7df97 571 if (!fullRange.equals(TmfTimeRange.NULL_RANGE)) {
d7ee91bb 572 sendTimeRangeRequest(startTime, startTime + duration);
2af7df97
FC
573 sendFullRangeRequest(fullRange);
574 }
74237cc3
FC
575 }
576
0fcf3b09
PT
577 private void updateDisplayedSelectionTime(long beginTime, long endTime) {
578 fSelectionBeginTime = beginTime;
579 fSelectionEndTime = endTime;
38df2c82 580
0fcf3b09
PT
581 fFullTraceHistogram.setSelection(fSelectionBeginTime, fSelectionEndTime);
582 fTimeRangeHistogram.setSelection(fSelectionBeginTime, fSelectionEndTime);
583 fCurrentEventTimeControl.setValue(fSelectionBeginTime);
38df2c82
AM
584 }
585
586 private void updateDisplayedTimeRange(long start, long end) {
587 fWindowStartTime = start;
588 fWindowEndTime = end;
589 fWindowSpan = fWindowEndTime - fWindowStartTime;
590 fFullTraceHistogram.setTimeRange(fWindowStartTime, fWindowSpan);
591 }
592
faa38350
PT
593 private TmfTimeRange updateTraceTimeRange() {
594 fTraceStartTime = 0L;
595 fTraceEndTime = 0L;
74237cc3 596
faa38350 597 TmfTimeRange timeRange = fTrace.getTimeRange();
c6023803 598 if (!timeRange.equals(TmfTimeRange.NULL_RANGE)) {
faa38350
PT
599 fTraceStartTime = timeRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
600 fTraceEndTime = timeRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
74237cc3
FC
601 }
602 return timeRange;
b59134e1 603 }
c392540b
FC
604
605 private void sendTimeRangeRequest(long startTime, long endTime) {
1b055dfa 606 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
c392540b 607 fTimeRangeRequest.cancel();
088c1d4e 608 }
f8177ba2
FC
609 TmfTimestamp startTS = new TmfTimestamp(startTime, ITmfTimestamp.NANOSECOND_SCALE);
610 TmfTimestamp endTS = new TmfTimestamp(endTime, ITmfTimestamp.NANOSECOND_SCALE);
c392540b
FC
611 TmfTimeRange timeRange = new TmfTimeRange(startTS, endTS);
612
613 fTimeRangeHistogram.clear();
15844a4e 614 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
c392540b 615 fTimeRangeHistogram.setTimeRange(startTime, endTime - startTime);
4cf201de 616
faa38350 617 int cacheSize = fTrace.getCacheSize();
f6ad2e3d 618 fTimeRangeRequest = new HistogramRequest(fTimeRangeHistogram.getDataModel(), timeRange, 0, TmfDataRequest.ALL_DATA, cacheSize, ExecutionType.FOREGROUND);
faa38350 619 fTrace.sendRequest(fTimeRangeRequest);
088c1d4e 620 }
c392540b 621
74237cc3 622 private void sendFullRangeRequest(TmfTimeRange fullRange) {
1b055dfa 623 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
c392540b
FC
624 fFullTraceRequest.cancel();
625 }
faa38350 626 int cacheSize = fTrace.getCacheSize();
fbd124dd 627 fFullTraceRequest = new HistogramRequest(fFullTraceHistogram.getDataModel(), fullRange, (int) fFullTraceHistogram.fDataModel.getNbEvents(),
f6ad2e3d 628 TmfDataRequest.ALL_DATA, cacheSize, ExecutionType.BACKGROUND);
faa38350 629 fTrace.sendRequest(fFullTraceRequest);
ed4b3b9f 630 }
c392540b 631
6e512b93 632}
This page took 0.094009 seconds and 5 git commands to generate.