Convert Windows line delimiters to Unix.
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.kernel.ui / src / org / eclipse / linuxtools / internal / lttng2 / kernel / ui / views / controlflow / ControlFlowEntry.java
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 }
This page took 0.036748 seconds and 6 git commands to generate.