2cd832138d034e3ecdc22c068616713c85bf4685
[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, 2013 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.lttng2.kernel.core.trace.LttngKernelTrace;
20 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.EventIterator;
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 LttngKernelTrace fTrace;
30 private ControlFlowEntry fParent = null;
31 private final ArrayList<ControlFlowEntry> fChildren = new ArrayList<ControlFlowEntry>();
32 private String fName;
33 private final int fThreadId;
34 private final int fParentThreadId;
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
53 * @param startTime
54 * The start time of this process's lifetime
55 * @param endTime
56 * The end time of this process
57 */
58 public ControlFlowEntry(int threadQuark, LttngKernelTrace trace, String execName, int threadId, int parentThreadId, long startTime, long endTime) {
59 fThreadQuark = threadQuark;
60 fTrace = trace;
61 fName = execName;
62 fThreadId = threadId;
63 fParentThreadId = parentThreadId;
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() {
75 return fChildren.size() > 0;
76 }
77
78 @Override
79 public List<ControlFlowEntry> getChildren() {
80 return fChildren;
81 }
82
83 @Override
84 public String getName() {
85 return fName;
86 }
87
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
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 */
135 public LttngKernelTrace getTrace() {
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
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 }
This page took 0.035109 seconds and 4 git commands to generate.