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