Bug 378402: Implementation of ControlFlow view and Resources view for
authorPatrick Tasse <patrick.tasse@gmail.com>
Thu, 3 May 2012 18:42:19 +0000 (14:42 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Thu, 3 May 2012 18:43:30 +0000 (14:43 -0400)
LTTng 2.0.

15 files changed:
org.eclipse.linuxtools.lttng2.kernel.ui/META-INF/MANIFEST.MF
org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/control_flow_view.gif [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/resources_view.gif [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/plugin.properties
org.eclipse.linuxtools.lttng2.kernel.ui/plugin.xml
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/kernel/ui/views/PerspectiveFactory.java [deleted file]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/Activator.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/Messages.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/messages.properties [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/PerspectiveFactory.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowEntry.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesEntry.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.ui/META-INF/MANIFEST.MF

index 7b95ff70217273f33eadddccbcbb06598c03d782..9f846ebea4a705dce5b6c783fd88a0cf4d4d7dc1 100644 (file)
@@ -11,7 +11,8 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 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"
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/control_flow_view.gif b/org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/control_flow_view.gif
new file mode 100644 (file)
index 0000000..3971b50
Binary files /dev/null and b/org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/control_flow_view.gif differ
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/resources_view.gif b/org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/resources_view.gif
new file mode 100644 (file)
index 0000000..2344861
Binary files /dev/null and b/org.eclipse.linuxtools.lttng2.kernel.ui/icons/eview16/resources_view.gif differ
index d7bf8832d187e05de5402241baf95f0bada3b7cc..5358f07887e295a31333c76ad461d36c430709d1 100644 (file)
@@ -9,86 +9,15 @@
 #    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
index ff4bc187cbd1ef9585ec6ac0968c964f7c54376c..185e141fd8d84922fca1859dd1e066508d83386f 100644 (file)
@@ -2,13 +2,12 @@
 <?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>
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/kernel/ui/views/PerspectiveFactory.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/kernel/ui/views/PerspectiveFactory.java
deleted file mode 100644 (file)
index 651103f..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * 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
-    }
-
-}
index a854afb8586c0e8c301e838d299e7d4f85cbaabd..6b0e0c448b56f10248148b22985596b8af7336b9 100644 (file)
@@ -30,7 +30,7 @@ public class Activator extends AbstractUIPlugin {
     /**
      *  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
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/Messages.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/Messages.java
new file mode 100644 (file)
index 0000000..485fd95
--- /dev/null
@@ -0,0 +1,25 @@
+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
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/messages.properties b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/messages.properties
new file mode 100644 (file)
index 0000000..e843cdd
--- /dev/null
@@ -0,0 +1,9 @@
+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
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/PerspectiveFactory.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/PerspectiveFactory.java
new file mode 100644 (file)
index 0000000..b11e37f
--- /dev/null
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * 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
+    }
+
+}
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowEntry.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowEntry.java
new file mode 100644 (file)
index 0000000..12da4ae
--- /dev/null
@@ -0,0 +1,111 @@
+/*******************************************************************************\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
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java
new file mode 100644 (file)
index 0000000..a7aa605
--- /dev/null
@@ -0,0 +1,386 @@
+/*******************************************************************************\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
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesEntry.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesEntry.java
new file mode 100644 (file)
index 0000000..39b17a0
--- /dev/null
@@ -0,0 +1,88 @@
+/*******************************************************************************\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
diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java
new file mode 100644 (file)
index 0000000..51445db
--- /dev/null
@@ -0,0 +1,286 @@
+/*******************************************************************************\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
index 15feda3e9e2dc17826b10ec5312cfcb208fbeacc..a3d62b6adee638e7948abf52c132e82ffe295107 100644 (file)
@@ -20,3 +20,4 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.7.0",
  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"
This page took 0.043251 seconds and 5 git commands to generate.