1
/*******************************************************************************
2
* Copyright (c) 2012 Ericsson
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
10
* Patrick Tasse - Initial API and implementation
11
*******************************************************************************/
13
package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;
15
import java.util.ArrayList;
16
import java.util.Iterator;
17
import java.util.List;
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;
24
public class ControlFlowEntry implements ITimeGraphEntry {
25
private int fThreadQuark;
26
private CtfKernelTrace fTrace;
27
private ControlFlowEntry fParent = null;
28
private ArrayList<ControlFlowEntry> fChildren = new ArrayList<ControlFlowEntry>();
30
private int fThreadId;
31
private int fParentThreadId;
32
private long fBirthTime = -1;
33
private long fStartTime = -1;
34
private long fEndTime = -1;
35
private List<ITimeEvent> fEventList = new ArrayList<ITimeEvent>();
36
private List<ITimeEvent> fZoomedEventList = null;
38
public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {
39
fThreadQuark = threadQuark;
43
fParentThreadId = parentThreadId;
44
fBirthTime = birthTime;
45
fStartTime = startTime;
50
public ITimeGraphEntry getParent() {
55
public boolean hasChildren() {
56
return fChildren != null && fChildren.size() > 0;
60
public ControlFlowEntry[] getChildren() {
61
return fChildren.toArray(new ControlFlowEntry[0]);
65
public String getName() {
70
public long getStartTime() {
75
public long getEndTime() {
80
public boolean hasTimeEvents() {
85
public Iterator<ITimeEvent> getTimeEventsIterator() {
86
return new EventIterator(fEventList, fZoomedEventList);
90
public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {
91
return new EventIterator(fEventList, fZoomedEventList, startTime, stopTime);
94
public int getThreadQuark() {
98
public CtfKernelTrace getTrace() {
102
public int getThreadId() {
106
public int getParentThreadId() {
107
return fParentThreadId;
110
public long getBirthTime() {
114
public void addEvent(ITimeEvent event) {
115
long start = event.getTime();
116
long end = start + event.getDuration();
117
synchronized (fEventList) {
118
fEventList.add(event);
119
if (fStartTime == -1 || start < fStartTime) {
122
if (fEndTime == -1 || end > fEndTime) {
128
public void setEventList(List<ITimeEvent> eventList) {
129
fEventList = eventList;
132
public void setZoomedEventList(List<ITimeEvent> eventList) {
133
fZoomedEventList = eventList;
136
public void addChild(ControlFlowEntry child) {
137
child.fParent = this;
138
fChildren.add(child);
1
/*******************************************************************************
2
* Copyright (c) 2012 Ericsson
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
10
* Patrick Tasse - Initial API and implementation
11
*******************************************************************************/
13
package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;
15
import java.util.ArrayList;
16
import java.util.Iterator;
17
import java.util.List;
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;
25
* An entry in the Control Flow view
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;
45
* The attribute quark matching the thread
47
* The trace on which we are working
49
* The exec_name of this entry
51
* The TID of the thread
52
* @param parentThreadId
53
* the Parent_TID of this thread
55
* The birth time of this entry (this allows separating different
56
* process that could have the same TID)
58
* The start time of this process's lifetime
60
* The end time of this process
62
public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {
63
fThreadQuark = threadQuark;
67
fParentThreadId = parentThreadId;
68
fBirthTime = birthTime;
69
fStartTime = startTime;
74
public ITimeGraphEntry getParent() {
79
public boolean hasChildren() {
80
return fChildren != null && fChildren.size() > 0;
84
public ControlFlowEntry[] getChildren() {
85
return fChildren.toArray(new ControlFlowEntry[0]);
89
public String getName() {
94
public long getStartTime() {
99
public long getEndTime() {
104
public boolean hasTimeEvents() {
109
public Iterator<ITimeEvent> getTimeEventsIterator() {
110
return new EventIterator(fEventList, fZoomedEventList);
114
public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {
115
return new EventIterator(fEventList, fZoomedEventList, startTime, stopTime);
119
* Get the quark of the attribute matching this thread's TID
123
public int getThreadQuark() {
128
* Get the CTF trace object
132
public CtfKernelTrace getTrace() {
137
* Get this entry's thread ID
141
public int getThreadId() {
146
* Get this thread's parent TID
150
public int getParentThreadId() {
151
return fParentThreadId;
155
* Get the birth time of this entry/process
157
* @return The birth time
159
public long getBirthTime() {
164
* Add an event to this process's timeline
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) {
177
if (fEndTime == -1 || end > fEndTime) {
184
* Set the general event list of this entry
187
* The list of time events
189
public void setEventList(List<ITimeEvent> eventList) {
190
fEventList = eventList;
194
* Set the zoomed event list of this entry
197
* The list of time events
199
public void setZoomedEventList(List<ITimeEvent> eventList) {
200
fZoomedEventList = eventList;
204
* Add a child entry to this one (to show relationships between processes as
210
public void addChild(ControlFlowEntry child) {
211
child.fParent = this;
212
fChildren.add(child);