LTTng 2.0.
--- /dev/null
+/*******************************************************************************\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.HashMap;\r
+import java.util.Map;\r
+\r
+import org.eclipse.linuxtools.internal.lttng2.kernel.ui.Messages;\r
+import org.eclipse.linuxtools.lttng2.kernel.core.trace.Attributes;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.AttributeNotFoundException;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.TimeRangeException;\r
+import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;\r
+import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier;\r
+import org.eclipse.linuxtools.tmf.core.statevalue.ITmfStateValue;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.StateItem;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r
+import org.eclipse.swt.graphics.RGB;\r
+\r
+public class ControlFlowPresentationProvider extends TimeGraphPresentationProvider {\r
+\r
+ private enum State {\r
+ UNKNOWN (new RGB(100, 100, 100)),\r
+ WAIT (new RGB(200, 200, 0)),\r
+ USERMODE (new RGB(0, 200, 0)),\r
+ SYSCALL (new RGB(0, 0, 200)),\r
+ INTERRUPTED (new RGB(200, 100, 100));\r
+\r
+ public final RGB rgb;\r
+\r
+ private State (RGB rgb) {\r
+ this.rgb = rgb;\r
+ }\r
+ }\r
+\r
+ @Override \r
+ public String getStateTypeName() {\r
+ return Messages.ControlFlowView_stateTypeName;\r
+ }\r
+\r
+ @Override\r
+ public StateItem[] getStateTable() {\r
+ StateItem[] stateTable = new StateItem[State.values().length];\r
+ for (int i = 0; i < stateTable.length; i++) {\r
+ State state = State.values()[i];\r
+ stateTable[i] = new StateItem(state.rgb, state.toString());\r
+ }\r
+ return stateTable;\r
+ }\r
+\r
+ @Override\r
+ public int getStateTableIndex(ITimeEvent event) {\r
+ if (event instanceof ControlFlowEvent) {\r
+ int status = ((ControlFlowEvent) event).getStatus();\r
+ if (status == Attributes.STATUS_WAIT) {\r
+ return State.WAIT.ordinal();\r
+ } else if (status == Attributes.STATUS_RUN_USERMODE) {\r
+ return State.USERMODE.ordinal();\r
+ } else if (status == Attributes.STATUS_RUN_SYSCALL) {\r
+ return State.SYSCALL.ordinal();\r
+ } else if (status == Attributes.STATUS_INTERRUPTED) {\r
+ return State.INTERRUPTED.ordinal();\r
+ }\r
+ }\r
+ return State.UNKNOWN.ordinal();\r
+ }\r
+\r
+ @Override\r
+ public String getEventName(ITimeEvent event) {\r
+ if (event instanceof ControlFlowEvent) {\r
+ int status = ((ControlFlowEvent) event).getStatus();\r
+ if (status == Attributes.STATUS_WAIT) {\r
+ return State.WAIT.toString();\r
+ } else if (status == Attributes.STATUS_RUN_USERMODE) {\r
+ return State.USERMODE.toString();\r
+ } else if (status == Attributes.STATUS_RUN_SYSCALL) {\r
+ return State.SYSCALL.toString();\r
+ } else if (status == Attributes.STATUS_INTERRUPTED) {\r
+ return State.INTERRUPTED.toString();\r
+ }\r
+ }\r
+ return State.UNKNOWN.toString();\r
+ }\r
+\r
+ @Override\r
+ public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
+ Map<String, String> retMap = new HashMap<String, String>();\r
+ if (event instanceof ControlFlowEvent) {\r
+ int status = ((ControlFlowEvent) event).getStatus();\r
+ if (status == Attributes.STATUS_RUN_SYSCALL) {\r
+ ControlFlowEntry entry = (ControlFlowEntry) event.getEntry();\r
+ IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
+ try {\r
+ int syscallQuark = ssq.getQuarkRelative(entry.getThreadQuark(), Attributes.SYSTEM_CALL);\r
+ ITmfStateInterval value = ssq.querySingleState(event.getTime(), syscallQuark);\r
+ if (!value.getStateValue().isNull()) {\r
+ ITmfStateValue state = value.getStateValue();\r
+ retMap.put(Messages.ControlFlowView_attributeSyscallName, state.toString());\r
+ }\r
+\r
+ } catch (AttributeNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (TimeRangeException e) {\r
+ e.printStackTrace();\r
+ }\r
+ } \r
+ }\r
+\r
+ return retMap;\r
+ }\r
+\r
+}\r
\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
-import java.util.HashMap;\r
import java.util.List;\r
-import java.util.Map;\r
\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.core.runtime.NullProgressMonitor;\r
import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;\r
import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;\r
import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier;\r
-import org.eclipse.linuxtools.tmf.core.statevalue.ITmfStateValue;\r
import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\r
import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;\r
import org.eclipse.linuxtools.tmf.ui.views.TmfView;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphRangeListener;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphSelectionListener;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphTimeListener;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.StateItem;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphCombo;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphRangeUpdateEvent;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphSelectionEvent;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphTimeEvent;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.widgets.Utils.TimeFormat;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.graphics.RGB;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Display;\r
import org.eclipse.swt.widgets.TreeColumn;\r
\r
fTimeGraphCombo.setTreeLabelProvider(new TreeLabelProvider());\r
\r
- fTimeGraphCombo.setTimeGraphProvider(new TimeGraphPresentationProvider() {\r
- private static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$\r
- private static final String WAIT = "WAIT"; //$NON-NLS-1$\r
- private static final String USERMODE = "USERMODE"; //$NON-NLS-1$\r
- private static final String SYSCALL = "SYSCALL"; //$NON-NLS-1$\r
- private static final String INTERRUPTED = "INTERRUPTED"; //$NON-NLS-1$\r
-\r
- @Override \r
- public String getStateTypeName() {\r
- return Messages.ControlFlowView_stateTypeName;\r
- }\r
-\r
- @Override\r
- public StateItem[] getStateTable() {\r
- return new StateItem[] {\r
- new StateItem(new RGB(100, 100, 100), UNKNOWN),\r
- new StateItem(new RGB(200, 200, 0), WAIT),\r
- new StateItem(new RGB(0, 200, 0), USERMODE),\r
- new StateItem(new RGB(0, 0, 200), SYSCALL),\r
- new StateItem(new RGB(200, 100, 100), INTERRUPTED)\r
- };\r
- }\r
-\r
- @Override\r
- public int getStateTableIndex(ITimeEvent event) {\r
- if (event instanceof ControlFlowEvent) {\r
- int status = ((ControlFlowEvent) event).getStatus();\r
- if (status == Attributes.STATUS_WAIT) {\r
- return 1;\r
- } else if (status == Attributes.STATUS_RUN_USERMODE) {\r
- return 2;\r
- } else if (status == Attributes.STATUS_RUN_SYSCALL) {\r
- return 3;\r
- } else if (status == Attributes.STATUS_INTERRUPTED) {\r
- return 4;\r
- }\r
- }\r
- return 0;\r
- }\r
-\r
- @Override\r
- public String getEventName(ITimeEvent event) {\r
- if (event instanceof ControlFlowEvent) {\r
- int status = ((ControlFlowEvent) event).getStatus();\r
- if (status == Attributes.STATUS_WAIT) {\r
- return WAIT;\r
- } else if (status == Attributes.STATUS_RUN_USERMODE) {\r
- return USERMODE;\r
- } else if (status == Attributes.STATUS_RUN_SYSCALL) {\r
- return SYSCALL;\r
- } else if (status == Attributes.STATUS_INTERRUPTED) {\r
- return INTERRUPTED;\r
- }\r
- }\r
- return UNKNOWN;\r
- }\r
-\r
- @Override\r
- public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
- Map<String, String> retMap = new HashMap<String, String>();\r
- if (event instanceof ControlFlowEvent) {\r
- int status = ((ControlFlowEvent) event).getStatus();\r
- if (status == Attributes.STATUS_RUN_SYSCALL) {\r
- ControlFlowEntry entry = (ControlFlowEntry) event.getEntry();\r
- IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
- try {\r
- int syscallQuark = ssq.getQuarkRelative(entry.getThreadQuark(), Attributes.SYSTEM_CALL);\r
- ITmfStateInterval value = ssq.querySingleState(event.getTime(), syscallQuark);\r
- if (!value.getStateValue().isNull()) {\r
- ITmfStateValue state = value.getStateValue();\r
- retMap.put(Messages.ControlFlowView_attributeSyscallName, state.toString());\r
- }\r
-\r
- } catch (AttributeNotFoundException e) {\r
- e.printStackTrace();\r
- } catch (TimeRangeException e) {\r
- e.printStackTrace();\r
- }\r
- } \r
- }\r
-\r
- return retMap;\r
- }\r
- });\r
+ fTimeGraphCombo.setTimeGraphProvider(new ControlFlowPresentationProvider());\r
\r
fTimeGraphCombo.setTreeColumns(COLUMN_NAMES);\r
\r
--- /dev/null
+package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.resources;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.eclipse.linuxtools.internal.lttng2.kernel.ui.Messages;\r
+import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.resources.ResourcesEntry.Type;\r
+import org.eclipse.linuxtools.lttng2.kernel.core.trace.Attributes;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.StateItem;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r
+import org.eclipse.swt.graphics.RGB;\r
+\r
+public class ResourcesPresentationProvider extends TimeGraphPresentationProvider {\r
+\r
+ private enum State {\r
+ UNKNOWN (new RGB(100, 100, 100)),\r
+ IDLE (new RGB(200, 200, 200)),\r
+ BUSY (new RGB(0, 200, 0)),\r
+ INTERRUPTED (new RGB(200, 100, 100)),\r
+ RAISED (new RGB(200, 200, 0)),\r
+ ACTIVE (new RGB(200, 150, 100));\r
+\r
+ public final RGB rgb;\r
+\r
+ private State (RGB rgb) {\r
+ this.rgb = rgb;\r
+ }\r
+ }\r
+\r
+ @Override \r
+ public String getStateTypeName() {\r
+ return Messages.ResourcesView_stateTypeName;\r
+ }\r
+\r
+ @Override\r
+ public StateItem[] getStateTable() {\r
+ StateItem[] stateTable = new StateItem[State.values().length];\r
+ for (int i = 0; i < stateTable.length; i++) {\r
+ State state = State.values()[i];\r
+ stateTable[i] = new StateItem(state.rgb, state.toString());\r
+ }\r
+ return stateTable;\r
+ }\r
+\r
+ @Override\r
+ public int getStateTableIndex(ITimeEvent event) {\r
+ if (event instanceof ResourcesEvent) {\r
+ ResourcesEvent resourcesEvent = (ResourcesEvent) event;\r
+ if (resourcesEvent.getType() == Type.CPU) {\r
+ int status = resourcesEvent.getValue();\r
+ if (status == Attributes.CPU_STATUS_IDLE) {\r
+ return State.IDLE.ordinal();\r
+ } else if (status == Attributes.CPU_STATUS_BUSY) {\r
+ return State.BUSY.ordinal();\r
+ } else if (status == Attributes.CPU_STATUS_INTERRUPTED) {\r
+ return State.INTERRUPTED.ordinal();\r
+ }\r
+ } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
+ int cpu = resourcesEvent.getValue();\r
+ if (cpu == Attributes.SOFT_IRQ_RAISED) {\r
+ return State.RAISED.ordinal();\r
+ }\r
+ return State.ACTIVE.ordinal();\r
+ } else {\r
+ return -1; // NULL\r
+ }\r
+ }\r
+ return State.UNKNOWN.ordinal();\r
+ }\r
+\r
+ @Override\r
+ public String getEventName(ITimeEvent event) {\r
+ if (event instanceof ResourcesEvent) {\r
+ ResourcesEvent resourcesEvent = (ResourcesEvent) event;\r
+ if (resourcesEvent.getType() == Type.CPU) {\r
+ int status = resourcesEvent.getValue();\r
+ if (status == Attributes.CPU_STATUS_IDLE) {\r
+ return State.IDLE.toString();\r
+ } else if (status == Attributes.CPU_STATUS_BUSY) {\r
+ return State.BUSY.toString();\r
+ } else if (status == Attributes.CPU_STATUS_INTERRUPTED) {\r
+ return State.INTERRUPTED.toString();\r
+ }\r
+ } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
+ int cpu = resourcesEvent.getValue();\r
+ if (cpu == Attributes.SOFT_IRQ_RAISED) {\r
+ return State.RAISED.toString();\r
+ }\r
+ return State.ACTIVE.toString();\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+ return State.UNKNOWN.toString();\r
+ }\r
+\r
+ @Override\r
+ public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
+ \r
+ Map<String, String> retMap = new HashMap<String, String>();\r
+ if (event instanceof ResourcesEvent) {\r
+\r
+ ResourcesEvent resourcesEvent = (ResourcesEvent) event;\r
+\r
+ if (resourcesEvent.getType().equals(Type.IRQ) || resourcesEvent.getType().equals(Type.SOFT_IRQ)) {\r
+ int cpu = resourcesEvent.getValue();\r
+ if (cpu >= 0) {\r
+ retMap.put(Messages.ResourcesView_attributeCpuName, String.valueOf(cpu));\r
+ }\r
+ }\r
+ }\r
+\r
+ return retMap;\r
+ }\r
+\r
+}\r
\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
-import java.util.HashMap;\r
import java.util.Iterator;\r
import java.util.List;\r
-import java.util.Map;\r
\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.core.runtime.NullProgressMonitor;\r
import org.eclipse.linuxtools.tmf.ui.views.TmfView;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphRangeListener;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphTimeListener;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.StateItem;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphRangeUpdateEvent;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphTimeEvent;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphViewer;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;\r
import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.TimeEvent;\r
import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.graphics.RGB;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Display;\r
import org.eclipse.ui.IActionBars;\r
public void createPartControl(Composite parent) {\r
fTimeGraphViewer = new TimeGraphViewer(parent, SWT.NONE);\r
\r
- fTimeGraphViewer.setTimeGraphProvider(new TimeGraphPresentationProvider() {\r
- private static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$\r
- private static final String IDLE = "IDLE"; //$NON-NLS-1$\r
- private static final String BUSY = "BUSY"; //$NON-NLS-1$\r
- private static final String INTERRUPTED = "INTERRUPTED"; //$NON-NLS-1$\r
- private static final String RAISED = "RAISED"; //$NON-NLS-1$\r
- private static final String ACTIVE = "ACTIVE"; //$NON-NLS-1$\r
-\r
- @Override \r
- public String getStateTypeName() {\r
- return Messages.ResourcesView_stateTypeName;\r
- }\r
-\r
- @Override\r
- public String getEventName(ITimeEvent event) {\r
- if (event instanceof ResourcesEvent) {\r
- ResourcesEvent resourcesEvent = (ResourcesEvent) event;\r
- if (resourcesEvent.getType() == Type.CPU) {\r
- int currentThread = resourcesEvent.getValue();\r
- if (currentThread == 0) {\r
- return IDLE;\r
- } else {\r
- return BUSY;\r
- }\r
- } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
- int cpu = resourcesEvent.getValue();\r
- if (cpu == Attributes.SOFT_IRQ_RAISED) {\r
- return RAISED;\r
- }\r
- return ACTIVE;\r
- } else {\r
- return null;\r
- }\r
- }\r
- return UNKNOWN;\r
- }\r
-\r
- @Override\r
- public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
- \r
- Map<String, String> retMap = new HashMap<String, String>();\r
- if (event instanceof ResourcesEvent) {\r
-\r
- ResourcesEvent resourcesEvent = (ResourcesEvent) event;\r
-\r
- if (resourcesEvent.getType().equals(Type.IRQ) || resourcesEvent.getType().equals(Type.SOFT_IRQ)) {\r
- int cpu = resourcesEvent.getValue();\r
- if (cpu >= 0) {\r
- retMap.put(Messages.ResourcesView_attributeCpuName, String.valueOf(cpu));\r
- }\r
- }\r
- }\r
-\r
- return retMap;\r
- }\r
-\r
- @Override\r
- public StateItem[] getStateTable() {\r
- return new StateItem[] {\r
- new StateItem(new RGB(100, 100, 100), UNKNOWN),\r
- new StateItem(new RGB(200, 200, 200), IDLE),\r
- new StateItem(new RGB(0, 200, 0), BUSY),\r
- new StateItem(new RGB(200, 100, 100), INTERRUPTED),\r
- new StateItem(new RGB(200, 200, 0), RAISED),\r
- new StateItem(new RGB(200, 150, 100), ACTIVE)\r
- };\r
- }\r
-\r
- @Override\r
- public int getStateTableIndex(ITimeEvent event) {\r
- if (event instanceof ResourcesEvent) {\r
- ResourcesEvent resourcesEvent = (ResourcesEvent) event;\r
- if (resourcesEvent.getType() == Type.CPU) {\r
- int currentThread = resourcesEvent.getValue();\r
- if (currentThread == 0) {\r
- return 1; // IDLE\r
- } else {\r
- return 2; // BUSY\r
- }\r
- } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
- int cpu = resourcesEvent.getValue();\r
- if (cpu == Attributes.SOFT_IRQ_RAISED) {\r
- return 4; // RAISED\r
- }\r
- return 5; // ACTIVE\r
- } else {\r
- return -1; // NULL\r
- }\r
- }\r
- return 0; // UNKNOWN\r
- }\r
- });\r
+ fTimeGraphViewer.setTimeGraphProvider(new ResourcesPresentationProvider());\r
\r
fTimeGraphViewer.setTimeCalendarFormat(true);\r
\r
int quark = entry.getQuark();\r
try {\r
if (entry.getType().equals(Type.CPU)) {\r
- int currentThreadQuark = ssq.getQuarkRelative(quark, Attributes.CURRENT_THREAD);\r
- List<ITmfStateInterval> currentThreadIntervals = ssq.queryHistoryRange(currentThreadQuark, startTime, endTime - 1, resolution);\r
- eventList = new ArrayList<ITimeEvent>(currentThreadIntervals.size());\r
+ int statusQuark = ssq.getQuarkRelative(quark, Attributes.STATUS);\r
+ List<ITmfStateInterval> statusIntervals = ssq.queryHistoryRange(statusQuark, startTime, endTime - 1, resolution);\r
+ eventList = new ArrayList<ITimeEvent>(statusIntervals.size());\r
long lastEndTime = -1;\r
- for (ITmfStateInterval currentThreadInterval : currentThreadIntervals) {\r
+ for (ITmfStateInterval statusInterval : statusIntervals) {\r
if (monitor.isCanceled()) {\r
return null;\r
}\r
- if (!currentThreadInterval.getStateValue().isNull()) {\r
- int currentThread = currentThreadInterval.getStateValue().unboxInt();\r
- long time = currentThreadInterval.getStartTime();\r
- long duration = currentThreadInterval.getEndTime() - time + 1;\r
+ int status = statusInterval.getStateValue().unboxInt();\r
+ long time = statusInterval.getStartTime();\r
+ long duration = statusInterval.getEndTime() - time + 1;\r
+ if (!statusInterval.getStateValue().isNull()) {\r
if (lastEndTime != time && lastEndTime != -1) {\r
eventList.add(new TimeEvent(entry, lastEndTime, time - lastEndTime));\r
}\r
- eventList.add(new ResourcesEvent(entry, time, duration, currentThread));\r
+ eventList.add(new ResourcesEvent(entry, time, duration, status));\r
lastEndTime = time + duration;\r
+ } else {\r
+ if (includeNull) {\r
+ eventList.add(new ResourcesEvent(entry, time, duration));\r
+ }\r
}\r
}\r
} else if (entry.getType().equals(Type.IRQ)) {\r