lttng: Convert performance results from Derby to JSON
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / statistics / TmfStatisticsView.java
CommitLineData
79e08fd0 1/*******************************************************************************
8967c8c0 2 * Copyright (c) 2011, 2014 Ericsson
20ff3b75 3 *
79e08fd0
BH
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
20ff3b75 8 *
79e08fd0 9 * Contributors:
09667aa4 10 * Mathieu Denis <mathieu.denis@polymtl.ca> - Generalized version based on LTTng
79e08fd0 11 * Bernd Hufmann - Updated to use trace reference in TmfEvent and streaming
25a042b3 12 * Mathieu Denis - New request added to update the statistics from the selected time range
cfd22ad0 13 * Mathieu Denis - Generalization of the view to instantiate a viewer specific to a trace type
20ff3b75 14 *
79e08fd0
BH
15 *******************************************************************************/
16
17package org.eclipse.linuxtools.tmf.ui.views.statistics;
18
6c13869b 19import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
faa38350
PT
20import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
21import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
22import org.eclipse.linuxtools.tmf.core.signal.TmfTraceRangeUpdatedSignal;
23import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
6c13869b 24import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
05627bda 25import org.eclipse.linuxtools.tmf.ui.viewers.ITmfViewer;
cfd22ad0 26import org.eclipse.linuxtools.tmf.ui.viewers.statistics.TmfStatisticsViewer;
79e08fd0 27import org.eclipse.linuxtools.tmf.ui.views.TmfView;
05627bda
MD
28import org.eclipse.linuxtools.tmf.ui.widgets.tabsview.TmfViewerFolder;
29import org.eclipse.swt.SWT;
79e08fd0 30import org.eclipse.swt.widgets.Composite;
05627bda 31import org.eclipse.swt.widgets.Shell;
79e08fd0
BH
32
33/**
79e08fd0 34 * The generic Statistics View displays statistics for any kind of traces.
20ff3b75 35 *
09667aa4
MD
36 * It is implemented according to the MVC pattern. - The model is a
37 * TmfStatisticsTreeNode built by the State Manager. - The view is built with a
38 * TreeViewer. - The controller that keeps model and view synchronized is an
39 * observer of the model.
20ff3b75 40 *
25a042b3 41 * @version 2.0
09667aa4 42 * @author Mathieu Denis
79e08fd0
BH
43 */
44public class TmfStatisticsView extends TmfView {
09667aa4 45
79e08fd0 46 /**
05627bda 47 * The ID corresponds to the package in which this class is embedded.
79e08fd0
BH
48 */
49 public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.statistics"; //$NON-NLS-1$
09667aa4 50
d26274e7 51 /**
09667aa4 52 * The view name.
d26274e7 53 */
66711dc8 54 public static final String TMF_STATISTICS_VIEW = "StatisticsView"; //$NON-NLS-1$
09667aa4 55
d26274e7 56 /**
05627bda 57 * The viewer that builds the columns to show the statistics.
25a042b3
MD
58 *
59 * @since 2.0
60 */
05627bda 61 protected final TmfViewerFolder fStatsViewers;
25a042b3 62
d26274e7 63 /**
faa38350 64 * Stores a reference to the selected trace.
cfd22ad0 65 */
faa38350 66 private ITmfTrace fTrace;
09667aa4 67
79e08fd0
BH
68 /**
69 * Constructor of a statistics view.
20ff3b75 70 *
cfd22ad0 71 * @param viewName The name to give to the view.
79e08fd0
BH
72 */
73 public TmfStatisticsView(String viewName) {
74 super(viewName);
05627bda
MD
75 /*
76 * Create a fake parent for initialization purpose, than set the parent
77 * as soon as createPartControl is called.
78 */
79 Composite temporaryParent = new Shell();
80 fStatsViewers = new TmfViewerFolder(temporaryParent);
79e08fd0
BH
81 }
82
83 /**
84 * Default constructor.
85 */
86 public TmfStatisticsView() {
87 this(TMF_STATISTICS_VIEW);
88 }
89
79e08fd0
BH
90 @Override
91 public void createPartControl(Composite parent) {
05627bda 92 fStatsViewers.setParent(parent);
05627bda 93 createStatisticsViewers();
79e08fd0 94
3ac5721a
AM
95 ITmfTrace trace = getActiveTrace();
96 if (trace != null) {
97 traceSelected(new TmfTraceSelectedSignal(this, trace));
cfd22ad0
MD
98 }
99 }
100
cfd22ad0
MD
101 @Override
102 public void dispose() {
103 super.dispose();
05627bda 104 fStatsViewers.dispose();
cfd22ad0
MD
105 }
106
faa38350
PT
107 /**
108 * Handler called when an trace is opened.
109 *
110 * @param signal
111 * Contains the information about the selection.
112 * @since 2.0
113 */
114 @TmfSignalHandler
115 public void traceOpened(TmfTraceOpenedSignal signal) {
116 /*
117 * Dispose the current viewer and adapt the new one to the trace
118 * type of the trace opened
119 */
120 fStatsViewers.clear();
121 // Update the current trace
122 fTrace = signal.getTrace();
123 createStatisticsViewers();
124 fStatsViewers.layout();
125 }
126
127 /**
128 * Handler called when an trace is selected. Checks if the trace
129 * has changed and requests the selected trace if it has not yet been
130 * cached.
131 *
132 * @param signal
133 * Contains the information about the selection.
134 * @since 2.0
135 */
136 @TmfSignalHandler
137 public void traceSelected(TmfTraceSelectedSignal signal) {
138 // Does not reload the same trace if already opened
139 if (signal.getTrace() != fTrace) {
140 /*
141 * Dispose the current viewer and adapt the new one to the trace
142 * type of the trace selected
143 */
144 fStatsViewers.clear();
145 // Update the current trace
146 fTrace = signal.getTrace();
147 createStatisticsViewers();
148 fStatsViewers.layout();
149
150 TmfTraceRangeUpdatedSignal updateSignal = new TmfTraceRangeUpdatedSignal(this, fTrace, fTrace.getTimeRange());
151
faa38350
PT
152 for (ITmfViewer viewer : fStatsViewers.getViewers()) {
153 TmfStatisticsViewer statsViewer = (TmfStatisticsViewer) viewer;
154 statsViewer.sendPartialRequestOnNextUpdate();
155 statsViewer.traceRangeUpdated(updateSignal);
156 }
faa38350
PT
157 } else {
158 /*
159 * If the same trace is reselected, sends a notification to
160 * the viewers to make sure they reload correctly their partial
161 * event count.
162 */
163 for (ITmfViewer viewer : fStatsViewers.getViewers()) {
164 TmfStatisticsViewer statsViewer = (TmfStatisticsViewer) viewer;
165 // Will update the partial event count if needed.
166 statsViewer.sendPartialRequestOnNextUpdate();
167 }
168 }
169 }
170
ea279a69
FC
171 /**
172 * @param signal the incoming signal
173 * @since 2.0
174 */
175 @TmfSignalHandler
faa38350
PT
176 public void traceClosed(TmfTraceClosedSignal signal) {
177 if (signal.getTrace() != fTrace) {
178 return;
179 }
ea279a69
FC
180
181 // Clear the internal data
faa38350 182 fTrace = null;
ea279a69
FC
183
184 // Clear the UI widgets
185 fStatsViewers.clear(); // Also cancels ongoing requests
186 createStatisticsViewers();
187 fStatsViewers.layout();
188 }
189
cfd22ad0
MD
190 @Override
191 public void setFocus() {
05627bda 192 fStatsViewers.setFocus();
cfd22ad0
MD
193 }
194
c0341b86 195 /**
faa38350 196 * Creates the statistics viewers for all traces in an experiment and
eeb388b1 197 * populates a viewer folder. Each viewer is placed in a different tab and
05627bda 198 * the first one is selected automatically.
09667aa4 199 *
05627bda
MD
200 * It uses the extension point that defines the statistics viewer to build
201 * from the trace type. If no viewer is defined, another tab won't be
202 * created, since the global viewer already contains all the basic
faa38350 203 * statistics. If there is no trace selected, a global statistics viewer will
05627bda 204 * still be created.
c0341b86 205 *
25a042b3
MD
206 * @since 2.0
207 */
05627bda
MD
208 protected void createStatisticsViewers() {
209 // Default style for the tabs that will be created
210 int defaultStyle = SWT.NONE;
25a042b3 211
05627bda
MD
212 // The folder composite that will contain the tabs
213 Composite folder = fStatsViewers.getParentFolder();
25a042b3 214
05627bda 215 // Instantiation of the global viewer
faa38350 216 if (fTrace != null) {
87f83123
AM
217 // Shows the name of the trace in the global tab
218 TmfStatisticsViewer globalViewer = new TmfStatisticsViewer(folder, Messages.TmfStatisticsView_GlobalTabName + " - " + fTrace.getName(), fTrace); //$NON-NLS-1$
05627bda
MD
219 fStatsViewers.addTab(globalViewer, Messages.TmfStatisticsView_GlobalTabName, defaultStyle);
220
05627bda 221 } else {
87f83123
AM
222 // There is no trace selected. Shows an empty global tab
223 TmfStatisticsViewer globalViewer = new TmfStatisticsViewer(folder, Messages.TmfStatisticsView_GlobalTabName, fTrace);
05627bda 224 fStatsViewers.addTab(globalViewer, Messages.TmfStatisticsView_GlobalTabName, defaultStyle);
79e08fd0 225 }
05627bda
MD
226 // Makes the global viewer visible
227 fStatsViewers.setSelection(0);
79e08fd0 228 }
79e08fd0 229}
This page took 0.080588 seconds and 5 git commands to generate.