2010-09-15 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug287563
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / common / AbsTimeUpdateView.java
CommitLineData
6e512b93 1/*******************************************************************************
8827c197 2 * Copyright (c) 2009, 2010 Ericsson
6e512b93
ASL
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 * Alvaro Sanchez-Leon (alvsan09@gmail.com) - Initial API and implementation
11 *******************************************************************************/
12package org.eclipse.linuxtools.lttng.ui.views.common;
13
8827c197
FC
14import java.util.Arrays;
15
16import org.eclipse.linuxtools.lttng.control.LttngCoreProviderFactory;
17import org.eclipse.linuxtools.lttng.control.LttngSyntheticEventProvider;
18import org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent;
19import org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent.SequenceInd;
20import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
21import org.eclipse.linuxtools.lttng.request.ILttngSyntEventRequest;
22import org.eclipse.linuxtools.lttng.request.IRequestStatusListener;
23import org.eclipse.linuxtools.lttng.request.LttngSyntEventRequest;
24import org.eclipse.linuxtools.lttng.request.RequestCompletedSignal;
25import org.eclipse.linuxtools.lttng.request.RequestStartedSignal;
26import org.eclipse.linuxtools.lttng.state.evProcessor.ITransEventProcessor;
6e512b93 27import org.eclipse.linuxtools.lttng.ui.TraceDebug;
8827c197 28import org.eclipse.linuxtools.lttng.ui.model.trange.ItemContainer;
8827c197 29import org.eclipse.linuxtools.tmf.event.TmfEvent;
6e512b93 30import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
63eecb47 31import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
8827c197 32import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
9b635e61 33import org.eclipse.linuxtools.tmf.request.ITmfDataRequest.ExecutionType;
8827c197
FC
34import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
35import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
6e512b93 36import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
8827c197
FC
37import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
38import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
39import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer;
40import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeScaleSelectionEvent;
41import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeSelectionEvent;
42import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITmfTimeAnalysisEntry;
6e512b93 43import org.eclipse.linuxtools.tmf.ui.views.TmfView;
8827c197 44import org.eclipse.swt.widgets.Display;
6e512b93
ASL
45
46/**
47 * <p>
48 * Abstract class used as a base for views handling specific time range data
49 * requests
50 * </p>
51 * <p>
8827c197
FC
52 * The class handles a single element queue of data requests, i.e. request can
53 * be triggered from different sources e.g. opening a file as well as a new
54 * selected time window
6e512b93
ASL
55 * </p>
56 *
57 * @author alvaro
58 *
59 */
60public abstract class AbsTimeUpdateView extends TmfView implements
8827c197 61 IRequestStatusListener {
6e512b93
ASL
62
63 // ========================================================================
64 // Data
65 // ========================================================================
8827c197
FC
66 /**
67 * One second in nanoseconds
68 */
69 private static final long INITIAL_WINDOW_OFFSET = 1000000000L; /*
70 * 1 sec //
71 * in ns //
72 */
73 // private static final long INITIAL_WINDOW_OFFSET = 100000000L; /* 100 ms
74 // in ns */
75 /**
76 * Number of events before a GUI refresh
77 */
78 private static final Long INPUT_CHANGED_REFRESH = 3000L;
79 private static final long DEFAULT_OFFSET = 0L;
80 private static final int DEFAULT_CHUNK = 1;
81
82 protected boolean synch = true; // time synchronisation, used to be an
83 // option
84 protected ITimeAnalysisViewer tsfviewer = null;
6e512b93 85
cb866e08
FC
86 private LttngSyntEventRequest fCurrentRequest = null;
87
88 // ========================================================================
6e512b93
ASL
89 // Constructor
90 // ========================================================================
91 public AbsTimeUpdateView(String viewID) {
8827c197
FC
92 super(viewID);
93 // freqState = UiCommonFactory.getQueue(this);
6e512b93
ASL
94 }
95
96 // ========================================================================
97 // Methods
98 // ========================================================================
99 /*
100 * (non-Javadoc)
101 *
102 * @seeorg.eclipse.linuxtools.lttng.state.IStateDataRequestListener#
103 * processingStarted(org.eclipse.linuxtools.lttng.state.StateDataRequest)
104 */
105 @TmfSignalHandler
106 public synchronized void processingStarted(RequestStartedSignal signal) {
8827c197 107 LttngSyntEventRequest request = signal.getRequest();
6e512b93 108 if (request != null) {
8827c197
FC
109 // update queue with the id of the current request.
110 // freqState.requestStarted(request);
111
112 // if there was no new request then this one is still on
113 // prepare for the reception of new data
114 waitCursor(true);
115
116 // no new time range for zoom orders
117 TmfTimeRange trange = null;
118 // Time Range will be used to filter out events which are
119 // not visible in one pixel
120 trange = request.getRange();
121
122 // indicate if the data model needs to be cleared e.g. a new
123 // experiment is being selected
124 boolean clearData = request.isclearDataInd();
125 // Indicate if current data needs to be cleared and if so
126 // specify the new experiment time range that applies
127 ModelUpdatePrep(trange, clearData);
6e512b93
ASL
128 }
129 }
130
131 /*
132 * (non-Javadoc)
133 *
134 * @seeorg.eclipse.linuxtools.lttng.state.IStateDataRequestListener#
135 * processingCompleted(org.eclipse.linuxtools.lttng.state.StateDataRequest)
136 */
137 @TmfSignalHandler
8827c197
FC
138 public void processingCompleted(RequestCompletedSignal signal) {
139 ILttngSyntEventRequest request = signal.getRequest();
6e512b93
ASL
140
141 if (request == null) {
142 return;
8035003b 143 }
6e512b93 144
8827c197
FC
145 // Update wait cursor
146 waitCursor(false);
147
6e512b93
ASL
148 // No data refresh actions for cancelled requests.
149 if (request.isCancelled() || request.isFailed()) {
150 if (TraceDebug.isDEBUG()) {
151 TmfTimeRange trange = request.getRange();
152 if (request.isCancelled()) {
153 TraceDebug.debug("Request cancelled "
154 + trange.getStartTime() + "-" + trange.getEndTime()
8827c197
FC
155 + " Handled Events: " + request.getSynEventCount()
156 + " " + request.toString(), 15);
6e512b93
ASL
157 } else if (request.isFailed()) {
158 TraceDebug.debug("Request Failed " + trange.getStartTime()
159 + "-" + trange.getEndTime() + " Handled Events: "
8827c197
FC
160 + request.getSynEventCount() + " "
161 + request.toString());
6e512b93
ASL
162 }
163 }
164
165 return;
166 } else {
8827c197 167 modelInputChanged(request, true);
6e512b93
ASL
168 }
169 }
170
171 /**
8827c197 172 * Registers as listener of time selection from other views
6e512b93 173 *
8827c197 174 * @param signal
6e512b93 175 */
8827c197
FC
176 public void synchToTime(TmfTimeSynchSignal signal) {
177 if (synch) {
178 Object source = signal.getSource();
179 if (signal != null && source != null && source != this) {
180 // Internal value is expected in nano seconds.
181 long selectedTime = signal.getCurrentTime().getValue();
182 if (tsfviewer != null) {
183 tsfviewer.setSelectedTime(selectedTime, true, source);
41dc35d0 184 }
8827c197
FC
185 }
186 }
187 }
188
189 /**
190 * Process the reception of time window adjustment in this view if the
191 * source of the update is not this view.
192 *
193 * @param signal
194 * @param clearingData
195 */
196 public void synchToTimeRange(TmfRangeSynchSignal signal, boolean clearingData) {
197 if (synch) {
198 Object source = signal.getSource();
199 if (signal != null && source != null && source != this) {
200 // Internal value is expected in nano seconds.
201 TmfTimeRange trange = signal.getCurrentRange();
202 TmfExperiment<?> experiment = TmfExperiment.getCurrentExperiment();
203 if (experiment == null) {
204 TraceDebug.debug("Current selected experiment is null");
205 return;
63eecb47 206 }
6e512b93 207
8827c197 208 // Clearing of process data is configurable
f6b14ce2 209 dataRequest(trange, experiment.getTimeRange(), clearingData, ExecutionType.FOREGROUND);
41dc35d0 210 }
6e512b93
ASL
211 }
212 }
213
214 /**
8827c197
FC
215 * Trigger time synchronisation to other views this method shall be called
216 * when a check has been performed to note that an actual change of time has
217 * been performed vs a pure re-selection of the same time
218 *
219 * @param time
220 * @param source
6e512b93 221 */
8827c197
FC
222 protected void synchTimeNotification(long time, Object source) {
223 // if synchronisation selected
224 if (synch) {
225 // Notify other views
226 TmfSignalManager.dispatchSignal(new TmfTimeSynchSignal(source, new LttngTimestamp(time)));
227 }
228 }
229
230 /**
231 * Common implementation of ITmfTimeSelectionListener, not used by all the
232 * views extending this abstract class
233 *
234 * @param event
235 */
236 protected void tsfTmProcessSelEvent(TmfTimeSelectionEvent event) {
237 Object source = event.getSource();
238 if (source == null) {
239 return;
240 }
241
242 ParamsUpdater paramUpdater = getParamsUpdater();
243 Long savedSelTime = paramUpdater.getSelectedTime();
244
245 long selTimens = event.getSelectedTime();
246
247 // make sure the new selected time is different than saved before
248 // executing update
249 if (savedSelTime == null || savedSelTime != selTimens) {
250 // Notify listener views.
251 synchTimeNotification(selTimens, source);
252
253 // Update the parameter updater to save the selected time
254 paramUpdater.setSelectedTime(selTimens);
255
63eecb47 256 if (TraceDebug.isDEBUG()) {
8827c197 257 TraceDebug.debug("Selected Time: " + new LttngTimestamp(selTimens) + "\n\t\t" + getName());
63eecb47 258 }
8827c197
FC
259 }
260 }
63eecb47 261
8827c197
FC
262 /**
263 * Common implementation of ITmfTimeScaleSelectionListener, not used by all
264 * the views extending this abstract class
265 *
266 * @param event
267 */
268 protected synchronized void tsfTmProcessTimeScaleEvent(TmfTimeScaleSelectionEvent event) {
269 // source needed to keep track of source values
270 Object source = event.getSource();
271
272 if (source != null) {
273 // Update the parameter updater before carrying out a read request
274 ParamsUpdater paramUpdater = getParamsUpdater();
275 boolean newParams = paramUpdater.processTimeScaleEvent(event);
276
277 if (newParams) {
278 // Read the updated time window
279 TmfTimeRange trange = paramUpdater.getTrange();
280 if (trange != null) {
281
282 // Notify listener views. to perform data requests
283 // upon this notification
284 synchTimeRangeNotification(trange, paramUpdater.getSelectedTime(), source);
285 }
286 }
287 }
288 }
289
290 /**
291 * Inform registered listeners about the new time range
292 *
293 * @param trange
294 * @param selectedTime
295 * @param source
296 */
297 protected void synchTimeRangeNotification(TmfTimeRange trange, Long selectedTime, Object source) {
298 // if synchronisation selected
299 if (synch) {
300 // Notify other views
301 TmfSignalManager.dispatchSignal(new TmfRangeSynchSignal(source, trange, new LttngTimestamp(selectedTime)));
302 }
303 }
304
305 /**
306 * @param zoomedTRange
307 * @param experimentTRange
9b635e61 308 * @param execType
8827c197
FC
309 */
310 public void dataRequest(TmfTimeRange zoomedTRange,
9b635e61 311 TmfTimeRange experimentTRange, boolean clearingData, ExecutionType execType) {
8827c197
FC
312
313 // timeRange is the Experiment time range
9b635e61 314 boolean sent = processDataRequest(zoomedTRange, experimentTRange, clearingData, execType);
8827c197
FC
315
316 if (sent) {
317 waitCursor(true);
318 }
319 }
320
9b635e61
FC
321// /**
322// * @param zoomedTRange
323// * @param experimentTRange
324// * @param execType
325// */
326// public void dataRequest(TmfTimeRange zoomedTRange,
327// TmfTimeRange experimentTRange, boolean clearingData) {
328//
329// // timeRange is the Experiment time range
330// boolean sent = processDataRequest(zoomedTRange, experimentTRange, clearingData);
331//
332// if (sent) {
333// waitCursor(true);
334// }
335// }
336
8827c197
FC
337 /**
338 * send data request directly e.g. doesn't use a queue
339 *
340 * @param requestTrange
341 * @param listener
342 * @param experimentTRange
9b635e61 343 * @param execType
8827c197
FC
344 * @param processor
345 * @return
346 */
347 private boolean processDataRequest(TmfTimeRange requestTrange,
9b635e61 348 TmfTimeRange experimentTRange, boolean clearingData, ExecutionType execType) {
8827c197
FC
349 // Validate input
350 if (requestTrange == null || experimentTRange == null) {
351 TraceDebug.debug("Invalid input");
352 return false;
353 }
354
cb866e08
FC
355 // Cancel the currently executing request before starting a new one
356 if (fCurrentRequest != null && !fCurrentRequest.isCompleted()) {
9b635e61 357// System.out.println("Cancelling request");
cb866e08
FC
358// fCurrentRequest.cancel();
359 }
360
361 fCurrentRequest = new LttngSyntEventRequest(
8827c197 362 requestTrange, DEFAULT_OFFSET, TmfDataRequest.ALL_DATA,
9b635e61 363 DEFAULT_CHUNK, this, experimentTRange, getEventProcessor(), execType) {
8827c197
FC
364
365 Long fCount = getSynEventCount();
366 ITransEventProcessor processor = getProcessor();
367 TmfTimestamp frunningTimeStamp;
368
369 /*
370 * (non-Javadoc)
371 *
372 * @see
373 * org.eclipse.linuxtools.lttng.request.LttngSyntEventRequest#handleData
374 * ()
375 */
cb866e08
FC
376// int handleDataCount = 0;
377// int handleDataValidCount = 0;
550d787e 378 @Override
8827c197 379 public void handleData() {
cb866e08 380 LttngSyntheticEvent[] result = getData();
8827c197
FC
381
382 TmfEvent evt = (result.length > 0) ? result[0] : null;
cb866e08 383// handleDataCount++;
8827c197 384 if (evt != null) {
cb866e08 385// handleDataValidCount++;
8827c197
FC
386 LttngSyntheticEvent synEvent = (LttngSyntheticEvent) evt;
387 // process event
388 SequenceInd indicator = synEvent.getSynType();
389 if (indicator == SequenceInd.BEFORE
390 || indicator == SequenceInd.AFTER) {
391 processor.process(evt, synEvent.getTraceModel());
392 } else if (indicator == SequenceInd.STARTREQ) {
393 handleRequestStarted();
394 } else if (indicator == SequenceInd.ENDREQ) {
395 processor.process(evt, synEvent.getTraceModel());
396 // handleCompleted();
397 }
398
399 if (indicator == SequenceInd.BEFORE) {
400 fCount++;
401 if (fCount != 0 && fCount % INPUT_CHANGED_REFRESH == 0) {
402 // send partial update
403 modelInputChanged(this, false);
404
405 if (TraceDebug.isDEBUG()) {
406 frunningTimeStamp = evt.getTimestamp();
407 TraceDebug.debug("handled: " + fCount + " sequence: " + synEvent.getSynType());
408 }
409
410 }
411 }
412 }
413 }
414
415 public void handleRequestStarted() {
416 notifyStarting();
417 }
550d787e
FC
418
419 @Override
420 public void done() {
cb866e08
FC
421// if (TraceDebug.isDEBUG()) {
422// TraceDebug.debug("AbsTimeUpdateView: Received=" + handleDataCount + ", Valid=" + handleDataCount + ", fCount=" + fCount);
423// }
550d787e
FC
424 super.done();
425 }
8827c197 426
550d787e 427 @Override
8827c197
FC
428 public void handleCompleted() {
429 super.handleCompleted();
430
431 // Data is not complete and should be handled as such
432 if (isFailed() || isCancelled()) {
433 modelIncomplete(this);
434 }
435
436 if (TraceDebug.isDEBUG()) {
437 if (frunningTimeStamp != null) {
438 TraceDebug.debug("Last event time stamp: "
439 + frunningTimeStamp.getValue());
440 }
441 }
442 }
443 };
444
445 // obtain singleton core provider
446 LttngSyntheticEventProvider provider = LttngCoreProviderFactory
447 .getEventProvider();
448
449 // send the request to TMF
cb866e08
FC
450 fCurrentRequest.startRequestInd(provider);
451 fCurrentRequest.setclearDataInd(clearingData);
8827c197
FC
452 return true;
453 }
454
455 /**
456 * Returns an initial smaller window to allow the user to select the area of
457 * interest
458 *
459 * @param experimentTRange
460 * @return
461 */
462 protected TmfTimeRange getInitTRange(TmfTimeRange experimentTRange) {
463 TmfTimestamp expStartTime = experimentTRange.getStartTime();
464 TmfTimestamp expEndTime = experimentTRange.getEndTime();
465 TmfTimestamp initialEndOfWindow = new LttngTimestamp(expStartTime
466 .getValue()
467 + INITIAL_WINDOW_OFFSET);
468 if (initialEndOfWindow.compareTo(expEndTime, false) < 0) {
469 return new TmfTimeRange(expStartTime, initialEndOfWindow);
6e512b93 470 }
8827c197
FC
471
472 // The original size of the experiment is smaller than proposed adjusted
473 // time
474 return experimentTRange;
6e512b93
ASL
475 }
476
477 /**
478 * Request the Time Analysis widget to enable or disable the wait cursor
479 * e.g. data request in progress or data request completed
480 *
481 * @param waitInd
482 */
8827c197
FC
483 protected void waitCursor(final boolean waitInd) {
484 if (tsfviewer != null) {
485 Display display = tsfviewer.getControl().getDisplay();
486
487 // Perform the updates on the UI thread
488 display.asyncExec(new Runnable() {
489 public void run() {
490 tsfviewer.waitCursor(waitInd);
491 }
492 });
493 }
494 }
6e512b93
ASL
495
496 /**
8827c197 497 * View preparation to override the current local information
6e512b93 498 *
d712a5f3
FC
499 * @param timeRange
500 * - new total time range e.g. Experiment level
8827c197
FC
501 * @param clearAllData
502 */
503 protected void ModelUpdatePrep(TmfTimeRange timeRange, boolean clearAllData) {
504 ItemContainer<?> itemContainer = getItemContainer();
505 if (clearAllData) {
506 // start fresh e.g. new experiment selected
507 itemContainer.clearItems();
508 } else {
509 // clear children but keep processes
510 itemContainer.clearChildren();
511 }
512
513 // Obtain the current resource array
514 ITmfTimeAnalysisEntry[] itemArr = itemContainer.readItems();
515
516 // clean up data and boundaries
517 displayModel(itemArr, -1, -1, false, -1, -1, null);
518
519 ParamsUpdater updater = getParamsUpdater();
520 if (updater != null) {
521 // Start over
522 updater.setEventsDiscarded(0);
523
524 // Update new visible time range if available
525 if (timeRange != null) {
526 updater.update(timeRange.getStartTime().getValue(), timeRange.getEndTime().getValue());
527 }
528 }
529 }
530
531 /**
532 * Initialize the model and view before reloading items
533 *
534 * @param boundaryRange
535 * @param visibleRange
536 * @param source
6e512b93 537 */
8827c197
FC
538 protected void ModelUpdateInit(TmfTimeRange boundaryRange, TmfTimeRange visibleRange, Object source) {
539 // Update the view boundaries
540 if (boundaryRange != null) {
541 ItemContainer<?> itemContainer = getItemContainer();
542 if (itemContainer != null) {
543 itemContainer.clearItems();
544 // Obtain the current process array
545 ITmfTimeAnalysisEntry[] itemArr = itemContainer.readItems();
546
547 long startTime = boundaryRange.getStartTime().getValue();
548 long endTime = boundaryRange.getEndTime().getValue();
549
550 // Update the view part
551 displayModel(itemArr, startTime, endTime, true, visibleRange.getStartTime().getValue(), visibleRange
552 .getEndTime().getValue(), source);
553 }
554 }
555
556 // update the view filtering parameters
557 if (visibleRange != null) {
558 ParamsUpdater updater = getParamsUpdater();
559 if (updater != null) {
560 // Start over
561 updater.setEventsDiscarded(0);
562 // Update new visible time range if available
563 updater.update(visibleRange.getStartTime().getValue(), visibleRange.getEndTime().getValue());
564 }
565 }
566 }
6e512b93
ASL
567
568 /**
569 * Actions taken by the view to refresh its widget(s) with the updated data
570 * model
571 *
572 * @param request
8827c197
FC
573 * @param complete
574 * true: yes, false: partial update
575 */
576 protected void modelInputChanged(ILttngSyntEventRequest request, boolean complete) {
577 long experimentStartTime = -1;
578 long experimentEndTime = -1;
579 TmfTimeRange experimentTimeRange = request.getExperimentTimeRange();
580 if (experimentTimeRange != null) {
581 experimentStartTime = experimentTimeRange.getStartTime().getValue();
582 experimentEndTime = experimentTimeRange.getEndTime().getValue();
583 }
584
585 // Obtain the current resource list
586 ITmfTimeAnalysisEntry[] itemArr = getItemContainer().readItems();
587
588 if (itemArr != null) {
589 // Sort the array by pid
590 Arrays.sort(itemArr);
591
592 // Update the view part
593 displayModel(itemArr, experimentStartTime, experimentEndTime, false, request.getRange().getStartTime()
594 .getValue(), request.getRange().getEndTime().getValue(), request.getSource());
595 }
596
597 if (complete) {
598 // reselect to original time
5dbe4d3b 599 ParamsUpdater paramUpdater = getParamsUpdater();
8827c197
FC
600 if (paramUpdater != null && tsfviewer != null) {
601 final Long selTime = paramUpdater.getSelectedTime();
602 if (selTime != null) {
603 TraceDebug.debug("View: " + getName() + "\n\t\tRestoring the selected time to: " + selTime);
604 Display display = tsfviewer.getControl().getDisplay();
605 display.asyncExec(new Runnable() {
606 public void run() {
607 tsfviewer.setSelectedTime(selTime, false, this);
608 }
609 });
610 }
611
9b635e61
FC
612// System.out.println(System.currentTimeMillis() + ": AbsTimeUpdate (" + getName() + ") completed");
613
8827c197
FC
614 if (TraceDebug.isDEBUG()) {
615 int eventCount = 0;
616 Long count = request.getSynEventCount();
617 for (int pos = 0; pos < itemArr.length; pos++) {
618 eventCount += itemArr[pos].getTraceEvents().size();
619 }
620
5dbe4d3b 621 int discarded = paramUpdater.getEventsDiscarded();
8827c197 622 int discardedOutofOrder = paramUpdater.getEventsDiscardedWrongOrder();
5dbe4d3b
ASL
623 int discardedOutofViewRange = paramUpdater.getEventsDiscardedOutOfViewRange();
624 int dicardedNotVisible = paramUpdater.getEventsDiscardedNotVisible();
625
8827c197
FC
626 TmfTimeRange range = request.getRange();
627 StringBuilder sb = new StringBuilder("View: " + getName() + ", Events handled: " + count
628 + ", Events loaded in view: " + eventCount + ", Number of events discarded: " + discarded
629 + "\n\tNumber of events discarded with start time earlier than next good time: "
5dbe4d3b
ASL
630 + discardedOutofOrder + "\n\tDiscarded Not visible: " + dicardedNotVisible
631 + "\n\tDiscarded out of view Range: " + discardedOutofViewRange);
8827c197
FC
632
633 sb.append("\n\t\tRequested Time Range: " + range.getStartTime() + "-" + range.getEndTime());
634 sb.append("\n\t\tExperiment Time Range: " + experimentStartTime + "-" + experimentEndTime);
635 TraceDebug.debug(sb.toString());
636 }
637 }
638
639 }
640 }
641
642 // /**
643 // * Obtains the remainder fraction on unit Seconds of the entered value in
644 // * nanoseconds. e.g. input: 1241207054171080214 ns The number of seconds
645 // can
646 // * be obtain by removing the last 9 digits: 1241207054 the fractional
647 // * portion of seconds, expressed in ns is: 171080214
648 // *
649 // * @param v
650 // * @return
651 // */
652 // protected String formatNs(long v) {
653 // StringBuffer str = new StringBuffer();
654 // boolean neg = v < 0;
655 // if (neg) {
656 // v = -v;
657 // str.append('-');
658 // }
659 //
660 // String strVal = String.valueOf(v);
661 // if (v < 1000000000) {
662 // return strVal;
663 // }
664 //
665 // // Extract the last nine digits (e.g. fraction of a S expressed in ns
666 // return strVal.substring(strVal.length() - 9);
667 // }
668
669 /**
670 * The request was stopped, the data is incomplete
671 *
672 * @param request
673 */
674 protected abstract void modelIncomplete(ILttngSyntEventRequest request);
675
676 /**
677 * Returns the Event processor instance related to a specific view
678 *
679 * @return
680 */
681 protected abstract ITransEventProcessor getEventProcessor();
682
683 /**
684 * To be overridden by some sub-classes although may not be needed in some
685 * e.g. statistics view
686 *
687 * @param items
688 * @param startBoundTime
689 * @param endBoundTime
690 * @param updateTimeBounds
691 * - Time bounds updated needed e.g. if a new Experiment or trace
692 * is selected
693 * @param startVisibleWindow
694 * @param endVisibleWindow
695 * @param source
696 */
697 protected abstract void displayModel(final ITmfTimeAnalysisEntry[] items, final long startBoundTime,
698 final long endBoundTime, final boolean updateTimeBounds, final long startVisibleWindow,
699 final long endVisibleWindow, final Object source);
700
701 /**
702 * To be overridden by some sub-classes although may not be needed in some
703 * e.g. statistics view
704 *
705 * @return
706 */
707 protected abstract ParamsUpdater getParamsUpdater();
708
709 /**
710 * Returns the model's item container
711 *
712 * @return
6e512b93 713 */
8827c197 714 protected abstract ItemContainer<?> getItemContainer();
6e512b93 715}
This page took 0.073153 seconds and 5 git commands to generate.