Commit | Line | Data |
---|---|---|
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 | |
13 | package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;\r | |
14 | \r | |
49ffadb7 | 15 | import java.util.ArrayList;\r |
04835162 | 16 | import java.util.Iterator;\r |
04835162 PT |
17 | import java.util.List;\r |
18 | \r | |
49ffadb7 | 19 | import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common.EventIterator;\r |
04835162 PT |
20 | import org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace;\r |
21 | import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r | |
22 | import 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 | 27 | public 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 |