-/*******************************************************************************\r
- * Copyright (c) 2012 Ericsson\r
- * \r
- * All rights reserved. This program and the accompanying materials are\r
- * made available under the terms of the Eclipse Public License v1.0 which\r
- * accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- * \r
- * Contributors:\r
- * Patrick Tasse - Initial API and implementation\r
- *******************************************************************************/\r
-\r
-package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common.EventIterator;\r
-import org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;\r
-\r
-public class ControlFlowEntry implements ITimeGraphEntry, Comparable<ControlFlowEntry> {\r
- private int fThreadQuark;\r
- private CtfKernelTrace fTrace;\r
- private ControlFlowEntry fParent = null;\r
- private ArrayList<ControlFlowEntry> fChildren = new ArrayList<ControlFlowEntry>();\r
- private String fName;\r
- private int fThreadId;\r
- private int fParentThreadId;\r
- private long fBirthTime = -1;\r
- private long fStartTime = -1;\r
- private long fEndTime = -1;\r
- private List<ITimeEvent> fEventList = new ArrayList<ITimeEvent>();\r
- private List<ITimeEvent> fZoomedEventList = null;\r
-\r
- public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {\r
- fThreadQuark = threadQuark;\r
- fTrace = trace;\r
- fName = execName;\r
- fThreadId = threadId;\r
- fParentThreadId = parentThreadId;\r
- fBirthTime = birthTime;\r
- fStartTime = startTime;\r
- fEndTime = endTime;\r
- }\r
-\r
- @Override\r
- public ITimeGraphEntry getParent() {\r
- return fParent;\r
- }\r
-\r
- @Override\r
- public boolean hasChildren() {\r
- return fChildren != null && fChildren.size() > 0;\r
- }\r
-\r
- @Override\r
- public ControlFlowEntry[] getChildren() {\r
- return fChildren.toArray(new ControlFlowEntry[0]);\r
- }\r
-\r
- @Override\r
- public String getName() {\r
- return fName;\r
- }\r
-\r
- @Override\r
- public long getStartTime() {\r
- return fStartTime;\r
- }\r
-\r
- @Override\r
- public long getEndTime() {\r
- return fEndTime;\r
- }\r
-\r
- @Override\r
- public boolean hasTimeEvents() {\r
- return true;\r
- }\r
-\r
- @Override\r
- public Iterator<ITimeEvent> getTimeEventsIterator() {\r
- return new EventIterator(fEventList, fZoomedEventList);\r
- }\r
-\r
- @Override\r
- public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {\r
- return new EventIterator(fEventList, fZoomedEventList, startTime, stopTime);\r
- }\r
-\r
- @Override\r
- public int compareTo(ControlFlowEntry other) {\r
- int result = this.fThreadId < other.fThreadId ? -1 : this.fThreadId > other.fThreadId ? 1 : 0;\r
- if (result == 0) {\r
- result = this.fStartTime < other.fStartTime ? -1 : this.fStartTime > other.fStartTime ? 1 : 0;\r
- }\r
- return result;\r
- }\r
-\r
- public int getThreadQuark() {\r
- return fThreadQuark;\r
- }\r
-\r
- public CtfKernelTrace getTrace() {\r
- return fTrace;\r
- }\r
-\r
- public int getThreadId() {\r
- return fThreadId;\r
- }\r
-\r
- public int getParentThreadId() {\r
- return fParentThreadId;\r
- }\r
-\r
- public long getBirthTime() {\r
- return fBirthTime;\r
- }\r
-\r
- public void addEvent(ITimeEvent event) {\r
- long start = event.getTime();\r
- long end = start + event.getDuration();\r
- synchronized (fEventList) {\r
- fEventList.add(event);\r
- if (fStartTime == -1 || start < fStartTime) {\r
- fStartTime = start;\r
- }\r
- if (fEndTime == -1 || end > fEndTime) {\r
- fEndTime = end;\r
- }\r
- }\r
- }\r
-\r
- public void setEventList(List<ITimeEvent> eventList) {\r
- fEventList = eventList;\r
- }\r
-\r
- public void setZoomedEventList(List<ITimeEvent> eventList) {\r
- fZoomedEventList = eventList;\r
- }\r
-\r
- public void addChild(ControlFlowEntry child) {\r
- child.fParent = this;\r
- fChildren.add(child);\r
- }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012, 2014 Ericsson, École Polytechnique de Montréal
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tasse - Initial API and implementation
+ * Geneviève Bastien - Move code to provide base classes for time graph view
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;
+
+import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.TimeGraphEntry;
+
+/**
+ * An entry in the Control Flow view
+ */
+public class ControlFlowEntry extends TimeGraphEntry {
+
+ private final ITmfTrace fTrace;
+ private final int fThreadId;
+ private final int fParentThreadId;
+ private final int fThreadQuark;
+
+ /**
+ * Constructor
+ *
+ * @param quark
+ * The attribute quark matching the thread
+ * @param trace
+ * The trace on which we are working
+ * @param execName
+ * The exec_name of this entry
+ * @param threadId
+ * The TID of the thread
+ * @param parentThreadId
+ * the Parent_TID of this thread
+ * @param startTime
+ * The start time of this process's lifetime
+ * @param endTime
+ * The end time of this process
+ */
+ public ControlFlowEntry(int quark, ITmfTrace trace, String execName, int threadId, int parentThreadId, long startTime, long endTime) {
+ super(execName, startTime, endTime);
+ fTrace = trace;
+ fThreadId = threadId;
+ fParentThreadId = parentThreadId;
+ fThreadQuark = quark;
+ }
+
+ /**
+ * Get this entry's thread ID
+ *
+ * @return The TID
+ */
+ public int getThreadId() {
+ return fThreadId;
+ }
+
+ /**
+ * Get the entry's trace
+ *
+ * @return the entry's trace
+ */
+ public ITmfTrace getTrace() {
+ return fTrace;
+ }
+
+ /**
+ * Get this thread's parent TID
+ *
+ * @return The "PTID"
+ */
+ public int getParentThreadId() {
+ return fParentThreadId;
+ }
+
+ /**
+ * Get the quark of the attribute matching this thread's TID
+ *
+ * @return The quark
+ */
+ public int getThreadQuark() {
+ return fThreadQuark;
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + '(' + getName() + '[' + fThreadId + "])"; //$NON-NLS-1$
+ }
+}