Bug 378402: Implementation of ControlFlow view and Resources view for
authorPatrick Tasse <patrick.tasse@gmail.com>
Tue, 29 May 2012 20:43:54 +0000 (16:43 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Tue, 29 May 2012 21:15:43 +0000 (17:15 -0400)
LTTng 2.0.

org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/Messages.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/messages.properties
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowEntry.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java

index 6a436171750060732e61ce850423781c2b6cf362..b4905ea59c7359634ac5959f36a662a62213b0f8 100644 (file)
@@ -7,7 +7,7 @@ public class Messages extends NLS {
 \r
     public static String ControlFlowView_birthTimeColumn;\r
     public static String ControlFlowView_tidColumn;\r
-    public static String ControlFlowView_ppidColumn;\r
+    public static String ControlFlowView_ptidColumn;\r
     public static String ControlFlowView_processColumn;\r
     public static String ControlFlowView_traceColumn;\r
     \r
index 50575b2d7f07f57a9bf4dc0404ad23ec9810c30b..cd1eec55a0c5833e0c6f2ec379103012c3136c12 100644 (file)
@@ -1,6 +1,6 @@
 ControlFlowView_birthTimeColumn=Birth time\r
 ControlFlowView_tidColumn=TID\r
-ControlFlowView_ppidColumn=PPID\r
+ControlFlowView_ptidColumn=PTID\r
 ControlFlowView_processColumn=Process\r
 ControlFlowView_traceColumn=Trace\r
 \r
index 0c364b33ef17e61da1645f7e11dd7ef3e2b971f0..0576b633b9b472191f2252e4f92ae4b316d52ae1 100644 (file)
@@ -28,19 +28,19 @@ public class ControlFlowEntry implements ITimeGraphEntry, Comparable<ControlFlow
     private ArrayList<ControlFlowEntry> fChildren = new ArrayList<ControlFlowEntry>();\r
     private String fName;\r
     private int fThreadId;\r
-    private int fPpid;\r
+    private int fParentThreadId;\r
     private long fBirthTime = -1;\r
     private long fStartTime = -1;\r
     private long fEndTime = -1;\r
     private List<ITimeEvent> fEventList = new ArrayList<ITimeEvent>();\r
     private List<ITimeEvent> fZoomedEventList = null;\r
 \r
-    public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int ppid, long birthTime, long startTime, long endTime) {\r
+    public ControlFlowEntry(int threadQuark, CtfKernelTrace trace, String execName, int threadId, int parentThreadId, long birthTime, long startTime, long endTime) {\r
         fThreadQuark = threadQuark;\r
         fTrace = trace;\r
         fName = execName;\r
         fThreadId = threadId;\r
-        fPpid = ppid;\r
+        fParentThreadId = parentThreadId;\r
         fBirthTime = birthTime;\r
         fStartTime = startTime;\r
         fEndTime = endTime;\r
@@ -112,8 +112,8 @@ public class ControlFlowEntry implements ITimeGraphEntry, Comparable<ControlFlow
         return fThreadId;\r
     }\r
 \r
-    public int getPPID() {\r
-        return fPpid;\r
+    public int getParentThreadId() {\r
+        return fParentThreadId;\r
     }\r
 \r
     public long getBirthTime() {\r
index b7cd303fea6ce0151ab92887b8d3641fd96ac991..b87e8860eb3c4032b0286c19eb90aced0a1c14cb 100644 (file)
@@ -82,14 +82,14 @@ public class ControlFlowView extends TmfView {
 \r
     private static final String PROCESS_COLUMN    = Messages.ControlFlowView_processColumn;\r
     private static final String TID_COLUMN        = Messages.ControlFlowView_tidColumn;\r
-    private static final String PPID_COLUMN       = Messages.ControlFlowView_ppidColumn;\r
+    private static final String PTID_COLUMN       = Messages.ControlFlowView_ptidColumn;\r
     private static final String BIRTH_TIME_COLUMN = Messages.ControlFlowView_birthTimeColumn;\r
     private static final String TRACE_COLUMN      = Messages.ControlFlowView_traceColumn;\r
 \r
     private final String[] COLUMN_NAMES = new String[] {\r
             PROCESS_COLUMN,\r
             TID_COLUMN,\r
-            PPID_COLUMN,\r
+            PTID_COLUMN,\r
             BIRTH_TIME_COLUMN,\r
             TRACE_COLUMN\r
     };\r
@@ -196,8 +196,8 @@ public class ControlFlowView extends TmfView {
             } else if (columnIndex == 1) {\r
                 return Integer.toString(entry.getThreadId());\r
             } else if (columnIndex == 2) {\r
-                if (entry.getPPID() > 0) {\r
-                    return Integer.toString(entry.getPPID());\r
+                if (entry.getParentThreadId() > 0) {\r
+                    return Integer.toString(entry.getParentThreadId());\r
                 }\r
             } else if (columnIndex == 3) {\r
                 return Utils.formatTime(entry.getBirthTime(), TimeFormat.ABSOLUTE, Resolution.NANOSEC);\r
@@ -528,9 +528,9 @@ public class ControlFlowView extends TmfView {
         ArrayList<ControlFlowEntry> rootList = new ArrayList<ControlFlowEntry>();\r
         for (ControlFlowEntry entry : entryList) {\r
             boolean root = true;\r
-            if (entry.getPPID() > 0) {\r
+            if (entry.getParentThreadId() > 0) {\r
                 for (ControlFlowEntry parent : entryList) {\r
-                    if (parent.getThreadId() == entry.getPPID() &&\r
+                    if (parent.getThreadId() == entry.getParentThreadId() &&\r
                             entry.getStartTime() >= parent.getStartTime() &&\r
                             entry.getStartTime() <= parent.getEndTime()) {\r
                         parent.addChild(entry);\r
index d2c8137c20b01f4cdc4f9d3aa11b17492ac650a7..d972a9d3f362c10613f0263b49efd86cc4ec0d3c 100644 (file)
@@ -33,12 +33,15 @@ import org.eclipse.swt.graphics.RGB;
 public class ResourcesPresentationProvider extends TimeGraphPresentationProvider {\r
 \r
     private enum State {\r
-        UNKNOWN     (new RGB(100, 100, 100)),\r
-        IDLE        (new RGB(200, 200, 200)),\r
-        BUSY        (new RGB(0, 200, 0)),\r
-        INTERRUPTED (new RGB(200, 100, 100)),\r
-        RAISED      (new RGB(200, 200, 0)),\r
-        ACTIVE      (new RGB(200, 150, 100));\r
+        UNKNOWN         (new RGB(100, 100, 100)),\r
+        IDLE            (new RGB(200, 200, 200)),\r
+        USERMODE        (new RGB(0, 200, 0)),\r
+        SYSCALL         (new RGB(0, 0, 200)),\r
+        IRQ             (new RGB(200, 100, 100)),\r
+        SOFT_IRQ        (new RGB(200, 150, 100)),\r
+        IRQ_ACTIVE      (new RGB(200, 100, 100)),\r
+        SOFT_IRQ_RAISED (new RGB(200, 200, 0)),\r
+        SOFT_IRQ_ACTIVE (new RGB(200, 150, 100));\r
 \r
         public final RGB rgb;\r
 \r
@@ -71,16 +74,22 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider
                 if (status == StateValues.CPU_STATUS_IDLE) {\r
                     return State.IDLE.ordinal();\r
                 } else if (status == StateValues.CPU_STATUS_RUN_USERMODE) {\r
-                    return State.BUSY.ordinal();\r
+                    return State.USERMODE.ordinal();\r
+                } else if (status == StateValues.CPU_STATUS_RUN_SYSCALL) {\r
+                    return State.SYSCALL.ordinal();\r
                 } else if (status == StateValues.CPU_STATUS_IRQ) {\r
-                    return State.INTERRUPTED.ordinal();\r
+                    return State.IRQ.ordinal();\r
+                } else if (status == StateValues.CPU_STATUS_SOFTIRQ) {\r
+                    return State.SOFT_IRQ.ordinal();\r
                 }\r
-            } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
+            } else if (resourcesEvent.getType() == Type.IRQ) {\r
+                return State.IRQ_ACTIVE.ordinal();\r
+            } else if (resourcesEvent.getType() == Type.SOFT_IRQ) {\r
                 int cpu = resourcesEvent.getValue();\r
                 if (cpu == StateValues.SOFT_IRQ_RAISED) {\r
-                    return State.RAISED.ordinal();\r
+                    return State.SOFT_IRQ_RAISED.ordinal();\r
                 }\r
-                return State.ACTIVE.ordinal();\r
+                return State.SOFT_IRQ_ACTIVE.ordinal();\r
             } else {\r
                 return -1; // NULL\r
             }\r
@@ -97,16 +106,22 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider
                 if (status == StateValues.CPU_STATUS_IDLE) {\r
                     return State.IDLE.toString();\r
                 } else if (status == StateValues.CPU_STATUS_RUN_USERMODE) {\r
-                    return State.BUSY.toString();\r
+                    return State.USERMODE.toString();\r
+                } else if (status == StateValues.CPU_STATUS_RUN_SYSCALL) {\r
+                    return State.SYSCALL.toString();\r
                 } else if (status == StateValues.CPU_STATUS_IRQ) {\r
-                    return State.INTERRUPTED.toString();\r
+                    return State.IRQ.toString();\r
+                } else if (status == StateValues.CPU_STATUS_SOFTIRQ) {\r
+                    return State.SOFT_IRQ.toString();\r
                 }\r
-            } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
+            } else if (resourcesEvent.getType() == Type.IRQ) {\r
+                return State.IRQ_ACTIVE.toString();\r
+            } else if (resourcesEvent.getType() == Type.SOFT_IRQ) {\r
                 int cpu = resourcesEvent.getValue();\r
                 if (cpu == StateValues.SOFT_IRQ_RAISED) {\r
-                    return State.RAISED.toString();\r
+                    return State.SOFT_IRQ_RAISED.toString();\r
                 }\r
-                return State.ACTIVE.toString();\r
+                return State.SOFT_IRQ_ACTIVE.toString();\r
             } else {\r
                 return null;\r
             }\r
@@ -137,46 +152,52 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider
                 int status = resourcesEvent.getValue();\r
 \r
                 if (status == StateValues.CPU_STATUS_IRQ) {\r
-                    // In interrupted state get the IRQ or SOFT_IRQ that caused the interruption\r
+                    // In IRQ state get the IRQ that caused the interruption\r
                     ResourcesEntry entry = (ResourcesEntry) event.getEntry();\r
                     IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
                     int cpu = entry.getId();\r
-                    \r
+\r
                     IStateSystemQuerier ss = entry.getTrace().getStateSystem();\r
                     try {\r
-                        int resultQuark = 0;\r
-                        String attributeName = null;\r
-                        \r
-                        // First check for IRQ\r
                         List<ITmfStateInterval> fullState = ss.queryFullState(event.getTime());\r
                         List<Integer> irqQuarks = ss.getQuarks(Attributes.RESOURCES, Attributes.IRQS, "*"); //$NON-NLS-1$\r
 \r
-                        for (int curQuark : irqQuarks) {\r
-                            if (fullState.get(curQuark).getStateValue().unboxInt() == cpu) {\r
-                                resultQuark = curQuark;\r
-                                attributeName = Messages.ResourcesView_attributeIrqName;\r
+                        for (int irqQuark : irqQuarks) {\r
+                            if (fullState.get(irqQuark).getStateValue().unboxInt() == cpu) {\r
+                                ITmfStateInterval value = ssq.querySingleState(event.getTime(), irqQuark);\r
+                                if (!value.getStateValue().isNull()) {\r
+                                    int irq = Integer.parseInt(ssq.getAttributeName(irqQuark));\r
+                                    retMap.put(Messages.ResourcesView_attributeIrqName, String.valueOf(irq));\r
+                                }\r
                                 break;\r
                             }\r
                         }\r
-                        \r
-                        // If not found check for SOFT_IRQ\r
-                        if (attributeName == null) {\r
-                            List<Integer> softIrqQuarks = ssq.getQuarks(Attributes.RESOURCES, Attributes.SOFT_IRQS, "*"); //$NON-NLS-1$\r
-                            for (int curQuark : softIrqQuarks) {\r
-                                if (fullState.get(curQuark).getStateValue().unboxInt() == cpu) {\r
-                                    resultQuark = curQuark;\r
-                                    attributeName = Messages.ResourcesView_attributeSoftIrqName;\r
-                                    break;\r
-                                }\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
+                } else if (status == StateValues.CPU_STATUS_SOFTIRQ) {\r
+                    // In SOFT_IRQ state get the SOFT_IRQ that caused the interruption\r
+                    ResourcesEntry entry = (ResourcesEntry) event.getEntry();\r
+                    IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
+                    int cpu = entry.getId();\r
 \r
-                        if (attributeName != null) {\r
-                            // A IRQ or SOFT_IRQ was found\r
-                            ITmfStateInterval value = ssq.querySingleState(event.getTime(), resultQuark);\r
-                            if (!value.getStateValue().isNull()) {\r
-                                int irq = Integer.parseInt(ssq.getAttributeName(resultQuark));\r
-                                retMap.put(attributeName, String.valueOf(irq));\r
+                    IStateSystemQuerier ss = entry.getTrace().getStateSystem();\r
+                    try {\r
+                        List<ITmfStateInterval> fullState = ss.queryFullState(event.getTime());\r
+                        List<Integer> softIrqQuarks = ss.getQuarks(Attributes.RESOURCES, Attributes.SOFT_IRQS, "*"); //$NON-NLS-1$\r
+\r
+                        for (int softIrqQuark : softIrqQuarks) {\r
+                            if (fullState.get(softIrqQuark).getStateValue().unboxInt() == cpu) {\r
+                                ITmfStateInterval value = ssq.querySingleState(event.getTime(), softIrqQuark);\r
+                                if (!value.getStateValue().isNull()) {\r
+                                    int softIrq = Integer.parseInt(ssq.getAttributeName(softIrqQuark));\r
+                                    retMap.put(Messages.ResourcesView_attributeSoftIrqName, String.valueOf(softIrq));\r
+                                }\r
+                                break;\r
                             }\r
                         }\r
                     } catch (AttributeNotFoundException e) {\r
This page took 0.030917 seconds and 5 git commands to generate.