NEW - bug 302486: [LTTng] Feature: Time synchronization
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / resources / ResourcesView.java
1 /*******************************************************************************
2 * Copyright (c) 2009 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are made
5 * 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: Alvaro Sanchez-Leon - Initial implementation
10 *******************************************************************************/
11 package org.eclipse.linuxtools.lttng.ui.views.resources;
12
13 import java.util.Arrays;
14
15 import org.eclipse.jface.action.Action;
16 import org.eclipse.jface.action.IMenuListener;
17 import org.eclipse.jface.action.IMenuManager;
18 import org.eclipse.jface.action.IToolBarManager;
19 import org.eclipse.jface.action.MenuManager;
20 import org.eclipse.jface.action.Separator;
21 import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
22 import org.eclipse.linuxtools.lttng.state.StateDataRequest;
23 import org.eclipse.linuxtools.lttng.state.StateManager;
24 import org.eclipse.linuxtools.lttng.state.evProcessor.EventProcessorProxy;
25 import org.eclipse.linuxtools.lttng.state.experiment.StateExperimentManager;
26 import org.eclipse.linuxtools.lttng.state.experiment.StateManagerFactory;
27 import org.eclipse.linuxtools.lttng.ui.TraceDebug;
28 import org.eclipse.linuxtools.lttng.ui.model.trange.TimeRangeEventResource;
29 import org.eclipse.linuxtools.lttng.ui.model.trange.TimeRangeViewerProvider;
30 import org.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView;
31 import org.eclipse.linuxtools.lttng.ui.views.common.ParamsUpdater;
32 import org.eclipse.linuxtools.lttng.ui.views.resources.evProcessor.ResourcesTRangeUpdateFactory;
33 import org.eclipse.linuxtools.lttng.ui.views.resources.model.ResourceModelFactory;
34 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
35 import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
36 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
37 import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
38 import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
39 import org.eclipse.linuxtools.tmf.ui.viewers.TmfViewerFactory;
40 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer;
41 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITmfTimeScaleSelectionListener;
42 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITmfTimeSelectionListener;
43 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeScaleSelectionEvent;
44 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeSelectionEvent;
45 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITmfTimeAnalysisEntry;
46 import org.eclipse.swt.SWT;
47 import org.eclipse.swt.layout.FillLayout;
48 import org.eclipse.swt.widgets.Composite;
49 import org.eclipse.swt.widgets.Display;
50 import org.eclipse.swt.widgets.Menu;
51 import org.eclipse.ui.IActionBars;
52 import org.eclipse.ui.IWorkbenchActionConstants;
53 import org.eclipse.ui.PlatformUI;
54 import org.eclipse.ui.plugin.AbstractUIPlugin;
55
56 /**
57 * @author alvaro
58 *
59 */
60 public class ResourcesView extends AbsTimeUpdateView implements
61 ITmfTimeSelectionListener, ITmfTimeScaleSelectionListener {
62
63 // ========================================================================
64 // Data
65 // ========================================================================
66 public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.resources";
67
68 // private int totalNumItems = 0;
69 // Actions
70 private Action resetScale;
71 private Action nextEvent;
72 private Action prevEvent;
73 private Action nextTrace;
74 private Action prevTrace;
75 private Action showLegend;
76 private Action filterTraces;
77 private Action zoomIn;
78 private Action zoomOut;
79 private boolean synch = true; // used to be an option
80
81 private ITimeAnalysisViewer tsfviewer;
82 private Composite top;
83
84 // private static SimpleDateFormat stimeformat = new SimpleDateFormat(
85 // "yy/MM/dd HH:mm:ss");
86
87 // private TraceModelImplFactory fact;
88
89 // ========================================================================
90 // Constructor
91 // ========================================================================
92
93 /**
94 * The constructor.
95 */
96 public ResourcesView() {
97 super(ID);
98 }
99
100 // ========================================================================
101 // Methods
102 // ========================================================================
103
104 /**
105 * This is a callback that will allow us to create the viewer and initialize
106 * it.
107 */
108 @Override
109 public void createPartControl(Composite parent) {
110 top = new Composite(parent, SWT.BORDER);
111
112 top.setLayout(new FillLayout());
113 tsfviewer = TmfViewerFactory.createViewer(top,
114 new TimeRangeViewerProvider());
115
116 tsfviewer.addWidgetSelectionListner(this);
117 tsfviewer.addWidgetTimeScaleSelectionListner(this);
118
119 // Traces shall not be grouped to allow synchronisation
120 tsfviewer.groupTraces(true);
121 tsfviewer.setAcceptSelectionAPIcalls(true);
122
123 // Viewer to notify selection to this class
124 // This class will synchronise selections with table.
125 tsfviewer.addWidgetSelectionListner(this);
126 tsfviewer.addWidgetTimeScaleSelectionListner(this);
127
128 // Create the help context id for the viewer's control
129 // TODO: Associate with help system
130 PlatformUI.getWorkbench().getHelpSystem().setHelp(
131 tsfviewer.getControl(),
132 "org.eclipse.linuxtools.lttng.ui.views.resource.view"); //$NON-NLS-1$
133
134 makeActions();
135 hookContextMenu();
136 contributeToActionBars();
137
138 // Register the updater in charge to refresh elements as we update the
139 // time ranges
140 // FlowParamsUpdater listener = FlowModelFactory.getParamsUpdater();
141 // tsfviewer.addWidgetTimeScaleSelectionListner(listener);
142
143 // TODO: re-factor registration / notification process
144 // Register this view to receive updates when the model is updated with
145 // fresh info
146 // ModelListenFactory.getRegister().addFlowModelUpdatesListener(this);
147
148 // Register the event processor factory in charge of event handling
149 EventProcessorProxy.getInstance().addEventProcessorFactory(
150 ResourcesTRangeUpdateFactory.getInstance());
151
152 // set the initial view parameter values
153 // Experiment start and end time
154 // as well as time space width in pixels, used by the time analysis
155 // widget
156 ParamsUpdater paramUpdater = ResourceModelFactory.getParamsUpdater();
157 StateExperimentManager experimentManger = StateManagerFactory
158 .getExperimentManager();
159 // Read relevant values
160 int timeSpaceWidth = tsfviewer.getTimeSpace();
161 TmfTimeRange timeRange = experimentManger.getExperimentTimeRange();
162 if (timeRange != null) {
163 long time0 = timeRange.getStartTime().getValue();
164 long time1 = timeRange.getEndTime().getValue();
165 paramUpdater.update(time0, time1, timeSpaceWidth);
166 }
167
168 // Read current data if any available
169 StateManagerFactory.getExperimentManager().readExperiment(
170 "resourceView", this);
171 }
172
173 private void hookContextMenu() {
174 MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
175 menuMgr.setRemoveAllWhenShown(true);
176 menuMgr.addMenuListener(new IMenuListener() {
177 public void menuAboutToShow(IMenuManager manager) {
178 ResourcesView.this.fillContextMenu(manager);
179 }
180 });
181
182 Menu menu = menuMgr.createContextMenu(tsfviewer.getControl());
183 tsfviewer.getControl().setMenu(menu);
184 getSite()
185 .registerContextMenu(menuMgr, tsfviewer.getSelectionProvider());
186 }
187
188 private void contributeToActionBars() {
189 IActionBars bars = getViewSite().getActionBars();
190 fillLocalPullDown(bars.getMenuManager());
191 fillLocalToolBar(bars.getToolBarManager());
192 }
193
194 private void fillLocalPullDown(IMenuManager manager) {
195 manager.add(new Separator());
196 // manager.add(showLegend);
197 manager.add(new Separator());
198 manager.add(resetScale);
199 manager.add(nextEvent);
200 manager.add(prevEvent);
201 manager.add(nextTrace);
202 manager.add(prevTrace);
203 // manager.add(filterTraces);
204 manager.add(zoomIn);
205 manager.add(zoomOut);
206 manager.add(new Separator());
207 }
208
209 private void fillContextMenu(IMenuManager manager) {
210 // manager.add(showLegend);
211 manager.add(new Separator());
212 manager.add(resetScale);
213 manager.add(nextEvent);
214 manager.add(prevEvent);
215 manager.add(nextTrace);
216 manager.add(prevTrace);
217 // manager.add(showLegend);
218 // manager.add(filterTraces);
219 manager.add(zoomIn);
220 manager.add(zoomOut);
221 manager.add(new Separator());
222 manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
223 }
224
225 private void fillLocalToolBar(IToolBarManager manager) {
226 // manager.add(showLegend);
227 manager.add(new Separator());
228 manager.add(resetScale);
229 manager.add(nextEvent);
230 manager.add(prevEvent);
231 manager.add(nextTrace);
232 manager.add(prevTrace);
233 // manager.add(filterTraces);
234 manager.add(zoomIn);
235 manager.add(zoomOut);
236 manager.add(new Separator());
237 }
238
239 private void makeActions() {
240 // action4
241 resetScale = new Action() {
242 @Override
243 public void run() {
244 if (tsfviewer != null) {
245 tsfviewer.resetStartFinishTime();
246 }
247
248 }
249 };
250 resetScale.setText(Messages.getString("ResourcesView.Action.Reset")); //$NON-NLS-1$
251 resetScale.setToolTipText(Messages
252 .getString("ResourcesView.Action.Reset.ToolTip")); //$NON-NLS-1$
253 resetScale.setImageDescriptor(AbstractUIPlugin
254 .imageDescriptorFromPlugin(Messages
255 .getString("ResourcesView.tmf.UI"),
256 "icons/home_nav.gif"));
257
258 // action5
259 nextEvent = new Action() {
260 @Override
261 public void run() {
262 if (tsfviewer != null) {
263 tsfviewer.selectNextEvent();
264 }
265 }
266 };
267 nextEvent.setText(Messages.getString("ResourcesView.Action.NextEvent")); //$NON-NLS-1$
268 nextEvent.setToolTipText(Messages
269 .getString("ResourcesView.Action.NextEvent.Tooltip")); //$NON-NLS-1$
270 nextEvent.setImageDescriptor(AbstractUIPlugin
271 .imageDescriptorFromPlugin(Messages
272 .getString("ResourcesView.tmf.UI"),
273 "icons/next_event.gif"));
274
275 // action6
276 prevEvent = new Action() {
277 @Override
278 public void run() {
279 if (tsfviewer != null) {
280 tsfviewer.selectPrevEvent();
281 }
282 }
283 };
284 prevEvent.setText(Messages.getString("ResourcesView.Action.PrevEvent")); //$NON-NLS-1$
285 prevEvent.setToolTipText(Messages
286 .getString("ResourcesView.Action.PrevEvent.Tooltip")); //$NON-NLS-1$
287 prevEvent.setImageDescriptor(AbstractUIPlugin
288 .imageDescriptorFromPlugin(Messages
289 .getString("ResourcesView.tmf.UI"),
290 "icons/prev_event.gif"));
291
292 // action7
293 nextTrace = new Action() {
294 @Override
295 public void run() {
296 if (tsfviewer != null) {
297 tsfviewer.selectNextTrace();
298 }
299 }
300 };
301 nextTrace.setText(Messages
302 .getString("ResourcesView.Action.NextResource")); //$NON-NLS-1$
303 nextTrace.setToolTipText(Messages
304 .getString("ResourcesView.Action.NextResource.ToolTip")); //$NON-NLS-1$
305 nextTrace.setImageDescriptor(AbstractUIPlugin
306 .imageDescriptorFromPlugin(Messages
307 .getString("ResourcesView.tmf.UI"),
308 "icons/next_item.gif"));
309
310 // action8
311 prevTrace = new Action() {
312 @Override
313 public void run() {
314 if (tsfviewer != null) {
315 tsfviewer.selectPrevTrace();
316 }
317 }
318 };
319 prevTrace.setText(Messages
320 .getString("ResourcesView.Action.PreviousResource")); //$NON-NLS-1$
321 prevTrace.setToolTipText(Messages
322 .getString("ResourcesView.Action.PreviousResource.Tooltip")); //$NON-NLS-1$
323 prevTrace.setImageDescriptor(AbstractUIPlugin
324 .imageDescriptorFromPlugin(Messages
325 .getString("ResourcesView.tmf.UI"),
326 "icons/prev_item.gif"));
327
328 // action9
329 showLegend = new Action() {
330 @Override
331 public void run() {
332 if (tsfviewer != null) {
333 tsfviewer.showLegend();
334 }
335 }
336 };
337 showLegend.setText(Messages.getString("ResourcesView.Action.Legend")); //$NON-NLS-1$
338 showLegend.setToolTipText(Messages
339 .getString("ResourcesView.Action.Legend.ToolTip")); //$NON-NLS-1$
340
341 // action10
342 filterTraces = new Action() {
343 @Override
344 public void run() {
345 if (tsfviewer != null) {
346 tsfviewer.filterTraces();
347 }
348 }
349 };
350 filterTraces.setText(Messages.getString("ResourcesView.Action.Filter")); //$NON-NLS-1$
351 filterTraces.setToolTipText(Messages
352 .getString("ResourcesView.Action.Filter.ToolTip")); //$NON-NLS-1$
353 filterTraces.setImageDescriptor(AbstractUIPlugin
354 .imageDescriptorFromPlugin(Messages
355 .getString("ResourcesView.tmf.UI"),
356 "icons/filter_items.gif"));
357
358 // action10
359 zoomIn = new Action() {
360 @Override
361 public void run() {
362 if (tsfviewer != null) {
363 tsfviewer.zoomIn();
364 }
365 }
366 };
367 zoomIn.setText(Messages.getString("ResourcesView.Action.ZoomIn")); //$NON-NLS-1$
368 zoomIn.setToolTipText(Messages
369 .getString("ResourcesView.Action.ZoomIn.Tooltip")); //$NON-NLS-1$
370 zoomIn.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
371 Messages.getString("ResourcesView.tmf.UI"),
372 "icons/zoomin_nav.gif"));
373
374 // action10
375 zoomOut = new Action() {
376 @Override
377 public void run() {
378 if (tsfviewer != null) {
379 tsfviewer.zoomOut();
380 }
381 }
382 };
383 zoomOut.setText(Messages.getString("ResourcesView.Action.ZoomOut")); //$NON-NLS-1$
384 zoomOut.setToolTipText(Messages
385 .getString("ResourcesView.Action.ZoomOut.tooltip")); //$NON-NLS-1$
386 zoomOut.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
387 Messages.getString("ResourcesView.tmf.UI"),
388 "icons/zoomout_nav.gif"));
389
390 // PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ELCL_SYNCED);
391 }
392
393 /**
394 * Passing the focus request to the viewer's control.
395 */
396 @Override
397 public void setFocus() {
398 tsfviewer.getControl().setFocus();
399 }
400
401 public void tsfTmProcessSelEvent(TmfTimeSelectionEvent event) {
402 Object source = event.getSource();
403 if (source == null) {
404 return;
405 }
406
407 // TmfTimeAnalysisViewer rViewer = (TmfTimeAnalysisViewer)
408 // event.getSource();
409 // TmfTimeAnalysisViewer synchViewer = null;
410 // Synchronize viewer selections if Enabled,
411 // make sure the selection does not go in loops
412 // if (tsfviewer == rViewer) {
413 // synchViewer = tsfviewer2;
414 // } else {
415 // synchViewer = tsfviewer;
416 // }
417 // Notify listener views.
418
419 ParamsUpdater paramUpdater = ResourceModelFactory.getParamsUpdater();
420 Long savedSelTime = paramUpdater.getSelectedTime();
421
422 long selTimens = event.getSelectedTime();
423
424 // make sure the new selected time is different than saved before
425 // executing update
426 if (savedSelTime == null || savedSelTime != selTimens) {
427 // Notify listener views.
428 synchTimeNotification(selTimens, source);
429
430 // Update the parameter updater to save the selected time
431 paramUpdater.setSelectedTime(selTimens);
432
433 if (TraceDebug.isDEBUG()) {
434 // Object selection = event.getSelection();
435 TraceDebug.debug("Selected Time in Resource View: "
436 + new LttngTimestamp(selTimens));
437 }
438 }
439 }
440
441 /*
442 * (non-Javadoc)
443 *
444 * @seeorg.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.
445 * ITmfTimeScaleSelectionListener
446 * #tsfTmProcessTimeScaleEvent(org.eclipse.linuxtools
447 * .tmf.ui.viewers.timeAnalysis.TmfTimeScaleSelectionEvent)
448 */
449 public void tsfTmProcessTimeScaleEvent(TmfTimeScaleSelectionEvent event) {
450 // source needed to keep track of source values
451 Object source = event.getSource();
452
453 if (source != null) {
454 // Update the parameter updater before carrying out a read request
455 ParamsUpdater paramUpdater = ResourceModelFactory
456 .getParamsUpdater();
457 boolean newParams = paramUpdater.processTimeScaleEvent(event);
458
459 if (newParams) {
460 // Read the updated time window
461 TmfTimeRange trange = paramUpdater.getTrange();
462 if (trange != null) {
463
464 // Notify listener views. views to perform data requests
465 // upon the notification below
466 synchTimeRangeNotification(trange, paramUpdater
467 .getSelectedTime(), source);
468 }
469 }
470 }
471 }
472
473 /**
474 * Obtains the remainder fraction on unit Seconds of the entered value in
475 * nanoseconds. e.g. input: 1241207054171080214 ns The number of seconds can
476 * be obtain by removing the last 9 digits: 1241207054 the fractional
477 * portion of seconds, expressed in ns is: 171080214
478 *
479 * @param v
480 * @return
481 */
482 public String formatNs(long v) {
483 StringBuffer str = new StringBuffer();
484 boolean neg = v < 0;
485 if (neg) {
486 v = -v;
487 str.append('-');
488 }
489
490 String strVal = String.valueOf(v);
491 if (v < 1000000000) {
492 return strVal;
493 }
494
495 // Extract the last nine digits (e.g. fraction of a S expressed in ns
496 return strVal.substring(strVal.length() - 9);
497 }
498
499 /**
500 * @param items
501 * @param startTime
502 * @param endTime
503 * @param timeUpdate - Time bounds updated needed e.g. if a new Experiment or trace is selected
504 */
505 public void resourceModelUpdates(final ITmfTimeAnalysisEntry[] items,
506 final long startTime, final long endTime, final boolean timeUpdate) {
507 tsfviewer.getControl().getDisplay().asyncExec(new Runnable() {
508
509 public void run() {
510 tsfviewer.display(items, startTime, endTime, timeUpdate);
511 tsfviewer.resizeControls();
512 }
513 });
514 }
515
516 @Override
517 public void dispose() {
518 // dispose parent resources
519 super.dispose();
520 // Remove the event processor factory
521 EventProcessorProxy.getInstance().removeEventProcessorFactory(
522 ResourcesTRangeUpdateFactory.getInstance());
523
524 tsfviewer.removeWidgetSelectionListner(this);
525 tsfviewer.removeWidgetTimeScaleSelectionListner(this);
526 tsfviewer = null;
527 }
528
529 /**
530 * Trigger time synchronisation to other views this method shall be called
531 * when a check has been performed to note that an actual change of time has
532 * been performed vs a pure re-selection of the same time
533 *
534 * @param time
535 */
536 private void synchTimeNotification(long time, Object source) {
537 // if synchronisation selected
538 if (synch) {
539 // Notify other views
540 TmfSignalManager.dispatchSignal(new TmfTimeSynchSignal(source,
541 new LttngTimestamp(time)));
542 }
543 }
544
545 private void synchTimeRangeNotification(TmfTimeRange trange,
546 Long selectedTime, Object source) {
547 // if synchronisation selected
548 if (synch) {
549 // Notify other views
550 TmfSignalManager.dispatchSignal(new TmfRangeSynchSignal(source,
551 trange, new LttngTimestamp(selectedTime)));
552 }
553 }
554
555 /**
556 * Registers as listener of time selection from other tmf views
557 *
558 * @param signal
559 */
560 @TmfSignalHandler
561 public void synchToTime(TmfTimeSynchSignal signal) {
562 if (synch) {
563 Object source = signal.getSource();
564 if (signal != null && source != null && source != this) {
565 // Internal value is expected in nano seconds.
566 long selectedTime = signal.getCurrentTime().getValue();
567 if (tsfviewer != null) {
568 tsfviewer.setSelectedTime(selectedTime, true, source);
569 }
570 }
571 }
572 }
573
574 /**
575 * Annotation Registers as listener of time range selection from other views
576 * The implementation handles the entry of the signal.
577 *
578 * @param signal
579 */
580 @TmfSignalHandler
581 public void synchToTimeRange(TmfRangeSynchSignal signal) {
582 if (synch) {
583 Object source = signal.getSource();
584 if (signal != null && source != null && source != this) {
585 // Internal value is expected in nano seconds.
586 TmfTimeRange trange = signal.getCurrentRange();
587 if (tsfviewer != null) {
588 tsfviewer
589 .setSelectVisTimeWindow(trange.getStartTime()
590 .getValue(),
591 trange.getEndTime().getValue(), source);
592
593 // Request the data to populate the new selected time window
594 dataRequest(trange);
595 }
596 }
597 }
598 }
599
600 /*
601 * (non-Javadoc)
602 *
603 * @see
604 * org.eclipse.linuxtools.lttng.ui.views.common.LttngTimeUpdateView#waitCursor
605 * (boolean)
606 */
607 @Override
608 protected void waitCursor(final boolean waitInd) {
609 if (tsfviewer != null) {
610 Display display = tsfviewer.getControl().getDisplay();
611
612 // Perform the updates on the UI thread
613 display.asyncExec(new Runnable() {
614 public void run() {
615 tsfviewer.waitCursor(waitInd);
616 }
617 });
618 }
619 }
620
621 /*
622 * (non-Javadoc)
623 *
624 * @seeorg.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView#
625 * ModelUpdatePrep(java.lang.String, boolean)
626 */
627 @Override
628 public void ModelUpdatePrep(String traceId, boolean clearAllData,
629 TmfTimeRange trange) {
630 if (clearAllData) {
631 ResourceModelFactory.getResourceContainer().clearResources();
632 } else {
633 ResourceModelFactory.getResourceContainer().clearChildren(traceId);
634 }
635
636 ParamsUpdater updater = ResourceModelFactory.getParamsUpdater();
637 // Start over
638 updater.setEventsDiscarded(0);
639
640 // Update new visible time range if available
641 if (trange != null) {
642 updater.update(trange.getStartTime().getValue(), trange
643 .getEndTime().getValue());
644 }
645 }
646
647 /*
648 * (non-Javadoc)
649 *
650 * @seeorg.eclipse.linuxtools.lttng.ui.views.common.LttngTimeUpdateView#
651 * ModelUpdateComplete(org.eclipse.linuxtools.lttng.state.StateDataRequest)
652 */
653 @Override
654 public void ModelUpdateComplete(StateDataRequest request) {
655 StateManager smanager = request.getStateManager();
656 long experimentStartTime = -1;
657 long experimentEndTime = -1;
658 TmfTimeRange experimentTimeRange = smanager.getExperimentTimeWindow();
659 if (experimentTimeRange != null) {
660 experimentStartTime = experimentTimeRange.getStartTime().getValue();
661 experimentEndTime = experimentTimeRange.getEndTime().getValue();
662 }
663
664 // Obtain the current resource list
665 TimeRangeEventResource[] resourceArr = ResourceModelFactory
666 .getResourceContainer().readResources();
667
668 // Sort the array by pid
669 Arrays.sort(resourceArr);
670
671 // Update the view part
672 resourceModelUpdates(resourceArr, experimentStartTime,
673 experimentEndTime, request.isclearDataInd());
674
675 // reselect to original time
676 ParamsUpdater paramUpdater = ResourceModelFactory.getParamsUpdater();
677 final Long selTime = paramUpdater.getSelectedTime();
678 if (selTime != null) {
679 Display display = tsfviewer.getControl().getDisplay();
680 display.asyncExec(new Runnable() {
681 public void run() {
682 tsfviewer.setSelectedTime(selTime, false, this);
683 }
684 });
685 }
686
687 if (TraceDebug.isDEBUG()) {
688 Long count = smanager.getEventCount();
689 int eventCount = 0;
690 for (TimeRangeEventResource resource : resourceArr) {
691 eventCount += resource.getTraceEvents().size();
692 }
693
694 int discarded = ResourceModelFactory.getParamsUpdater()
695 .getEventsDiscarded();
696 int discardedOutofOrder = ResourceModelFactory.getParamsUpdater()
697 .getEventsDiscardedWrongOrder();
698 TraceDebug
699 .debug("Events handled: "
700 + count
701 + " Events loaded in Resource view: "
702 + eventCount
703 + " Number of events discarded: "
704 + discarded
705 + "\n\tNumber of events discarded with start time earlier than next good time: "
706 + discardedOutofOrder);
707 }
708
709 }
710 }
This page took 0.04949 seconds and 6 git commands to generate.