ctf: Handle traces with unknown event attributes
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.kernel.ui / src / org / eclipse / linuxtools / internal / lttng2 / kernel / ui / views / controlflow / ControlFlowEntry.java
CommitLineData
04835162
PT
1/*******************************************************************************\r
2 * Copyright (c) 2012 Ericsson\r
27f3a03d 3 *\r
04835162
PT
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
27f3a03d 8 *\r
04835162
PT
9 * Contributors:\r
10 * Patrick Tasse - Initial API and implementation\r
11 *******************************************************************************/\r
12\r
13package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;\r
14\r
49ffadb7 15import java.util.ArrayList;\r
04835162 16import java.util.Iterator;\r
04835162
PT
17import java.util.List;\r
18\r
49ffadb7 19import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common.EventIterator;\r
04835162
PT
20import org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace;\r
21import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r
22import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;\r
23\r
27f3a03d
AM
24/**\r
25 * An entry in the Control Flow view\r
26 */\r
2c33fc31 27public class ControlFlowEntry implements ITimeGraphEntry {\r
27f3a03d
AM
28 private final int fThreadQuark;\r
29 private final CtfKernelTrace fTrace;\r
49ffadb7 30 private ControlFlowEntry fParent = null;\r
27f3a03d
AM
31 private final ArrayList<ControlFlowEntry> fChildren = new ArrayList<ControlFlowEntry>();\r
32 private final String fName;\r
33 private final int fThreadId;\r
34 private final int fParentThreadId;\r
49ffadb7 35 private long fBirthTime = -1;\r
04835162
PT
36 private long fStartTime = -1;\r
37 private long fEndTime = -1;\r
49ffadb7
PT
38 private List<ITimeEvent> fEventList = new ArrayList<ITimeEvent>();\r
39 private List<ITimeEvent> fZoomedEventList = null;\r
04835162 40\r
27f3a03d
AM
41 /**\r
42 * Constructor\r
43 *\r
44 * @param threadQuark\r
45 * The attribute quark matching the thread\r
46 * @param trace\r
47 * The trace on which we are working\r
48 * @param execName\r
49 * The exec_name of this entry\r
50 * @param threadId\r
51 * The TID of the thread\r
52 * @param parentThreadId\r
53 * the Parent_TID of this thread\r
54 * @param birthTime\r
55 * The birth time of this entry (this allows separating different\r
56 * process that could have the same TID)\r
57 * @param startTime\r
58 * The start time of this process's lifetime\r
59 * @param endTime\r
60 * The end time of this process\r
61 */\r
3d90c4ff 62 public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {\r
49ffadb7 63 fThreadQuark = threadQuark;\r
04835162
PT
64 fTrace = trace;\r
65 fName = execName;\r
66 fThreadId = threadId;\r
3d90c4ff 67 fParentThreadId = parentThreadId;\r
49ffadb7 68 fBirthTime = birthTime;\r
04835162
PT
69 fStartTime = startTime;\r
70 fEndTime = endTime;\r
71 }\r
72\r
73 @Override\r
74 public ITimeGraphEntry getParent() {\r
49ffadb7 75 return fParent;\r
04835162
PT
76 }\r
77\r
78 @Override\r
79 public boolean hasChildren() {\r
49ffadb7 80 return fChildren != null && fChildren.size() > 0;\r
04835162
PT
81 }\r
82\r
83 @Override\r
49ffadb7
PT
84 public ControlFlowEntry[] getChildren() {\r
85 return fChildren.toArray(new ControlFlowEntry[0]);\r
04835162
PT
86 }\r
87\r
88 @Override\r
89 public String getName() {\r
90 return fName;\r
91 }\r
92\r
04835162
PT
93 @Override\r
94 public long getStartTime() {\r
95 return fStartTime;\r
96 }\r
97\r
98 @Override\r
49ffadb7 99 public long getEndTime() {\r
04835162
PT
100 return fEndTime;\r
101 }\r
102\r
8d8cb868
PT
103 @Override\r
104 public boolean hasTimeEvents() {\r
105 return true;\r
106 }\r
107\r
04835162
PT
108 @Override\r
109 public Iterator<ITimeEvent> getTimeEventsIterator() {\r
49ffadb7 110 return new EventIterator(fEventList, fZoomedEventList);\r
04835162
PT
111 }\r
112\r
113 @Override\r
114 public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {\r
49ffadb7 115 return new EventIterator(fEventList, fZoomedEventList, startTime, stopTime);\r
04835162
PT
116 }\r
117\r
27f3a03d
AM
118 /**\r
119 * Get the quark of the attribute matching this thread's TID\r
120 *\r
121 * @return The quark\r
122 */\r
49ffadb7
PT
123 public int getThreadQuark() {\r
124 return fThreadQuark;\r
125 }\r
126\r
27f3a03d
AM
127 /**\r
128 * Get the CTF trace object\r
129 *\r
130 * @return The trace\r
131 */\r
49ffadb7
PT
132 public CtfKernelTrace getTrace() {\r
133 return fTrace;\r
134 }\r
135\r
27f3a03d
AM
136 /**\r
137 * Get this entry's thread ID\r
138 *\r
139 * @return The TID\r
140 */\r
49ffadb7
PT
141 public int getThreadId() {\r
142 return fThreadId;\r
143 }\r
144\r
27f3a03d
AM
145 /**\r
146 * Get this thread's parent TID\r
147 *\r
148 * @return The "PTID"\r
149 */\r
3d90c4ff
PT
150 public int getParentThreadId() {\r
151 return fParentThreadId;\r
49ffadb7
PT
152 }\r
153\r
27f3a03d
AM
154 /**\r
155 * Get the birth time of this entry/process\r
156 *\r
157 * @return The birth time\r
158 */\r
49ffadb7
PT
159 public long getBirthTime() {\r
160 return fBirthTime;\r
161 }\r
162\r
27f3a03d
AM
163 /**\r
164 * Add an event to this process's timeline\r
165 *\r
166 * @param event\r
167 * The time event\r
168 */\r
49ffadb7
PT
169 public void addEvent(ITimeEvent event) {\r
170 long start = event.getTime();\r
171 long end = start + event.getDuration();\r
172 synchronized (fEventList) {\r
173 fEventList.add(event);\r
174 if (fStartTime == -1 || start < fStartTime) {\r
175 fStartTime = start;\r
176 }\r
177 if (fEndTime == -1 || end > fEndTime) {\r
178 fEndTime = end;\r
179 }\r
180 }\r
181 }\r
182\r
27f3a03d
AM
183 /**\r
184 * Set the general event list of this entry\r
185 *\r
186 * @param eventList\r
187 * The list of time events\r
188 */\r
49ffadb7
PT
189 public void setEventList(List<ITimeEvent> eventList) {\r
190 fEventList = eventList;\r
191 }\r
192\r
27f3a03d
AM
193 /**\r
194 * Set the zoomed event list of this entry\r
195 *\r
196 * @param eventList\r
197 * The list of time events\r
198 */\r
49ffadb7
PT
199 public void setZoomedEventList(List<ITimeEvent> eventList) {\r
200 fZoomedEventList = eventList;\r
201 }\r
202\r
27f3a03d
AM
203 /**\r
204 * Add a child entry to this one (to show relationships between processes as\r
205 * a tree)\r
206 *\r
207 * @param child\r
208 * The child entry\r
209 */\r
49ffadb7
PT
210 public void addChild(ControlFlowEntry child) {\r
211 child.fParent = this;\r
212 fChildren.add(child);\r
213 }\r
04835162 214}\r
This page took 0.03882 seconds and 5 git commands to generate.