Fix for bug 381096 (fix for ClassCastException)
[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 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>();
29 private String fName;
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;
37
38 public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {
39 fThreadQuark = threadQuark;
40 fTrace = trace;
41 fName = execName;
42 fThreadId = threadId;
43 fParentThreadId = parentThreadId;
44 fBirthTime = birthTime;
45 fStartTime = startTime;
46 fEndTime = endTime;
47 }
48
49 @Override
50 public ITimeGraphEntry getParent() {
51 return fParent;
52 }
53
54 @Override
55 public boolean hasChildren() {
56 return fChildren != null && fChildren.size() > 0;
57 }
58
59 @Override
60 public ControlFlowEntry[] getChildren() {
61 return fChildren.toArray(new ControlFlowEntry[0]);
62 }
63
64 @Override
65 public String getName() {
66 return fName;
67 }
68
69 @Override
70 public long getStartTime() {
71 return fStartTime;
72 }
73
74 @Override
75 public long getEndTime() {
76 return fEndTime;
77 }
78
79 @Override
80 public boolean hasTimeEvents() {
81 return true;
82 }
83
84 @Override
85 public Iterator<ITimeEvent> getTimeEventsIterator() {
86 return new EventIterator(fEventList, fZoomedEventList);
87 }
88
89 @Override
90 public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {
91 return new EventIterator(fEventList, fZoomedEventList, startTime, stopTime);
92 }
93
94 public int getThreadQuark() {
95 return fThreadQuark;
96 }
97
98 public CtfKernelTrace getTrace() {
99 return fTrace;
100 }
101
102 public int getThreadId() {
103 return fThreadId;
104 }
105
106 public int getParentThreadId() {
107 return fParentThreadId;
108 }
109
110 public long getBirthTime() {
111 return fBirthTime;
112 }
113
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) {
120 fStartTime = start;
121 }
122 if (fEndTime == -1 || end > fEndTime) {
123 fEndTime = end;
124 }
125 }
126 }
127
128 public void setEventList(List<ITimeEvent> eventList) {
129 fEventList = eventList;
130 }
131
132 public void setZoomedEventList(List<ITimeEvent> eventList) {
133 fZoomedEventList = eventList;
134 }
135
136 public void addChild(ControlFlowEntry child) {
137 child.fParent = this;
138 fChildren.add(child);
139 }
140 }
This page took 0.035987 seconds and 6 git commands to generate.