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