analysis : Abstract the latency statistics analysis
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.ui / src / org / eclipse / tracecompass / internal / analysis / os / linux / ui / views / latency / statistics / SystemCallLatencyStatisticsViewer.java
1 /*******************************************************************************
2 * Copyright (c) 2015 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:
10 * Bernd Hufmann - Initial API and implementation
11 *******************************************************************************/
12 package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.latency.statistics;
13
14 import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
15
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Map.Entry;
19
20 import org.eclipse.jdt.annotation.Nullable;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.statistics.SystemCallLatencyStatisticsAnalysisModule;
23 import org.eclipse.tracecompass.internal.analysis.timing.core.segmentstore.statistics.SegmentStoreStatistics;
24 import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.statistics.AbstractSegmentStoreStatisticsViewer;
25 import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule;
26 import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeViewerEntry;
27 import org.eclipse.tracecompass.tmf.ui.viewers.tree.TmfTreeViewerEntry;
28
29 /**
30 * A tree viewer implementation for displaying latency statistics
31 *
32 * @author Bernd Hufmann
33 *
34 */
35 public class SystemCallLatencyStatisticsViewer extends AbstractSegmentStoreStatisticsViewer {
36
37 private static final String SYSCALL_LEVEL = checkNotNull(Messages.LatencyStatistics_SyscallLevelName);
38
39 /**
40 * Constructor
41 *
42 * @param parent
43 * the parent composite
44 */
45 public SystemCallLatencyStatisticsViewer(Composite parent) {
46 super(parent);
47 }
48
49 /**
50 * Gets the statistics analysis module
51 *
52 * @return the statistics analysis module
53 */
54 @Override
55 protected @Nullable TmfAbstractAnalysisModule createStatisticsAnalysiModule() {
56 SystemCallLatencyStatisticsAnalysisModule module = new SystemCallLatencyStatisticsAnalysisModule();
57 return module;
58 }
59
60 @Override
61 protected @Nullable ITmfTreeViewerEntry updateElements(long start, long end, boolean isSelection) {
62 if (isSelection || (start == end)) {
63 return null;
64 }
65
66 TmfAbstractAnalysisModule analysisModule = getStatisticsAnalysisModule();
67
68 if (getTrace() == null || !(analysisModule instanceof SystemCallLatencyStatisticsAnalysisModule)) {
69 return null;
70 }
71
72 SystemCallLatencyStatisticsAnalysisModule module = (SystemCallLatencyStatisticsAnalysisModule) analysisModule;
73
74 module.waitForCompletion();
75
76 TmfTreeViewerEntry root = new TmfTreeViewerEntry(""); //$NON-NLS-1$
77 final SegmentStoreStatistics entry = module.getTotalStats();
78 if (entry != null) {
79
80 List<ITmfTreeViewerEntry> entryList = root.getChildren();
81
82 TmfTreeViewerEntry child = new SegmentStoreStatisticsEntry(checkNotNull(Messages.LatencyStatistics_TotalLabel), entry);
83 entryList.add(child);
84 HiddenTreeViewerEntry syscalls = new HiddenTreeViewerEntry(SYSCALL_LEVEL);
85 child.addChild(syscalls);
86
87 Map<String, SegmentStoreStatistics> perSyscallStats = module.getPerSegmentTypeStats();
88 if (perSyscallStats != null) {
89 for (Entry<String, SegmentStoreStatistics> statsEntry : perSyscallStats.entrySet()) {
90 syscalls.addChild(new SegmentStoreStatisticsEntry(statsEntry.getKey(), statsEntry.getValue()));
91 }
92 }
93 }
94 return root;
95 }
96
97 }
This page took 0.032891 seconds and 6 git commands to generate.