ed21b268a33cbead50d6a4116c6608d06c8a6ff7
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / histogram / HistogramView.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2010, 2011, 2012 Ericsson
3 *
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
8 *
9 * Contributors:
10 * William Bourque - Initial API and implementation
11 * Yuriy Vashchuk - GUI reorganisation, simplification and some related code improvements.
12 * Yuriy Vashchuk - Histograms optimisation.
13 * Yuriy Vashchuk - Histogram Canvas Heritage correction
14 * Francois Chouinard - Cleanup and refactoring
15 * Francois Chouinard - Moved from LTTng to TMF
16 *******************************************************************************/
17
18 package org.eclipse.linuxtools.tmf.ui.views.histogram;
19
20 import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
21 import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest.ExecutionType;
22 import org.eclipse.linuxtools.tmf.core.request.TmfDataRequest;
23 import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
24 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
25 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalManager;
26 import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
27 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
28 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
29 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceRangeUpdatedSignal;
30 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
31 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceUpdatedSignal;
32 import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
33 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange;
34 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
35 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
36 import org.eclipse.linuxtools.tmf.ui.editors.ITmfTraceEditor;
37 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
38 import org.eclipse.swt.SWT;
39 import org.eclipse.swt.layout.GridData;
40 import org.eclipse.swt.layout.GridLayout;
41 import org.eclipse.swt.widgets.Composite;
42 import org.eclipse.ui.IEditorPart;
43
44 /**
45 * The purpose of this view is to provide graphical time distribution statistics about the trace events.
46 * <p>
47 * The view is composed of two histograms and two controls:
48 * <ul>
49 * <li>an event distribution histogram for the whole trace;
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.
55 *
56 * @version 2.0
57 * @author Francois Chouinard
58 */
59 public class HistogramView extends TmfView {
60
61 // ------------------------------------------------------------------------
62 // Constants
63 // ------------------------------------------------------------------------
64
65 /**
66 * The view ID as defined in plugin.xml
67 */
68 public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.histogram"; //$NON-NLS-1$
69
70 // ------------------------------------------------------------------------
71 // Attributes
72 // ------------------------------------------------------------------------
73
74 // Parent widget
75 private Composite fParent;
76
77 // The current trace
78 private ITmfTrace fTrace;
79
80 // Current timestamp/time window - everything in the TIME_SCALE
81 private long fTraceStartTime;
82 private long fTraceEndTime;
83 private long fWindowStartTime;
84 private long fWindowEndTime;
85 private long fWindowSpan;
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
104 /**
105 * Default constructor
106 */
107 public HistogramView() {
108 super(ID);
109 }
110
111 @Override
112 public void dispose() {
113 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
114 fTimeRangeRequest.cancel();
115 }
116 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
117 fFullTraceRequest.cancel();
118 }
119 fFullTraceHistogram.dispose();
120 fTimeRangeHistogram.dispose();
121 fCurrentEventTimeControl.dispose();
122 fTimeSpanControl.dispose();
123 super.dispose();
124 }
125
126 // ------------------------------------------------------------------------
127 // TmfView
128 // ------------------------------------------------------------------------
129
130 @Override
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;
170 gridLayout.makeColumnsEqualWidth = false;
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;
179 fCurrentEventTimeControl = new HistogramCurrentTimeControl(this, controlsComposite, currentEventLabel, 0L);
180 fCurrentEventTimeControl.setLayoutData(gridData);
181 fCurrentEventTimeControl.setValue(Long.MIN_VALUE);
182
183 // Window span time control
184 gridData = new GridData();
185 gridData.horizontalAlignment = SWT.CENTER;
186 gridData.verticalAlignment = SWT.CENTER;
187 fTimeSpanControl = new HistogramTimeRangeControl(this, controlsComposite, windowSpanLabel, 0L);
188 fTimeSpanControl.setLayoutData(gridData);
189 fTimeSpanControl.setValue(Long.MIN_VALUE);
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
244 IEditorPart editor = getSite().getPage().getActiveEditor();
245 if (editor instanceof ITmfTraceEditor) {
246 ITmfTrace trace = ((ITmfTraceEditor) editor).getTrace();
247 if (trace != null) {
248 traceSelected(new TmfTraceSelectedSignal(this, trace));
249 }
250 }
251 }
252
253 @Override
254 public void setFocus() {
255 fFullTraceHistogram.fCanvas.setFocus();
256 }
257
258 void refresh() {
259 fParent.layout(true);
260 }
261
262 // ------------------------------------------------------------------------
263 // Accessors
264 // ------------------------------------------------------------------------
265
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
276 /**
277 * Returns the time range of the current selected window (base on default time scale).
278 *
279 * @return the time range of current selected window.
280 * @since 2.0
281 */
282 public TmfTimeRange getTimeRange() {
283 return new TmfTimeRange(
284 new TmfTimestamp(fWindowStartTime, ITmfTimestamp.NANOSECOND_SCALE),
285 new TmfTimestamp(fWindowEndTime, ITmfTimestamp.NANOSECOND_SCALE));
286 }
287
288 // ------------------------------------------------------------------------
289 // Operations
290 // ------------------------------------------------------------------------
291
292 /**
293 * Broadcast TmfSignal about new current time value.
294 * @param newTime the new current time.
295 */
296 void updateCurrentEventTime(long newTime) {
297 if (fTrace != null) {
298 TmfTimeRange timeRange = new TmfTimeRange(new TmfTimestamp(newTime, ITmfTimestamp.NANOSECOND_SCALE), TmfTimestamp.BIG_CRUNCH);
299 HistogramRequest request = new HistogramRequest(fTimeRangeHistogram.getDataModel(), timeRange, 0, 1, 0, ExecutionType.FOREGROUND) {
300 @Override
301 public void handleData(ITmfEvent event) {
302 if (event != null) {
303 TmfTimeSynchSignal signal = new TmfTimeSynchSignal(this, event.getTimestamp());
304 TmfSignalManager.dispatchSignal(signal);
305 }
306 }
307 };
308 fTrace.sendRequest(request);
309 }
310 }
311
312 /**
313 * Broadcast TmfSignal about new selected time range.
314 * @param startTime the new start time
315 * @param endTime the new end time
316 */
317 void updateTimeRange(long startTime, long endTime) {
318 if (fTrace != null) {
319 // Build the new time range; keep the current time
320 TmfTimeRange timeRange = new TmfTimeRange(
321 new TmfTimestamp(startTime, ITmfTimestamp.NANOSECOND_SCALE),
322 new TmfTimestamp(endTime, ITmfTimestamp.NANOSECOND_SCALE));
323 ITmfTimestamp currentTime = new TmfTimestamp(fCurrentTimestamp, ITmfTimestamp.NANOSECOND_SCALE);
324 fTimeSpanControl.setValue(endTime - startTime);
325
326 // Send the FW signal
327 TmfRangeSynchSignal signal = new TmfRangeSynchSignal(this, timeRange, currentTime);
328 TmfSignalManager.dispatchSignal(signal);
329 }
330 }
331
332 /**
333 * Broadcast TmfSignal about new selected time range.
334 * @param newDuration new duration (relative to current start time)
335 */
336 public synchronized void updateTimeRange(long newDuration) {
337 if (fTrace != null) {
338 long delta = newDuration - fWindowSpan;
339 long newStartTime = fWindowStartTime - (delta / 2);
340 setNewRange(newStartTime, newDuration);
341 }
342 }
343
344 private void setNewRange(long startTime, long duration) {
345 long realStart = startTime;
346
347 if (realStart < fTraceStartTime) {
348 realStart = fTraceStartTime;
349 }
350
351 long endTime = realStart + duration;
352 if (endTime > fTraceEndTime) {
353 endTime = fTraceEndTime;
354 if ((endTime - duration) > fTraceStartTime) {
355 realStart = endTime - duration;
356 } else {
357 realStart = fTraceStartTime;
358 }
359 }
360 updateTimeRange(realStart, endTime);
361 }
362
363 // ------------------------------------------------------------------------
364 // Signal handlers
365 // ------------------------------------------------------------------------
366
367 /**
368 * Handles trace opened signal. Loads histogram if new trace time range is not
369 * equal <code>TmfTimeRange.NULL_RANGE</code>
370 * @param signal the trace selected signal
371 * @since 2.0
372 */
373 @TmfSignalHandler
374 public void traceOpened(TmfTraceOpenedSignal signal) {
375 assert (signal != null);
376 fTrace = signal.getTrace();
377 loadTrace();
378 }
379
380 /**
381 * Handles trace selected signal. Loads histogram if new trace time range is not
382 * equal <code>TmfTimeRange.NULL_RANGE</code>
383 * @param signal the trace selected signal
384 * @since 2.0
385 */
386 @TmfSignalHandler
387 public void traceSelected(TmfTraceSelectedSignal signal) {
388 assert (signal != null);
389 if (fTrace != signal.getTrace()) {
390 fTrace = signal.getTrace();
391 loadTrace();
392 }
393 }
394
395 private void loadTrace() {
396 initializeHistograms();
397 fParent.redraw();
398 }
399
400 /**
401 * Handles trace closed signal. Clears the view and data model and cancels requests.
402 * @param signal the trace closed signal
403 * @since 2.0
404 */
405 @TmfSignalHandler
406 public void traceClosed(TmfTraceClosedSignal signal) {
407
408 if (signal.getTrace() != fTrace) {
409 return;
410 }
411
412 // Kill any running request
413 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
414 fTimeRangeRequest.cancel();
415 }
416 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
417 fFullTraceRequest.cancel();
418 }
419
420 // Initialize the internal data
421 fTrace = null;
422 fTraceStartTime = 0L;
423 fTraceEndTime = 0L;
424 fWindowStartTime = 0L;
425 fWindowEndTime = 0L;
426 fWindowSpan = 0L;
427 fCurrentTimestamp = 0L;
428
429 // Clear the UI widgets
430 fFullTraceHistogram.clear();
431 fTimeRangeHistogram.clear();
432 fCurrentEventTimeControl.setValue(Long.MIN_VALUE);
433
434 fTimeSpanControl.setValue(Long.MIN_VALUE);
435 }
436
437 /**
438 * Handles trace range updated signal. Extends histogram according to the new time range. If a
439 * HistogramRequest is already ongoing, it will be cancelled and a new request with the new range
440 * will be issued.
441 *
442 * @param signal the trace range updated signal
443 * @since 2.0
444 */
445 @TmfSignalHandler
446 public void traceRangeUpdated(TmfTraceRangeUpdatedSignal signal) {
447
448 if (signal.getTrace() != fTrace) {
449 return;
450 }
451
452 TmfTimeRange fullRange = signal.getRange();
453
454 fTraceStartTime = fullRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
455 fTraceEndTime = fullRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
456
457 fFullTraceHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
458 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
459
460 sendFullRangeRequest(fullRange);
461 }
462
463 /**
464 * Handles the trace updated signal. Used to update time limits (start and end time)
465 * @param signal the trace updated signal
466 * @since 2.0
467 */
468 @TmfSignalHandler
469 public void traceUpdated(TmfTraceUpdatedSignal signal) {
470 if (signal.getTrace() != fTrace) {
471 return;
472 }
473 TmfTimeRange fullRange = signal.getTrace().getTimeRange();
474 fTraceStartTime = fullRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
475 fTraceEndTime = fullRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
476
477 fFullTraceHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
478 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
479
480 fFullTraceHistogram.setTimeRange(fTimeRangeHistogram.getStartTime(), fWindowSpan);
481 fTimeRangeHistogram.setTimeRange(fTimeRangeHistogram.getStartTime(), fWindowSpan);
482
483 if ((fFullTraceRequest != null) && fFullTraceRequest.getRange().getEndTime().compareTo(signal.getRange().getEndTime()) < 0) {
484 sendFullRangeRequest(fullRange);
485 }
486 }
487
488 /**
489 * Handles the current time updated signal. Sets the current time in the time range
490 * histogram as well as the full histogram.
491 *
492 * @param signal the signal to process
493 */
494 @TmfSignalHandler
495 public void currentTimeUpdated(TmfTimeSynchSignal signal) {
496 // Because this can't happen :-)
497 assert (signal != null);
498
499 // Update the selected event time
500 ITmfTimestamp currentTime = signal.getCurrentTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE);
501 fCurrentTimestamp = currentTime.getValue();
502
503 // Notify the relevant widgets
504 fFullTraceHistogram.setCurrentEvent(fCurrentTimestamp);
505 fTimeRangeHistogram.setCurrentEvent(fCurrentTimestamp);
506 fCurrentEventTimeControl.setValue(fCurrentTimestamp);
507 }
508
509 /**
510 * Updates the current time range in the time range histogram and full range histogram.
511 * @param signal the signal to process
512 */
513 @TmfSignalHandler
514 public void timeRangeUpdated(TmfRangeSynchSignal signal) {
515 // Because this can't happen :-)
516 assert (signal != null);
517
518 if (fTrace != null) {
519 // Validate the time range
520 TmfTimeRange range = signal.getCurrentRange().getIntersection(fTrace.getTimeRange());
521 if (range == null) {
522 return;
523 }
524
525 // Update the time range
526 fWindowStartTime = range.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
527 fWindowEndTime = range.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
528 fWindowSpan = fWindowEndTime - fWindowStartTime;
529
530 // Notify the relevant widgets
531 sendTimeRangeRequest(fWindowStartTime, fWindowEndTime);
532 fFullTraceHistogram.setTimeRange(fWindowStartTime, fWindowSpan);
533
534 fTimeSpanControl.setValue(fWindowSpan);
535 }
536 }
537
538 // ------------------------------------------------------------------------
539 // Helper functions
540 // ------------------------------------------------------------------------
541
542 private void initializeHistograms() {
543 TmfTimeRange fullRange = updateTraceTimeRange();
544 long timestamp = fTrace.getCurrentTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
545 long startTime = fTrace.getCurrentRange().getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
546 long duration = fTrace.getCurrentRange().getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue() - startTime;
547
548 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
549 fTimeRangeRequest.cancel();
550 }
551 fTimeRangeHistogram.clear();
552 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
553 fTimeRangeHistogram.setTimeRange(startTime, duration);
554 fTimeRangeHistogram.setCurrentEvent(timestamp);
555
556 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
557 fFullTraceRequest.cancel();
558 }
559 fFullTraceHistogram.clear();
560 fFullTraceHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
561 fFullTraceHistogram.setTimeRange(startTime, duration);
562 fFullTraceHistogram.setCurrentEvent(timestamp);
563
564 fWindowStartTime = startTime;
565 fWindowSpan = duration;
566 fWindowEndTime = startTime + duration;
567
568 fCurrentTimestamp = timestamp;
569 fCurrentEventTimeControl.setValue(fCurrentTimestamp);
570
571 fTimeSpanControl.setValue(duration);
572
573 if (!fullRange.equals(TmfTimeRange.NULL_RANGE)) {
574 sendTimeRangeRequest(startTime, startTime + duration);
575 sendFullRangeRequest(fullRange);
576 }
577 }
578
579 private TmfTimeRange updateTraceTimeRange() {
580 fTraceStartTime = 0L;
581 fTraceEndTime = 0L;
582
583 TmfTimeRange timeRange = fTrace.getTimeRange();
584 if (!timeRange.equals(TmfTimeRange.NULL_RANGE)) {
585 fTraceStartTime = timeRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
586 fTraceEndTime = timeRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
587 }
588 return timeRange;
589 }
590
591 private void sendTimeRangeRequest(long startTime, long endTime) {
592 if ((fTimeRangeRequest != null) && !fTimeRangeRequest.isCompleted()) {
593 fTimeRangeRequest.cancel();
594 }
595 TmfTimestamp startTS = new TmfTimestamp(startTime, ITmfTimestamp.NANOSECOND_SCALE);
596 TmfTimestamp endTS = new TmfTimestamp(endTime, ITmfTimestamp.NANOSECOND_SCALE);
597 TmfTimeRange timeRange = new TmfTimeRange(startTS, endTS);
598
599 fTimeRangeHistogram.clear();
600 fTimeRangeHistogram.setFullRange(fTraceStartTime, fTraceEndTime);
601 fTimeRangeHistogram.setTimeRange(startTime, endTime - startTime);
602
603 int cacheSize = fTrace.getCacheSize();
604 fTimeRangeRequest = new HistogramRequest(fTimeRangeHistogram.getDataModel(), timeRange, 0, TmfDataRequest.ALL_DATA, cacheSize, ExecutionType.FOREGROUND);
605 fTrace.sendRequest(fTimeRangeRequest);
606 }
607
608 private void sendFullRangeRequest(TmfTimeRange fullRange) {
609 if ((fFullTraceRequest != null) && !fFullTraceRequest.isCompleted()) {
610 fFullTraceRequest.cancel();
611 }
612 int cacheSize = fTrace.getCacheSize();
613 fFullTraceRequest = new HistogramRequest(fFullTraceHistogram.getDataModel(), fullRange, (int) fFullTraceHistogram.fDataModel.getNbEvents(),
614 TmfDataRequest.ALL_DATA, cacheSize, ExecutionType.BACKGROUND);
615 fTrace.sendRequest(fFullTraceRequest);
616 }
617
618 }
This page took 0.044223 seconds and 5 git commands to generate.