LTTng 2.0.
Require-Bundle: org.eclipse.ui;bundle-version="3.7.0",
org.eclipse.ui.ide;bundle-version="3.7.0",
org.eclipse.core.runtime;bundle-version="3.7.0",
- org.eclipse.linuxtools.lttng2.core;bundle-version="0.1.0",
- org.eclipse.linuxtools.lttng2.kernel.core;bundle-version="0.1.0",
org.eclipse.linuxtools.tmf.core;bundle-version="0.5.0",
- org.eclipse.linuxtools.tmf.ui;bundle-version="0.5.0"
+ org.eclipse.linuxtools.tmf.ui;bundle-version="0.5.0",
+ org.eclipse.linuxtools.lttng2.core;bundle-version="0.1.0",
+ org.eclipse.linuxtools.lttng2.ui;bundle-version="0.1.0",
+ org.eclipse.linuxtools.lttng2.kernel.core;bundle-version="0.1.0"
# Ericsson - initial API and implementation
#********************************************************************************
-Bundle-Name = LTTng UI
+#Properties file for org.eclipse.linuxtools.lttng2.kernel.ui
+Bundle-Name = LTTng Kernel UI
Bundle-Vendor = Eclipse Linux Tools
-#Properties file for org.eclipse.linuxtools.lttng.kernel.ui (plugin.xml)
-perspective.category.name = LTTng Kernel
+#Properties file for org.eclipse.linuxtools.lttng2.kernel.ui (plugin.xml)
+kernel.perspective.name = LTTng Kernel
-views.category.name = LTTng
-control.view.name = Control
-events.view.name = Events
-timeframe.view.name = Time Frame
controlflow.view.name = Control Flow
resources.view.name = Resources
-statistics.view.name = Statistics
-histogram.view.name = Histogram
-latency.view.name = Latency View
-
-wizard.category.name = LTTng
-project.new.wizard.name = LTTng Project
-project.new.wizard.description = Create a new LTTng project
-
-project.propertyPage.tracelibPath = LTTng Trace Library Path
-action.set.label = LTTng Action Set
-action.set.description = LTTng Action Set
tracetype.category.lttng = LTTng 2.0
tracetype.type.kernel = Kernel Trace
-
-#Commands and Menus
-commands.trace.category.name = LTTng Trace Commands
-commands.trace.category.description = LTTng Trace Commands
-commands.trace.import = Import Trace
-commands.trace.import.description = Import an LTTng Trace
-commands.trace.open = Open Trace
-commands.trace.open.description = Open an LTTng Trace
-commands.trace.rename = Rename Trace
-commands.trace.rename.description = Rename an LTTng Trace
-commands.trace.delete = Delete Trace
-commands.trace.delete.description = Delete an LTTng Trace
-commands.trace.selectparser = Select Parser
-
-commands.experiment.category.name = LTTng Experiment Commands
-commands.experiment.category.description = LTTng Experiment Commands
-commands.experiment.new = New Experiment
-commands.experiment.new.description = Create a new LTTng Experiment
-commands.experiment.selecttraces = Select Traces
-commands.experiment.selecttraces.description = Select LTTng Traces
-commands.experiment.open = Open Experiment
-commands.experiment.open.description = Open an LTTng Experiment
-commands.experiment.rename = Rename Experiment
-commands.experiment.rename.description = Rename an LTTng Experiment
-commands.experiment.delete = Delete Experiment
-commands.experiment.delete.description = Delete an LTTng Experiment
-
-
-# trace control (RSE) properties
-lttng.rse.subsystem.type.name=LTTng
-lttng.rse.subsystem.type.description=LTTng TCF Subsystem
-lttng.rse.subsystem.config.name = LTTng Tracing
-lttng.rse.subsystem.config.description = LTTng Tracing Subsystem Configuration
-
-action.set.label = LTTng RSE action set
-action.set.description = LTTng RSE action set
-
-menu.lttng.label = LTTng
-action.stop.label = Stop
-action.stop.tooltip = Stop the selected trace
-action.pause.label = Pause
-action.pause.tooltip = Pause tracing
-action.start.label = Start
-action.start.tooltip = Start tracing
-action.newtrace.label = New Trace
-action.newtrace.tooltip = Create a new trace
-action.configuretrace.label = Configure Trace
-action.configuretrace.tooltip = Configure the selected trace
-action.browse.label = Browse Trace
-action.browse.tooltip = Browse the trace folder of selected trace
-action.configuremarkers.label = Configure Markers
-action.configuremarkers.tooltip = Configure the markers of selected target
-action.delete.label = Delete Trace
-action.delete.tooltip = Delete the selected trace
-
-action.import.label = Import To Project
-action.import.tooltip = Import selected trace to a project
<?eclipse version="3.4"?>
<plugin>
<extension
- id="org.eclipse.linuxtools.lttng2.kernel.ui.perspective"
point="org.eclipse.ui.perspectives">
<perspective
- class="org.eclipse.linuxtools.internal.lttng2.kernel.kernel.ui.views.PerspectiveFactory"
+ class="org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.PerspectiveFactory"
icon="icons/obj16/garland16.png"
id="org.eclipse.linuxtools.lttng2.kernel.ui.perspective"
- name="%perspective.category.name">
+ name="%kernel.perspective.name">
</perspective>
</extension>
<extension
trace_type="org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace">
</type>
</extension>
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ allowMultiple="false"
+ category="org.eclipse.linuxtools.lttng2.ui.views.category"
+ class="org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow.ControlFlowView"
+ icon="icons/eview16/control_flow_view.gif"
+ id="org.eclipse.linuxtools.lttng2.kernel.ui.views.controlflow"
+ name="%controlflow.view.name"
+ restorable="true">
+ </view>
+ <view
+ allowMultiple="false"
+ category="org.eclipse.linuxtools.lttng2.ui.views.category"
+ class="org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.resources.ResourcesView"
+ icon="icons/eview16/resources_view.gif"
+ id="org.eclipse.linuxtools.lttng2.kernel.ui.views.resources"
+ name="%resources.view.name"
+ restorable="true">
+ </view>
+ </extension>
</plugin>
+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2012 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:
- * Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.internal.lttng2.kernel.kernel.ui.views;
-
-import org.eclipse.linuxtools.tmf.ui.views.events.TmfEventsView;
-import org.eclipse.linuxtools.tmf.ui.views.histogram.HistogramView;
-import org.eclipse.ui.IFolderLayout;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-/**
- * <b><u>PerspectiveFactory</u></b>
- * <p>
- * The default LTTng perspective.
- */
-public class PerspectiveFactory implements IPerspectiveFactory {
-
- // Perspective ID
- public static final String ID = "org.eclipse.linuxtools.lttng2.ui.perspective"; //$NON-NLS-1$
-
- // LTTng views
- private static final String EVENTS_VIEW_ID = TmfEventsView.ID;
- private static final String HISTOGRAM_VIEW_ID = HistogramView.ID;
-
- // Standard Eclipse views
- private static final String PROJECT_VIEW_ID = IPageLayout.ID_PROJECT_EXPLORER;
- private static final String PROPERTIES_VIEW_ID = IPageLayout.ID_PROP_SHEET;
- private static final String BOOKMARKS_VIEW_ID = IPageLayout.ID_BOOKMARKS;
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
- */
- @Override
- public void createInitialLayout(IPageLayout layout) {
-
- layout.setEditorAreaVisible(false);
-
- addFastViews(layout);
- addViewShortcuts(layout);
- addPerspectiveShortcuts(layout);
-
- // Create the top left folder
- IFolderLayout topLeftFolder = layout.createFolder(
- "topLeftFolder", IPageLayout.LEFT, 0.15f, IPageLayout.ID_EDITOR_AREA); //$NON-NLS-1$
- topLeftFolder.addView(PROJECT_VIEW_ID);
-
-// // Create the top right folder
-// IFolderLayout topRightFolder = layout.createFolder(
-// "topRightFolder", IPageLayout.TOP, 0.40f, IPageLayout.ID_EDITOR_AREA); //$NON-NLS-1$
-
- // Create the middle right folder
- IFolderLayout middleRightFolder = layout.createFolder(
- "middleRightFolder", IPageLayout.BOTTOM, 0.40f, IPageLayout.ID_EDITOR_AREA); //$NON-NLS-1$
- middleRightFolder.addView(EVENTS_VIEW_ID);
-
- // Create the bottom right folder
- IFolderLayout bottomRightFolder = layout.createFolder(
- "bottomRightFolder", IPageLayout.BOTTOM, 0.50f, "middleRightFolder"); //$NON-NLS-1$ //$NON-NLS-2$
- bottomRightFolder.addView(HISTOGRAM_VIEW_ID);
- bottomRightFolder.addView(PROPERTIES_VIEW_ID);
- bottomRightFolder.addView(BOOKMARKS_VIEW_ID);
- }
-
- /**
- * Add fast views to the perspective
- *
- * @param layout
- */
- private void addFastViews(IPageLayout layout) {
- // TODO Auto-generated method stub
- }
-
- /**
- * Add view shortcuts to the perspective
- *
- * @param layout
- */
- private void addViewShortcuts(IPageLayout layout) {
- // TODO Auto-generated method stub
- }
-
- /**
- * Add perspective shortcuts to the perspective
- *
- * @param layout
- */
- private void addPerspectiveShortcuts(IPageLayout layout) {
- // TODO Auto-generated method stub
- }
-
-}
/**
* The plug-in ID
*/
- public static final String PLUGIN_ID = "org.eclipse.linuxtools.lttng2.ui"; //$NON-NLS-1$
+ public static final String PLUGIN_ID = "org.eclipse.linuxtools.lttng2.kernel.ui"; //$NON-NLS-1$
/**
* The shared instance
--- /dev/null
+package org.eclipse.linuxtools.internal.lttng2.kernel.ui;\r
+\r
+import org.eclipse.osgi.util.NLS;\r
+\r
+public class Messages extends NLS {\r
+ private static final String BUNDLE_NAME = "org.eclipse.linuxtools.internal.lttng2.kernel.ui.messages"; //$NON-NLS-1$\r
+\r
+ public static String ControlFlowView_birthNsecColumn;\r
+ public static String ControlFlowView_birthSecColumn;\r
+ public static String ControlFlowView_brandColumn;\r
+ public static String ControlFlowView_cpuColumn;\r
+ public static String ControlFlowView_tidColumn;\r
+ public static String ControlFlowView_ppidColumn;\r
+ public static String ControlFlowView_processColumn;\r
+ public static String ControlFlowView_tgidColumn;\r
+ public static String ControlFlowView_traceColumn;\r
+\r
+ static {\r
+ // initialize resource bundle\r
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);\r
+ }\r
+\r
+ private Messages() {\r
+ }\r
+}\r
--- /dev/null
+ControlFlowView_birthNsecColumn=Birth nsec\r
+ControlFlowView_birthSecColumn=Birth sec\r
+ControlFlowView_brandColumn=Brand\r
+ControlFlowView_cpuColumn=CPU\r
+ControlFlowView_tidColumn=TID\r
+ControlFlowView_ppidColumn=PPID\r
+ControlFlowView_processColumn=Process\r
+ControlFlowView_tgidColumn=TGID\r
+ControlFlowView_traceColumn=Trace\r
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2012 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:
+ * Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views;
+
+import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow.ControlFlowView;
+import org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.resources.ResourcesView;
+import org.eclipse.linuxtools.internal.lttng2.ui.views.control.ControlView;
+import org.eclipse.linuxtools.tmf.ui.views.events.TmfEventsView;
+import org.eclipse.linuxtools.tmf.ui.views.histogram.HistogramView;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+/**
+ * <b><u>PerspectiveFactory</u></b>
+ * <p>
+ * The default LTTng perspective.
+ */
+public class PerspectiveFactory implements IPerspectiveFactory {
+
+ // Perspective ID
+ public static final String ID = "org.eclipse.linuxtools.lttng2.ui.perspective"; //$NON-NLS-1$
+
+ // LTTng views
+ private static final String EVENTS_VIEW_ID = TmfEventsView.ID;
+ private static final String HISTOGRAM_VIEW_ID = HistogramView.ID;
+ private static final String CONTROL_VIEW_ID = ControlView.ID;
+ private static final String CONTROLFLOW_VIEW_ID = ControlFlowView.ID;
+ private static final String RESOURCES_VIEW_ID = ResourcesView.ID;
+
+ // Standard Eclipse views
+ private static final String PROJECT_VIEW_ID = IPageLayout.ID_PROJECT_EXPLORER;
+ private static final String PROPERTIES_VIEW_ID = IPageLayout.ID_PROP_SHEET;
+ private static final String BOOKMARKS_VIEW_ID = IPageLayout.ID_BOOKMARKS;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+ */
+ @Override
+ public void createInitialLayout(IPageLayout layout) {
+
+ layout.setEditorAreaVisible(false);
+
+ addFastViews(layout);
+ addViewShortcuts(layout);
+ addPerspectiveShortcuts(layout);
+
+ // Create the top left folder
+ IFolderLayout topLeftFolder = layout.createFolder(
+ "topLeftFolder", IPageLayout.LEFT, 0.15f, IPageLayout.ID_EDITOR_AREA); //$NON-NLS-1$
+ topLeftFolder.addView(PROJECT_VIEW_ID);
+ topLeftFolder.addView(CONTROL_VIEW_ID);
+
+ // Create the top right folder
+ IFolderLayout topRightFolder = layout.createFolder(
+ "topRightFolder", IPageLayout.TOP, 0.40f, IPageLayout.ID_EDITOR_AREA); //$NON-NLS-1$
+ topRightFolder.addView(CONTROLFLOW_VIEW_ID);
+ topRightFolder.addView(RESOURCES_VIEW_ID);
+
+ // Create the middle right folder
+ IFolderLayout middleRightFolder = layout.createFolder(
+ "middleRightFolder", IPageLayout.BOTTOM, 0.40f, IPageLayout.ID_EDITOR_AREA); //$NON-NLS-1$
+ middleRightFolder.addView(EVENTS_VIEW_ID);
+
+ // Create the bottom right folder
+ IFolderLayout bottomRightFolder = layout.createFolder(
+ "bottomRightFolder", IPageLayout.BOTTOM, 0.50f, "middleRightFolder"); //$NON-NLS-1$ //$NON-NLS-2$
+ bottomRightFolder.addView(HISTOGRAM_VIEW_ID);
+ bottomRightFolder.addView(PROPERTIES_VIEW_ID);
+ bottomRightFolder.addView(BOOKMARKS_VIEW_ID);
+ }
+
+ /**
+ * Add fast views to the perspective
+ *
+ * @param layout
+ */
+ private void addFastViews(IPageLayout layout) {
+ // TODO Auto-generated method stub
+ }
+
+ /**
+ * Add view shortcuts to the perspective
+ *
+ * @param layout
+ */
+ private void addViewShortcuts(IPageLayout layout) {
+ // TODO Auto-generated method stub
+ }
+
+ /**
+ * Add perspective shortcuts to the perspective
+ *
+ * @param layout
+ */
+ private void addPerspectiveShortcuts(IPageLayout layout) {
+ // TODO Auto-generated method stub
+ }
+
+}
--- /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.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+\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 CtfKernelTrace fTrace;\r
+ private ITimeGraphEntry parent = null;\r
+ private ITimeGraphEntry[] children = null;\r
+ private String fName;\r
+ private int fThreadId;\r
+ private int fPpid;\r
+ private long fStartTime = -1;\r
+ private long fEndTime = -1;\r
+ List<ITimeEvent> list = new LinkedList<ITimeEvent>();\r
+\r
+ public ControlFlowEntry(CtfKernelTrace trace, String execName, int threadId, int ppid, long startTime, long endTime) {\r
+ fTrace = trace;\r
+ fName = execName;\r
+ fThreadId = threadId;\r
+ fPpid = ppid;\r
+ fStartTime = startTime;\r
+ fEndTime = endTime;\r
+ }\r
+\r
+ @Override\r
+ public ITimeGraphEntry getParent() {\r
+ return parent;\r
+ }\r
+\r
+ @Override\r
+ public boolean hasChildren() {\r
+ return children != null && children.length > 0;\r
+ }\r
+\r
+ @Override\r
+ public ITimeGraphEntry[] getChildren() {\r
+ return children;\r
+ }\r
+\r
+ @Override\r
+ public String getName() {\r
+ return fName;\r
+ }\r
+\r
+ public int getThreadId() {\r
+ return fThreadId;\r
+ }\r
+\r
+ public int getPPID() {\r
+ return fPpid;\r
+ }\r
+\r
+ @Override\r
+ public long getStartTime() {\r
+ return fStartTime;\r
+ }\r
+\r
+ @Override\r
+ public long getStopTime() {\r
+ return fEndTime;\r
+ }\r
+\r
+ @Override\r
+ public Iterator<ITimeEvent> getTimeEventsIterator() {\r
+ return list.iterator();\r
+ }\r
+\r
+ @Override\r
+ public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {\r
+ return getTimeEventsIterator();\r
+ }\r
+\r
+ public void addTraceEvent(ITimeEvent event) {\r
+ long time = event.getTime();\r
+ list.add(event);\r
+ if (fStartTime == -1 || time < fStartTime) {\r
+ fStartTime = time;\r
+ }\r
+ if (fEndTime == -1 || time > fEndTime) {\r
+ fEndTime = time;\r
+ }\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
+}\r
--- /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.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.jface.viewers.ILabelProviderListener;\r
+import org.eclipse.jface.viewers.ITableLabelProvider;\r
+import org.eclipse.jface.viewers.ITreeContentProvider;\r
+import org.eclipse.jface.viewers.Viewer;\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.lttng2.kernel.core.trace.CtfKernelTrace;\r
+import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.AttributeNotFoundException;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.StateValueTypeException;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.TimeRangeException;\r
+import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;\r
+import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;\r
+import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;\r
+import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;\r
+import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier;\r
+import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\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.TimeGraphCombo;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphProvider;\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.model.ITimeEvent;\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.Image;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+\r
+public class ControlFlowView extends TmfView {\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Constants\r
+ // ------------------------------------------------------------------------\r
+\r
+ /**\r
+ * View ID.\r
+ */\r
+ public static final String ID = "org.eclipse.linuxtools.lttng2.kernel.ui.views.controlflow"; //$NON-NLS-1$\r
+\r
+ private final String PROCESS_COLUMN = Messages.ControlFlowView_processColumn;\r
+ private final String TID_COLUMN = Messages.ControlFlowView_tidColumn;\r
+ private final String TGID_COLUMN = Messages.ControlFlowView_tgidColumn;\r
+ private final String PPID_COLUMN = Messages.ControlFlowView_ppidColumn;\r
+ private final String CPU_COLUMN = Messages.ControlFlowView_cpuColumn;\r
+ private final String BIRTH_SEC_COLUMN = Messages.ControlFlowView_birthSecColumn;\r
+ private final String BIRTH_NSEC_COLUMN = Messages.ControlFlowView_birthNsecColumn;\r
+ private final String TRACE_COLUMN = Messages.ControlFlowView_traceColumn;\r
+\r
+ private final String[] COLUMN_NAMES = new String[] {\r
+ PROCESS_COLUMN,\r
+ TID_COLUMN,\r
+ TGID_COLUMN,\r
+ PPID_COLUMN,\r
+ CPU_COLUMN,\r
+ BIRTH_SEC_COLUMN,\r
+ BIRTH_NSEC_COLUMN,\r
+ TRACE_COLUMN\r
+ };\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Fields\r
+ // ------------------------------------------------------------------------\r
+\r
+ // The timegraph combo\r
+ private TimeGraphCombo fTimeGraphCombo;\r
+\r
+ // The selected experiment\r
+ private TmfExperiment<ITmfEvent> fSelectedExperiment;\r
+\r
+ // The timegraph entry list\r
+ private ArrayList<ITimeGraphEntry> fEntryList;\r
+\r
+ // The start time\r
+ private long fStartTime;\r
+\r
+ // The end time\r
+ private long fEndTime;\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Classes\r
+ // ------------------------------------------------------------------------\r
+\r
+ private class TreeContentProvider implements ITreeContentProvider {\r
+\r
+ @Override\r
+ public void dispose() {\r
+ }\r
+\r
+ @Override\r
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+ }\r
+\r
+ @Override\r
+ public Object[] getElements(Object inputElement) {\r
+ return (ITimeGraphEntry[]) inputElement;\r
+ }\r
+\r
+ @Override\r
+ public Object[] getChildren(Object parentElement) {\r
+ ITimeGraphEntry entry = (ITimeGraphEntry) parentElement;\r
+ return entry.getChildren();\r
+ }\r
+\r
+ @Override\r
+ public Object getParent(Object element) {\r
+ ITimeGraphEntry entry = (ITimeGraphEntry) element;\r
+ return entry.getParent();\r
+ }\r
+\r
+ @Override\r
+ public boolean hasChildren(Object element) {\r
+ ITimeGraphEntry entry = (ITimeGraphEntry) element;\r
+ return entry.hasChildren();\r
+ }\r
+ \r
+ }\r
+\r
+ private class TreeLabelProvider implements ITableLabelProvider {\r
+\r
+ @Override\r
+ public void addListener(ILabelProviderListener listener) {\r
+ }\r
+\r
+ @Override\r
+ public void dispose() {\r
+ }\r
+\r
+ @Override\r
+ public boolean isLabelProperty(Object element, String property) {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public void removeListener(ILabelProviderListener listener) {\r
+ }\r
+\r
+ @Override\r
+ public Image getColumnImage(Object element, int columnIndex) {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public String getColumnText(Object element, int columnIndex) {\r
+ ControlFlowEntry entry = (ControlFlowEntry) element;\r
+ if (columnIndex == 0) {\r
+ return entry.getName();\r
+ } else if (columnIndex == 1) {\r
+ return Integer.toString(entry.getThreadId());\r
+ } else if (columnIndex == 3) {\r
+ if (entry.getPPID() != -1) {\r
+ return Integer.toString(entry.getPPID());\r
+ }\r
+ }\r
+ return ""; //$NON-NLS-1$\r
+ }\r
+ \r
+ }\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Constructors\r
+ // ------------------------------------------------------------------------\r
+\r
+ public ControlFlowView() {\r
+ super(ID);\r
+ }\r
+\r
+ // ------------------------------------------------------------------------\r
+ // ViewPart\r
+ // ------------------------------------------------------------------------\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.linuxtools.tmf.ui.views.TmfView#createPartControl(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ fTimeGraphCombo = new TimeGraphCombo(parent, SWT.NONE);\r
+\r
+ fTimeGraphCombo.setTreeContentProvider(new TreeContentProvider());\r
+\r
+ fTimeGraphCombo.setTreeLabelProvider(new TreeLabelProvider());\r
+\r
+ fTimeGraphCombo.setTimeGraphProvider(new TimeGraphProvider() {\r
+ @Override\r
+ public String getTraceClassName(ITimeGraphEntry trace) {\r
+ return "trace class"; //$NON-NLS-1$\r
+ }\r
+ \r
+ @Override\r
+ public String getStateName(StateColor color) {\r
+ return "state name"; //$NON-NLS-1$\r
+ }\r
+ \r
+ @Override\r
+ public String getEventName(ITimeEvent event, boolean upper, boolean extInfo) {\r
+ return "event name"; //$NON-NLS-1$\r
+ }\r
+ \r
+ @Override\r
+ public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
+ return new HashMap<String, String>();\r
+ }\r
+ \r
+ @Override\r
+ public StateColor getEventColor(ITimeEvent event) {\r
+ return StateColor.BLACK;\r
+ }\r
+ });\r
+\r
+ fTimeGraphCombo.setTreeColumns(COLUMN_NAMES);\r
+\r
+ fTimeGraphCombo.getTimeGraphViewer().addRangeListener(new ITimeGraphRangeListener() {\r
+ @Override\r
+ public void timeRangeUpdated(TimeGraphRangeUpdateEvent event) {\r
+ long startTime = event.getStartTime();\r
+ long endTime = event.getEndTime();\r
+ System.out.println("timeRangeUpdated: startTime="+startTime+" endTime="+endTime);\r
+ }\r
+ });\r
+\r
+ fTimeGraphCombo.getTimeGraphViewer().addTimeListener(new ITimeGraphTimeListener() {\r
+ @Override\r
+ public void timeSelected(TimeGraphTimeEvent event) {\r
+ long time = event.getTime();\r
+ System.out.println("timeSelected: time="+time);\r
+ }\r
+ });\r
+\r
+ fTimeGraphCombo.addSelectionListener(new ITimeGraphSelectionListener() {\r
+ @Override\r
+ public void selectionChanged(TimeGraphSelectionEvent event) {\r
+ ITimeGraphEntry selection = event.getSelection();\r
+ System.out.println("selectionChanged: source="+event.getSource()+" selection="+ (selection == null ? selection : selection.getName()));\r
+ }\r
+ });\r
+\r
+ final Thread thread = new Thread() {\r
+ @Override\r
+ public void run() {\r
+ if (TmfExperiment.getCurrentExperiment() != null) {\r
+ selectExperiment(TmfExperiment.getCurrentExperiment());\r
+ }\r
+ }\r
+ };\r
+ thread.start();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
+ */\r
+ @Override\r
+ public void setFocus() {\r
+ fTimeGraphCombo.setFocus();\r
+ }\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Signal handlers\r
+ // ------------------------------------------------------------------------\r
+\r
+ @TmfSignalHandler\r
+ public void experimentSelected(final TmfExperimentSelectedSignal<? extends ITmfEvent> signal) {\r
+ if (signal.getExperiment().equals(fSelectedExperiment)) {\r
+ return;\r
+ }\r
+\r
+ final Thread thread = new Thread() {\r
+ @Override\r
+ public void run() {\r
+ selectExperiment(signal.getExperiment());\r
+ }};\r
+ thread.run();\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ private void selectExperiment(TmfExperiment<?> experiment) {\r
+ fStartTime = Long.MAX_VALUE;\r
+ fEndTime = Long.MIN_VALUE;\r
+ fSelectedExperiment = (TmfExperiment<ITmfEvent>) experiment;\r
+ HashMap<String, ITimeGraphEntry> traces = new HashMap<String, ITimeGraphEntry>();\r
+ fEntryList = new ArrayList<ITimeGraphEntry>();\r
+ for (ITmfTrace<?> trace : experiment.getTraces()) {\r
+ if (trace instanceof CtfKernelTrace) {\r
+ CtfKernelTrace ctfKernelTrace = (CtfKernelTrace) trace;\r
+ IStateSystemQuerier ssq = ctfKernelTrace.getStateSystem();\r
+ ControlFlowEntry swapperEntry = null;\r
+ long start = ssq.getStartTime();\r
+ long end = ssq.getCurrentEndTime();\r
+ fStartTime = Math.min(fStartTime, start);\r
+ fEndTime = Math.max(fEndTime, end);\r
+ List<Integer> threadQuarks = ssq.getQuarks(Attributes.THREADS, "*"); //$NON-NLS-1$\r
+ for (int threadQuark : threadQuarks) {\r
+ String threadName = ssq.getAttributeName(threadQuark);\r
+ int threadId = -1;\r
+ try {\r
+ threadId = Integer.parseInt(threadName);\r
+ } catch (NumberFormatException e1) {\r
+ continue;\r
+ }\r
+ int execNameQuark = -1;\r
+ try {\r
+ try {\r
+ execNameQuark = ssq.getQuarkRelative(threadQuark, Attributes.EXEC_NAME);\r
+ } catch (AttributeNotFoundException e) {\r
+ continue;\r
+ }\r
+ int ppidQuark = ssq.getQuarkRelative(threadQuark, Attributes.PPID);\r
+ List<ITmfStateInterval> execNameIntervals = ssq.queryHistoryRange(execNameQuark, start, end);\r
+ for (ITmfStateInterval execNameInterval : execNameIntervals) {\r
+ if (!execNameInterval.getStateValue().isNull() && execNameInterval.getStateValue().getType() == 1) {\r
+ String execName = execNameInterval.getStateValue().unboxStr();\r
+ long startTime = execNameInterval.getStartTime();\r
+ long endTime = execNameInterval.getEndTime();\r
+ int ppid = -1;\r
+ if (ppidQuark != -1) {\r
+ ITmfStateInterval ppidInterval = ssq.querySingleState(startTime, ppidQuark);\r
+ ppid = ppidInterval.getStateValue().unboxInt();\r
+ }\r
+ ControlFlowEntry entry;\r
+ if (threadId == 0) {\r
+ if (swapperEntry == null) {\r
+ swapperEntry = new ControlFlowEntry(ctfKernelTrace, "swapper", threadId, ppid, startTime, endTime);\r
+ fEntryList.add(swapperEntry);\r
+ }\r
+ entry = swapperEntry;\r
+ } else {\r
+ entry = new ControlFlowEntry(ctfKernelTrace, execName, threadId, ppid, startTime, endTime);\r
+ fEntryList.add(entry);\r
+ }\r
+ entry.addTraceEvent(new TimeEvent(entry, startTime, endTime - startTime));\r
+ }\r
+ }\r
+ } catch (AttributeNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (TimeRangeException e) {\r
+ e.printStackTrace();\r
+ } catch (StateValueTypeException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+ refresh();\r
+ }\r
+ }\r
+\r
+ private void refresh() {\r
+ Display.getDefault().asyncExec(new Runnable() {\r
+ @Override\r
+ public void run() {\r
+ if (fTimeGraphCombo.isDisposed()) {\r
+ return;\r
+ }\r
+ ITimeGraphEntry[] entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+ Arrays.sort(entries);\r
+ fTimeGraphCombo.setInput(entries);\r
+ fTimeGraphCombo.getTimeGraphViewer().setTimeBounds(fStartTime, fEndTime);\r
+ fTimeGraphCombo.getTimeGraphViewer().setStartFinishTime(fStartTime, fEndTime);\r
+ }\r
+ });\r
+ }\r
+\r
+}\r
--- /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.resources;\r
+\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+\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 ResourcesEntry implements ITimeGraphEntry {\r
+ private CtfKernelTrace fTrace;\r
+ private ITimeGraphEntry fParent = null;\r
+ private ITimeGraphEntry[] children = null;\r
+ private String fName;\r
+ private long fStartTime;\r
+ private long fEndTime;\r
+ List<ITimeEvent> list = new LinkedList<ITimeEvent>();\r
+\r
+ public ResourcesEntry(ITimeGraphEntry parent, CtfKernelTrace trace, String cpuName) {\r
+ fParent = parent;\r
+ fTrace = trace;\r
+ fName = cpuName;\r
+ }\r
+\r
+ @Override\r
+ public ITimeGraphEntry getParent() {\r
+ return fParent;\r
+ }\r
+\r
+ @Override\r
+ public boolean hasChildren() {\r
+ return children != null && children.length > 0;\r
+ }\r
+\r
+ @Override\r
+ public ITimeGraphEntry[] getChildren() {\r
+ return children;\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 getStopTime() {\r
+ return fEndTime;\r
+ }\r
+\r
+ @Override\r
+ public Iterator<ITimeEvent> getTimeEventsIterator() {\r
+ return list.iterator();\r
+ }\r
+\r
+ @Override\r
+ public Iterator<ITimeEvent> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {\r
+ return getTimeEventsIterator();\r
+ }\r
+\r
+ public void addTraceEvent(ITimeEvent event) {\r
+ long time = event.getTime();\r
+ list.add(event);\r
+ if (fStartTime == -1 || time < fStartTime) {\r
+ fStartTime = time;\r
+ }\r
+ if (fEndTime == -1 || time > fEndTime) {\r
+ fEndTime = time;\r
+ }\r
+ }\r
+}\r
--- /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.resources;\r
+\r
+import java.util.ArrayList;\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.linuxtools.lttng2.kernel.core.trace.Attributes;\r
+import org.eclipse.linuxtools.lttng2.kernel.core.trace.CtfKernelTrace;\r
+import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r
+import org.eclipse.linuxtools.tmf.core.event.TmfEvent;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.AttributeNotFoundException;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.StateValueTypeException;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.TimeRangeException;\r
+import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;\r
+import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;\r
+import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;\r
+import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;\r
+import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier;\r
+import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\r
+import org.eclipse.linuxtools.tmf.ui.views.TmfView;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphProvider;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.TimeGraphViewer;\r
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\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.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+\r
+public class ResourcesView extends TmfView {\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Constants\r
+ // ------------------------------------------------------------------------\r
+\r
+ /**\r
+ * View ID.\r
+ */\r
+ public static final String ID = "org.eclipse.linuxtools.lttng2.kernel.ui.views.resources"; //$NON-NLS-1$\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Fields\r
+ // ------------------------------------------------------------------------\r
+\r
+ // The time graph viewer\r
+ TimeGraphViewer fTimeGraphViewer;\r
+\r
+ // The selected experiment\r
+ private TmfExperiment<ITmfEvent> fSelectedExperiment;\r
+\r
+ // The time graph entry list\r
+ private ArrayList<ITimeGraphEntry> fEntryList;\r
+\r
+ // The start time\r
+ private long fStartTime;\r
+\r
+ // The end time\r
+ private long fEndTime;\r
+\r
+ // The display width\r
+ private int fDisplayWidth;\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Classes\r
+ // ------------------------------------------------------------------------\r
+\r
+ private class GroupEntry implements ITimeGraphEntry {\r
+ public ITimeGraphEntry fParent;\r
+ public ArrayList<ITimeGraphEntry> fChildren;\r
+ public String fName;\r
+\r
+ public GroupEntry(ITimeGraphEntry parent, String name) {\r
+ fParent = parent;\r
+ fChildren = new ArrayList<ITimeGraphEntry>();\r
+ fName = name;\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 ITimeGraphEntry[] getChildren() {\r
+ return fChildren.toArray(new ITimeGraphEntry[0]);\r
+ }\r
+\r
+ @Override\r
+ public String getName() {\r
+ return fName;\r
+ }\r
+\r
+ @Override\r
+ public long getStartTime() {\r
+ return -1;\r
+ }\r
+\r
+ @Override\r
+ public long getStopTime() {\r
+ return -1;\r
+ }\r
+\r
+ @Override\r
+ public Iterator<ITimeEvent> getTimeEventsIterator() {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public <T extends ITimeEvent> Iterator<T> getTimeEventsIterator(long startTime, long stopTime, long visibleDuration) {\r
+ return null;\r
+ }\r
+\r
+ public void addChild(ITimeGraphEntry entry) {\r
+ fChildren.add(entry);\r
+ }\r
+ }\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Constructors\r
+ // ------------------------------------------------------------------------\r
+\r
+ public ResourcesView() {\r
+ super(ID);\r
+ fDisplayWidth = Display.getDefault().getBounds().width;\r
+ }\r
+\r
+ // ------------------------------------------------------------------------\r
+ // ViewPart\r
+ // ------------------------------------------------------------------------\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.linuxtools.tmf.ui.views.TmfView#createPartControl(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ fTimeGraphViewer = new TimeGraphViewer(parent, SWT.NONE);\r
+\r
+ fTimeGraphViewer.setTimeGraphProvider(new TimeGraphProvider() {\r
+ @Override\r
+ public String getTraceClassName(ITimeGraphEntry trace) {\r
+ return "trace class"; //$NON-NLS-1$\r
+ }\r
+ \r
+ @Override\r
+ public String getStateName(StateColor color) {\r
+ return "state name"; //$NON-NLS-1$\r
+ }\r
+ \r
+ @Override\r
+ public String getEventName(ITimeEvent event, boolean upper, boolean extInfo) {\r
+ return "event name"; //$NON-NLS-1$\r
+ }\r
+ \r
+ @Override\r
+ public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
+ return new HashMap<String, String>();\r
+ }\r
+ \r
+ @Override\r
+ public StateColor getEventColor(ITimeEvent event) {\r
+ if (event.getTime() % 2 == 0) {\r
+ return StateColor.BLACK;\r
+ } else {\r
+ return StateColor.GRAY;\r
+ }\r
+ }\r
+ });\r
+\r
+ final Thread thread = new Thread() {\r
+ @Override\r
+ public void run() {\r
+ if (TmfExperiment.getCurrentExperiment() != null) {\r
+ selectExperiment(TmfExperiment.getCurrentExperiment());\r
+ }\r
+ }\r
+ };\r
+ thread.start();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
+ */\r
+ @Override\r
+ public void setFocus() {\r
+ fTimeGraphViewer.setFocus();\r
+ }\r
+\r
+ // ------------------------------------------------------------------------\r
+ // Signal handlers\r
+ // ------------------------------------------------------------------------\r
+\r
+ @TmfSignalHandler\r
+ public void experimentSelected(final TmfExperimentSelectedSignal<? extends TmfEvent> signal) {\r
+ if (signal.getExperiment().equals(fSelectedExperiment)) {\r
+ return;\r
+ }\r
+\r
+ final Thread thread = new Thread() {\r
+ @Override\r
+ public void run() {\r
+ selectExperiment(signal.getExperiment());\r
+ }};\r
+ thread.start();\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ private void selectExperiment(TmfExperiment<?> experiment) {\r
+ fStartTime = Long.MAX_VALUE;\r
+ fEndTime = Long.MIN_VALUE;\r
+ fSelectedExperiment = (TmfExperiment<ITmfEvent>) experiment;\r
+ fEntryList = new ArrayList<ITimeGraphEntry>();\r
+ for (ITmfTrace<?> trace : experiment.getTraces()) {\r
+ GroupEntry groupEntry = new GroupEntry(null, trace.getPath());\r
+ fEntryList.add(groupEntry);\r
+ refresh();\r
+ if (trace instanceof CtfKernelTrace) {\r
+ CtfKernelTrace ctfKernelTrace = (CtfKernelTrace) trace;\r
+ IStateSystemQuerier ssq = ctfKernelTrace.getStateSystem();\r
+ long start = ssq.getStartTime();\r
+ long end = ssq.getCurrentEndTime();\r
+ fStartTime = Math.min(fStartTime, start);\r
+ fEndTime = Math.max(fEndTime, end);\r
+ List<Integer> cpuQuarks = ssq.getQuarks(Attributes.CPUS, "*"); //$NON-NLS-1$\r
+ for (int cpuQuark : cpuQuarks) {\r
+ String cpuName = "CPU " + ssq.getAttributeName(cpuQuark);\r
+ ResourcesEntry entry = new ResourcesEntry(groupEntry, ctfKernelTrace, cpuName);\r
+ try {\r
+ int currentThreadQuark = ssq.getQuarkRelative(cpuQuark, Attributes.CURRENT_THREAD);\r
+ long resolution = (end - start) / fDisplayWidth;\r
+ List<ITmfStateInterval> currentThreadIntervals = ssq.queryHistoryRange(currentThreadQuark, start, end, resolution);\r
+ for (ITmfStateInterval currentThreadInterval : currentThreadIntervals) {\r
+ if (!currentThreadInterval.getStateValue().isNull() && currentThreadInterval.getStateValue().getType() == 0) {\r
+ int currentThread = currentThreadInterval.getStateValue().unboxInt();\r
+ long startTime = currentThreadInterval.getStartTime();\r
+ long endTime = currentThreadInterval.getEndTime();\r
+ entry.addTraceEvent(new TimeEvent(entry, startTime, endTime - startTime));\r
+ }\r
+ }\r
+ } catch (AttributeNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (TimeRangeException e) {\r
+ e.printStackTrace();\r
+ } catch (StateValueTypeException e) {\r
+ e.printStackTrace();\r
+ }\r
+ groupEntry.addChild(entry);\r
+ refresh();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ private void refresh() {\r
+ Display.getDefault().asyncExec(new Runnable() {\r
+ @Override\r
+ public void run() {\r
+ if (fTimeGraphViewer.getControl().isDisposed()) {\r
+ return;\r
+ }\r
+ fTimeGraphViewer.setInput(fEntryList.toArray(new ITimeGraphEntry[0]));\r
+ fTimeGraphViewer.setTimeBounds(fStartTime, fEndTime);\r
+ fTimeGraphViewer.setStartFinishTime(fStartTime, fEndTime);\r
+ }\r
+ });\r
+ }\r
+\r
+}\r
org.eclipse.rse.services;bundle-version="3.2.100",
org.eclipse.rse.subsystems.files.core;bundle-version="3.2.100",
org.eclipse.rse.ui;bundle-version="3.2.0"
+Export-Package: org.eclipse.linuxtools.internal.lttng2.ui.views.control;x-friends:="org.eclipse.linuxtools.lttng2.kernel.ui"