Improve TmfTrace test coverage
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.kernel.ui / src / org / eclipse / linuxtools / internal / lttng2 / kernel / ui / views / resources / ResourcesView.java
CommitLineData
04835162
PT
1/*******************************************************************************\r
2 * Copyright (c) 2012 Ericsson\r
3 * \r
4 * All rights reserved. This program and the accompanying materials are\r
5 * made available under the terms of the Eclipse Public License v1.0 which\r
6 * accompanies this distribution, and is available at\r
7 * http://www.eclipse.org/legal/epl-v10.html\r
8 * \r
9 * Contributors:\r
10 * Patrick Tasse - Initial API and implementation\r
11 *******************************************************************************/\r
12\r
13package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.resources;\r
14\r
15import java.util.ArrayList;\r
16import java.util.HashMap;\r
17import java.util.Iterator;\r
18import java.util.List;\r
19import java.util.Map;\r
20\r
21import org.eclipse.linuxtools.lttng2.kernel.core.trace.Attributes;\r
22import org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace;\r
23import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r
24import org.eclipse.linuxtools.tmf.core.event.TmfEvent;\r
25import org.eclipse.linuxtools.tmf.core.exceptions.AttributeNotFoundException;\r
26import org.eclipse.linuxtools.tmf.core.exceptions.StateValueTypeException;\r
27import org.eclipse.linuxtools.tmf.core.exceptions.TimeRangeException;\r
28import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;\r
29import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;\r
30import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;\r
31import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;\r
32import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier;\r
33import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\r
34import org.eclipse.linuxtools.tmf.ui.views.TmfView;\r
35import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphProvider;\r
36import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphViewer;\r
37import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r
38import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;\r
39import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.TimeEvent;\r
40import org.eclipse.swt.SWT;\r
41import org.eclipse.swt.widgets.Composite;\r
42import org.eclipse.swt.widgets.Display;\r
43\r
44public class ResourcesView extends TmfView {\r
45\r
46 // ------------------------------------------------------------------------\r
47 // Constants\r
48 // ------------------------------------------------------------------------\r
49\r
50 /**\r
51 * View ID.\r
52 */\r
53 public static final String ID = "org.eclipse.linuxtools.lttng2.kernel.ui.views.resources"; //$NON-NLS-1$\r
54\r
55 // ------------------------------------------------------------------------\r
56 // Fields\r
57 // ------------------------------------------------------------------------\r
58\r
59 // The time graph viewer\r
60 TimeGraphViewer fTimeGraphViewer;\r
61\r
62 // The selected experiment\r
63 private TmfExperiment<ITmfEvent> fSelectedExperiment;\r
64\r
65 // The time graph entry list\r
66 private ArrayList<ITimeGraphEntry> fEntryList;\r
67\r
68 // The start time\r
69 private long fStartTime;\r
70\r
71 // The end time\r
72 private long fEndTime;\r
73\r
74 // The display width\r
75 private int fDisplayWidth;\r
76\r
77 // ------------------------------------------------------------------------\r
78 // Classes\r
79 // ------------------------------------------------------------------------\r
80\r
81 private class GroupEntry implements ITimeGraphEntry {\r
82 public ITimeGraphEntry fParent;\r
83 public ArrayList<ITimeGraphEntry> fChildren;\r
84 public String fName;\r
85\r
86 public GroupEntry(ITimeGraphEntry parent, String name) {\r
87 fParent = parent;\r
88 fChildren = new ArrayList<ITimeGraphEntry>();\r
89 fName = name;\r
90 }\r
91\r
92 @Override\r
93 public ITimeGraphEntry getParent() {\r
94 return fParent;\r
95 }\r
96\r
97 @Override\r
98 public boolean hasChildren() {\r
99 return fChildren != null && fChildren.size() > 0;\r
100 }\r
101\r
102 @Override\r
103 public ITimeGraphEntry[] getChildren() {\r
104 return fChildren.toArray(new ITimeGraphEntry[0]);\r
105 }\r
106\r
107 @Override\r
108 public String getName() {\r
109 return fName;\r
110 }\r
111\r
112 @Override\r
113 public long getStartTime() {\r
114 return -1;\r
115 }\r
116\r
117 @Override\r
118 public long getStopTime() {\r
119 return -1;\r
120 }\r
121\r
122 @Override\r
123 public Iterator<ITimeEvent> getTimeEventsIterator() {\r
124 return null;\r
125 }\r
126\r
127 @Override\r
128 public <T extends ITimeEvent> Iterator<T> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {\r
129 return null;\r
130 }\r
131\r
132 public void addChild(ITimeGraphEntry entry) {\r
133 fChildren.add(entry);\r
134 }\r
135 }\r
136\r
137 // ------------------------------------------------------------------------\r
138 // Constructors\r
139 // ------------------------------------------------------------------------\r
140\r
141 public ResourcesView() {\r
142 super(ID);\r
143 fDisplayWidth = Display.getDefault().getBounds().width;\r
144 }\r
145\r
146 // ------------------------------------------------------------------------\r
147 // ViewPart\r
148 // ------------------------------------------------------------------------\r
149\r
150 /* (non-Javadoc)\r
151 * @see org.eclipse.linuxtools.tmf.ui.views.TmfView#createPartControl(org.eclipse.swt.widgets.Composite)\r
152 */\r
153 @Override\r
154 public void createPartControl(Composite parent) {\r
155 fTimeGraphViewer = new TimeGraphViewer(parent, SWT.NONE);\r
156\r
157 fTimeGraphViewer.setTimeGraphProvider(new TimeGraphProvider() {\r
158 @Override\r
159 public String getTraceClassName(ITimeGraphEntry trace) {\r
160 return "trace class"; //$NON-NLS-1$\r
161 }\r
162 \r
163 @Override\r
164 public String getStateName(StateColor color) {\r
165 return "state name"; //$NON-NLS-1$\r
166 }\r
167 \r
168 @Override\r
169 public String getEventName(ITimeEvent event, boolean upper, boolean extInfo) {\r
170 return "event name"; //$NON-NLS-1$\r
171 }\r
172 \r
173 @Override\r
174 public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
175 return new HashMap<String, String>();\r
176 }\r
177 \r
178 @Override\r
179 public StateColor getEventColor(ITimeEvent event) {\r
180 if (event.getTime() % 2 == 0) {\r
181 return StateColor.BLACK;\r
182 } else {\r
183 return StateColor.GRAY;\r
184 }\r
185 }\r
186 });\r
187\r
188 final Thread thread = new Thread() {\r
189 @Override\r
190 public void run() {\r
191 if (TmfExperiment.getCurrentExperiment() != null) {\r
192 selectExperiment(TmfExperiment.getCurrentExperiment());\r
193 }\r
194 }\r
195 };\r
196 thread.start();\r
197 }\r
198\r
199 /* (non-Javadoc)\r
200 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
201 */\r
202 @Override\r
203 public void setFocus() {\r
204 fTimeGraphViewer.setFocus();\r
205 }\r
206\r
207 // ------------------------------------------------------------------------\r
208 // Signal handlers\r
209 // ------------------------------------------------------------------------\r
210\r
211 @TmfSignalHandler\r
212 public void experimentSelected(final TmfExperimentSelectedSignal<? extends TmfEvent> signal) {\r
213 if (signal.getExperiment().equals(fSelectedExperiment)) {\r
214 return;\r
215 }\r
216\r
217 final Thread thread = new Thread() {\r
218 @Override\r
219 public void run() {\r
220 selectExperiment(signal.getExperiment());\r
221 }};\r
222 thread.start();\r
223 }\r
224\r
225 @SuppressWarnings("unchecked")\r
226 private void selectExperiment(TmfExperiment<?> experiment) {\r
227 fStartTime = Long.MAX_VALUE;\r
228 fEndTime = Long.MIN_VALUE;\r
229 fSelectedExperiment = (TmfExperiment<ITmfEvent>) experiment;\r
230 fEntryList = new ArrayList<ITimeGraphEntry>();\r
231 for (ITmfTrace<?> trace : experiment.getTraces()) {\r
232 GroupEntry groupEntry = new GroupEntry(null, trace.getPath());\r
233 fEntryList.add(groupEntry);\r
234 refresh();\r
235 if (trace instanceof CtfKernelTrace) {\r
236 CtfKernelTrace ctfKernelTrace = (CtfKernelTrace) trace;\r
237 IStateSystemQuerier ssq = ctfKernelTrace.getStateSystem();\r
238 long start = ssq.getStartTime();\r
239 long end = ssq.getCurrentEndTime();\r
240 fStartTime = Math.min(fStartTime, start);\r
241 fEndTime = Math.max(fEndTime, end);\r
242 List<Integer> cpuQuarks = ssq.getQuarks(Attributes.CPUS, "*"); //$NON-NLS-1$\r
243 for (int cpuQuark : cpuQuarks) {\r
244 String cpuName = "CPU " + ssq.getAttributeName(cpuQuark);\r
245 ResourcesEntry entry = new ResourcesEntry(groupEntry, ctfKernelTrace, cpuName);\r
246 try {\r
247 int currentThreadQuark = ssq.getQuarkRelative(cpuQuark, Attributes.CURRENT_THREAD);\r
248 long resolution = (end - start) / fDisplayWidth;\r
249 List<ITmfStateInterval> currentThreadIntervals = ssq.queryHistoryRange(currentThreadQuark, start, end, resolution);\r
250 for (ITmfStateInterval currentThreadInterval : currentThreadIntervals) {\r
251 if (!currentThreadInterval.getStateValue().isNull() && currentThreadInterval.getStateValue().getType() == 0) {\r
252 int currentThread = currentThreadInterval.getStateValue().unboxInt();\r
253 long startTime = currentThreadInterval.getStartTime();\r
254 long endTime = currentThreadInterval.getEndTime();\r
255 entry.addTraceEvent(new TimeEvent(entry, startTime, endTime - startTime));\r
256 }\r
257 }\r
258 } catch (AttributeNotFoundException e) {\r
259 e.printStackTrace();\r
260 } catch (TimeRangeException e) {\r
261 e.printStackTrace();\r
262 } catch (StateValueTypeException e) {\r
263 e.printStackTrace();\r
264 }\r
265 groupEntry.addChild(entry);\r
266 refresh();\r
267 }\r
268 }\r
269 }\r
270 }\r
271\r
272 private void refresh() {\r
273 Display.getDefault().asyncExec(new Runnable() {\r
274 @Override\r
275 public void run() {\r
276 if (fTimeGraphViewer.getControl().isDisposed()) {\r
277 return;\r
278 }\r
279 fTimeGraphViewer.setInput(fEntryList.toArray(new ITimeGraphEntry[0]));\r
280 fTimeGraphViewer.setTimeBounds(fStartTime, fEndTime);\r
281 fTimeGraphViewer.setStartFinishTime(fStartTime, fEndTime);\r
282 }\r
283 });\r
284 }\r
285\r
286}\r
This page took 0.03663 seconds and 5 git commands to generate.