/*******************************************************************************
- * Copyright (c) 2012 Ericsson
+ * 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
*
* 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 java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common.EventIterator;
-import org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace;
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
+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 implements ITimeGraphEntry {
- private final int fThreadQuark;
- private final CtfKernelTrace fTrace;
- private ControlFlowEntry fParent = null;
- private final ArrayList<ControlFlowEntry> fChildren = new ArrayList<ControlFlowEntry>();
- private final String fName;
+public class ControlFlowEntry extends TimeGraphEntry {
+
+ private final ITmfTrace fTrace;
private final int fThreadId;
private final int fParentThreadId;
- private long fBirthTime = -1;
- private long fStartTime = -1;
- private long fEndTime = -1;
- private List<ITimeEvent> fEventList = new ArrayList<ITimeEvent>();
- private List<ITimeEvent> fZoomedEventList = null;
+ private final int fThreadQuark;
/**
* Constructor
*
- * @param threadQuark
+ * @param quark
* The attribute quark matching the thread
* @param trace
* The trace on which we are working
* The TID of the thread
* @param parentThreadId
* the Parent_TID of this thread
- * @param birthTime
- * The birth time of this entry (this allows separating different
- * process that could have the same TID)
* @param startTime
* The start time of this process's lifetime
* @param endTime
* The end time of this process
*/
- public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {
- fThreadQuark = threadQuark;
+ public ControlFlowEntry(int quark, ITmfTrace trace, String execName, int threadId, int parentThreadId, long startTime, long endTime) {
+ super(execName, startTime, endTime);
fTrace = trace;
- fName = execName;
fThreadId = threadId;
fParentThreadId = parentThreadId;
- fBirthTime = birthTime;
- fStartTime = startTime;
- fEndTime = endTime;
- }
-
- @Override
- public ITimeGraphEntry getParent() {
- return fParent;
- }
-
- @Override
- public boolean hasChildren() {
- return fChildren != null && fChildren.size() > 0;
- }
-
- @Override
- public List<ControlFlowEntry> getChildren() {
- return fChildren;
- }
-
- @Override
- public String getName() {
- return fName;
- }
-
- @Override
- public long getStartTime() {
- return fStartTime;
- }
-
- @Override
- public long getEndTime() {
- return fEndTime;
- }
-
- @Override
- public boolean hasTimeEvents() {
- return true;
- }
-
- @Override
- public Iterator<ITimeEvent> getTimeEventsIterator() {
- return new EventIterator(fEventList, fZoomedEventList);
- }
-
- @Override
- public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {
- return new EventIterator(fEventList, fZoomedEventList, startTime, stopTime);
+ fThreadQuark = quark;
}
/**
- * Get the quark of the attribute matching this thread's TID
+ * Get this entry's thread ID
*
- * @return The quark
+ * @return The TID
*/
- public int getThreadQuark() {
- return fThreadQuark;
+ public int getThreadId() {
+ return fThreadId;
}
/**
- * Get the CTF trace object
+ * Get the entry's trace
*
- * @return The trace
+ * @return the entry's trace
*/
- public CtfKernelTrace getTrace() {
+ public ITmfTrace getTrace() {
return fTrace;
}
- /**
- * Get this entry's thread ID
- *
- * @return The TID
- */
- public int getThreadId() {
- return fThreadId;
- }
-
/**
* Get this thread's parent TID
*
}
/**
- * Get the birth time of this entry/process
- *
- * @return The birth time
- */
- public long getBirthTime() {
- return fBirthTime;
- }
-
- /**
- * Add an event to this process's timeline
- *
- * @param event
- * The time event
- */
- public void addEvent(ITimeEvent event) {
- long start = event.getTime();
- long end = start + event.getDuration();
- synchronized (fEventList) {
- fEventList.add(event);
- if (fStartTime == -1 || start < fStartTime) {
- fStartTime = start;
- }
- if (fEndTime == -1 || end > fEndTime) {
- fEndTime = end;
- }
- }
- }
-
- /**
- * Set the general event list of this entry
- *
- * @param eventList
- * The list of time events
- */
- public void setEventList(List<ITimeEvent> eventList) {
- fEventList = eventList;
- }
-
- /**
- * Set the zoomed event list of this entry
+ * Get the quark of the attribute matching this thread's TID
*
- * @param eventList
- * The list of time events
+ * @return The quark
*/
- public void setZoomedEventList(List<ITimeEvent> eventList) {
- fZoomedEventList = eventList;
+ public int getThreadQuark() {
+ return fThreadQuark;
}
- /**
- * Add a child entry to this one (to show relationships between processes as
- * a tree)
- *
- * @param child
- * The child entry
- */
- public void addChild(ControlFlowEntry child) {
- child.fParent = this;
- fChildren.add(child);
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + '(' + getName() + '[' + fThreadId + "])"; //$NON-NLS-1$
}
}