Bug 378402: Implementation of ControlFlow view and Resources view for
[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, Comparable<ControlFlowEntry> {
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 fPpid;
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 ppid, long birthTime, long startTime, long endTime) {
39 fThreadQuark = threadQuark;
40 fTrace = trace;
41 fName = execName;
42 fThreadId = threadId;
43 fPpid = ppid;
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 @Override
95 public int compareTo(ControlFlowEntry other) {
96 int result = this.fThreadId < other.fThreadId ? -1 : this.fThreadId > other.fThreadId ? 1 : 0;
97 if (result == 0) {
98 result = this.fStartTime < other.fStartTime ? -1 : this.fStartTime > other.fStartTime ? 1 : 0;
99 }
100 return result;
101 }
102
103 public int getThreadQuark() {
104 return fThreadQuark;
105 }
106
107 public CtfKernelTrace getTrace() {
108 return fTrace;
109 }
110
111 public int getThreadId() {
112 return fThreadId;
113 }
114
115 public int getPPID() {
116 return fPpid;
117 }
118
119 public long getBirthTime() {
120 return fBirthTime;
121 }
122
123 public void addEvent(ITimeEvent event) {
124 long start = event.getTime();
125 long end = start + event.getDuration();
126 synchronized (fEventList) {
127 fEventList.add(event);
128 if (fStartTime == -1 || start < fStartTime) {
129 fStartTime = start;
130 }
131 if (fEndTime == -1 || end > fEndTime) {
132 fEndTime = end;
133 }
134 }
135 }
136
137 public void setEventList(List<ITimeEvent> eventList) {
138 fEventList = eventList;
139 }
140
141 public void setZoomedEventList(List<ITimeEvent> eventList) {
142 fZoomedEventList = eventList;
143 }
144
145 public void addChild(ControlFlowEntry child) {
146 child.fParent = this;
147 fChildren.add(child);
148 }
149 }
This page took 0.052425 seconds and 6 git commands to generate.