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