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