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