/******************************************************************************* * Copyright (c) 2013 Ericsson * * 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 *******************************************************************************/ package fr.inria.linuxtools.tmf.ui.views.callstack; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import fr.inria.linuxtools.tmf.core.trace.ITmfTrace; import fr.inria.linuxtools.tmf.ui.widgets.timegraph.model.EventIterator; import fr.inria.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent; import fr.inria.linuxtools.tmf.ui.widgets.timegraph.model.ITimeGraphEntry; /** * An entry, or row, in the Call Stack view * * @author Patrick Tasse * @since 2.0 */ public class CallStackEntry implements ITimeGraphEntry { private final int fQuark; private final int fStackLevel; private final ITmfTrace fTrace; private ITimeGraphEntry fParent = null; private String fName; private String fFunctionName; private long fStartTime; private long fEndTime; private List<ITimeEvent> fEventList = new ArrayList<>(1); private List<ITimeEvent> fZoomedEventList = null; /** * Standard constructor * * @param quark * The event stack quark * @param stackLevel * The stack level * @param trace * The trace that this view is talking about */ public CallStackEntry(int quark, int stackLevel, ITmfTrace trace) { fQuark = quark; fStackLevel = stackLevel; fTrace = trace; fFunctionName = ""; //$NON-NLS-1$ } @Override public ITimeGraphEntry getParent() { return fParent; } @Override public boolean hasChildren() { return false; } @Override public List<CallStackEntry> getChildren() { return null; } @Override public String getName() { return ""; //$NON-NLS-1$ } /** * Get the function name of the call stack entry * @return the function name */ public String getFunctionName() { return fFunctionName; } /** * Set the function name of the call stack entry * @param functionName the function name */ public void setFunctionName(String functionName) { fFunctionName = functionName; } @Override public long getStartTime() { return fStartTime; } /** * Set the start time of the call stack entry * @param startTime the start time */ public void setStartTime(long startTime) { fStartTime = startTime; } @Override public long getEndTime() { return fEndTime; } /** * Set the end time of the call stack entry * @param endTime the end time */ public void setEndTime(long endTime) { fEndTime = endTime; } @Override public boolean hasTimeEvents() { return fEventList != null; } @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); } /** * Assign a parent entry to this one, to organize them in a tree in the * view. * * @param parent * The parent entry */ public void setParent(ITimeGraphEntry parent) { fParent = parent; } /** * Retrieve the attribute quark that's represented by this entry. * * @return The integer quark */ public int getQuark() { return fQuark; } /** * Retrieve the stack level associated with this entry. * * @return The stack level or 0 */ public int getStackLevel() { return fStackLevel; } /** * Retrieve the trace that is associated to this view. * * @return The trace */ public ITmfTrace getTrace() { return fTrace; } /** * Assign the target event list to this view. * * @param eventList * The list of time events */ public void setEventList(List<ITimeEvent> eventList) { fEventList = eventList; if (eventList != null && eventList.size() > 0) { fStartTime = eventList.get(0).getTime(); ITimeEvent lastEvent = eventList.get(eventList.size() - 1); fEndTime = lastEvent.getTime() + lastEvent.getDuration(); } } /** * Assign the zoomed event list to this view. * * @param eventList * The list of "zoomed" time events */ public void setZoomedEventList(List<ITimeEvent> eventList) { fZoomedEventList = eventList; } /** * Add an event to the event list * * @param timeEvent * The event */ public void addEvent(ITimeEvent timeEvent) { fEventList.add(timeEvent); } @Override public String toString() { return getClass().getSimpleName() + " name=" + fName; //$NON-NLS-1$ } }