analysis: Add root trace entries to Control Flow view
authorPatrick Tasse <patrick.tasse@gmail.com>
Tue, 10 May 2016 15:14:17 +0000 (11:14 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Mon, 16 May 2016 15:58:11 +0000 (11:58 -0400)
- Trace entries are added as root entries in the time graph tree, and
all control flow entries are now under their respective trace entry (in
hierarchical or flat presentation)

- Remove the Trace column

- Remove the trace column comparator

- The root trace entries can be sorted by name or birth time (ascending
or descending) but when sorting by TID or PTID the trace entries are
always sorted by ascending birth time.

- Remove the trace name from the ControlFlowEntry pattern matcher

- Add method to remove child from TimeGraphEntry

Change-Id: I6717855f3da727d4ca8f0ac834b2153edbb12c5c
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/72424
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Reviewed-by: Hudson CI
12 files changed:
analysis/org.eclipse.tracecompass.analysis.os.linux.ui.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/tests/view/controlflow/ControlFlowEntryComparatorTest.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/Messages.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/messages.properties
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowColumnComparators.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowEntry.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowView.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/IControlFlowEntryComparator.java
doc/org.eclipse.tracecompass.doc.user/doc/images/Cfv_global.png
lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewSortingTest.java
lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java
tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/shared/org/eclipse/tracecompass/tmf/ui/swtbot/tests/shared/ConditionHelpers.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/model/TimeGraphEntry.java

index 6f959401899a12a9f7b79f49c81814e41f1040dc..7028e4f01653e5eb78bfb784c44a9c33ac747b04 100644 (file)
@@ -12,7 +12,7 @@ package org.eclipse.tracecompass.analysis.os.linux.ui.tests.view.controlflow;
 import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
 import static org.junit.Assert.assertEquals;
 
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -27,6 +27,7 @@ import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.views.timegraph.ITimeGraphEntryComparator;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -62,7 +63,7 @@ public class ControlFlowEntryComparatorTest {
     private static final int TRACE_START_TIME2 = 2;
     private static final int TRACE_START_TIME3 = 3;
 
-    private static final int TRACE_END_TIME1 = 4;
+    private static final int TRACE_END_TIME = 4;
 
 
     /**
@@ -76,196 +77,149 @@ public class ControlFlowEntryComparatorTest {
     }
 
     /**
-     * Test {@link IControlFlowEntryComparator#TRACE_COMPARATOR}
+     * Test {@link IControlFlowEntryComparator#PROCESS_NAME_COMPARATOR}
      */
     @Test
-    public void traceComparatorTest() {
-        ControlFlowEntry entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-        ControlFlowEntry entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-        ControlFlowEntry entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-        List<ControlFlowEntry> testVec = getListOfEntries(entry1, entry2, entry3);
-        List<ControlFlowEntry> expected = getListOfEntries(entry2, entry1, entry3);
-
-        Collections.sort(testVec, IControlFlowEntryComparator.TRACE_COMPARATOR);
+    public void execNameComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        List<ControlFlowEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<ControlFlowEntry> expected = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+
+        Collections.sort(testVec, IControlFlowEntryComparator.PROCESS_NAME_COMPARATOR);
         assertEquals(expected, testVec);
     }
 
     /**
-     * Test {@link IControlFlowEntryComparator#PROCESS_NAME_COMPARATOR}
+     * Test {@link IControlFlowEntryComparator#TID_COMPARATOR}
      */
     @Test
-    public void execNameComparatorTest() {
-        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-        List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-        List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+    public void tidComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        List<ControlFlowEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<ControlFlowEntry> expected = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+
+        Collections.sort(testVec, IControlFlowEntryComparator.TID_COMPARATOR);
+        assertEquals(expected, testVec);
+    }
 
-        Collections.sort(testVec, IControlFlowEntryComparator.PROCESS_NAME_COMPARATOR);
+    /**
+     * Test {@link IControlFlowEntryComparator#PTID_COMPARATOR}
+     */
+    @Test
+    public void ptidComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME);
+        List<ControlFlowEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<ControlFlowEntry> expected = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+
+        Collections.sort(testVec, IControlFlowEntryComparator.PTID_COMPARATOR);
         assertEquals(expected, testVec);
     }
 
     /**
-    * Test {@link IControlFlowEntryComparator#TID_COMPARATOR}
-    */
-   @Test
-   public void tidComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-
-       Collections.sort(testVec, IControlFlowEntryComparator.TID_COMPARATOR);
-       assertEquals(expected, testVec);
-   }
-
-   /**
-    * Test {@link IControlFlowEntryComparator#PTID_COMPARATOR}
-    */
-   @Test
-   public void ptidComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-
-       Collections.sort(testVec, IControlFlowEntryComparator.PTID_COMPARATOR);
-       assertEquals(expected, testVec);
-   }
-
-   /**
-    * Test {@link IControlFlowEntryComparator#BIRTH_TIME_COMPARATOR}
-    */
-   @Test
-   public void birthTimeComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-
-       Collections.sort(testVec, IControlFlowEntryComparator.BIRTH_TIME_COMPARATOR);
-       assertEquals(expected, testVec);
-   }
-
-   /**
-    * Test {@link ControlFlowColumnComparators#TRACE_COLUMN_COMPARATOR}
-    *
-    * Note when the trace is the same: The order that is birth time,
-    * TID  and PTID. Note that for secondary comparators the sort
-    * direction is not changed.
-    */
-   @Test
-   public void traceColumnComparatorTest() {
-       ControlFlowEntry entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-       List<ControlFlowEntry> testVec = getListOfEntries(entry2, entry3, entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(entry2, entry1, entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(entry3, entry1, entry2);
-       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       testVec = getListOfEntries(entry2, entry3, entry1);
-       expectedDown = getListOfEntries(entry2, entry1, entry3);
-       expectedUp = getListOfEntries(entry3, entry1, entry2);
-       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       testVec = getListOfEntries(entry2, entry3, entry1);
-       expectedDown = getListOfEntries(entry2, entry1, entry3);
-       expectedUp = getListOfEntries(entry3, entry1, entry2);
-       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-       testVec = getListOfEntries(entry2, entry3, entry1);
-       expectedDown = getListOfEntries(entry2, entry1, entry3);
-       expectedUp = getListOfEntries(entry3, entry1, entry2);
-       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
-
-   /**
-    * Test {@link ControlFlowColumnComparators#PROCESS_NAME_COLUMN_COMPARATOR}
-    */
-   @Test
-   public void execNameColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
-       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
+     * Test {@link IControlFlowEntryComparator#BIRTH_TIME_COMPARATOR}
+     */
+    @Test
+    public void birthTimeComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME);
+        List<ControlFlowEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<ControlFlowEntry> expected = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+
+        Collections.sort(testVec, IControlFlowEntryComparator.BIRTH_TIME_COMPARATOR);
+        assertEquals(expected, testVec);
+    }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#PROCESS_NAME_COLUMN_COMPARATOR}
+     */
+    @Test
+    public void execNameColumnComparatorTest() {
+        TimeGraphEntry trace1Entry = new TimeGraphEntry(TRACE1.getName(), TRACE_START_TIME1, TRACE_END_TIME);
+        TimeGraphEntry trace2Entry = new TimeGraphEntry(TRACE2.getName(), TRACE_START_TIME2, TRACE_END_TIME);
+        TimeGraphEntry trace3Entry = new TimeGraphEntry(TRACE3.getName(), TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace3Entry, trace1Entry, trace2Entry);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace2Entry, trace1Entry, trace3Entry);
+        runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry3, trace1Entry2, trace1Entry1);
+        runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
 
     /**
      * Test {@link ControlFlowColumnComparators#PROCESS_NAME_COLUMN_COMPARATOR}
      *
      * Note, that when the exec name is the same: The order that is birth time,
-     * TID  and PTID. Note that for secondary comparators the sort direction is
+     * TID and PTID. Note that for secondary comparators the sort direction is
      * not changed.
      */
-   @Test
-   public void execNameSecondaryTimeColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
-
-   /**
-    * Test {@link ControlFlowColumnComparators#TID_COLUMN_COMPARATOR}
-    */
-   @Test
-   public void tidColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
-       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
+    @Test
+    public void execNameSecondaryTimeColumnComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#TID_COLUMN_COMPARATOR}
+     */
+    @Test
+    public void tidColumnComparatorTest() {
+        TimeGraphEntry trace1Entry = new TimeGraphEntry(TRACE1.getName(), TRACE_START_TIME1, TRACE_END_TIME);
+        TimeGraphEntry trace2Entry = new TimeGraphEntry(TRACE2.getName(), TRACE_START_TIME2, TRACE_END_TIME);
+        TimeGraphEntry trace3Entry = new TimeGraphEntry(TRACE3.getName(), TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry3, trace1Entry2, trace1Entry1);
+        runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
 
     /**
      * Test {@link ControlFlowColumnComparators#TID_COLUMN_COMPARATOR}
@@ -274,169 +228,170 @@ public class ControlFlowEntryComparatorTest {
      * time, process name and PTID. Note that for secondary comparators the
      * sort direction is not changed.
      */
-   @Test
-   public void tidSecondaryTimeColumnComparatorTest() {
-
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
-
-   /**
-    * Test {@link ControlFlowColumnComparators#PTID_COLUMN_COMPARATOR}
-    */
-   @Test
-   public void ptidColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
-       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
+    @Test
+    public void tidSecondaryTimeColumnComparatorTest() {
+
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#PTID_COLUMN_COMPARATOR}
+     */
+    @Test
+    public void ptidColumnComparatorTest() {
+        TimeGraphEntry trace1Entry = new TimeGraphEntry(TRACE1.getName(), TRACE_START_TIME1, TRACE_END_TIME);
+        TimeGraphEntry trace2Entry = new TimeGraphEntry(TRACE2.getName(), TRACE_START_TIME2, TRACE_END_TIME);
+        TimeGraphEntry trace3Entry = new TimeGraphEntry(TRACE3.getName(), TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry3, trace1Entry2, trace1Entry1);
+        runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
 
     /**
      * Test {@link ControlFlowColumnComparators#PTID_COLUMN_COMPARATOR}
      *
      * Note, that when PTID is the same: The order for that is birth time,
-     * process name and ptid. Note that for secondary comparators the sort
+     * process name and TID. Note that for secondary comparators the sort
      * direction is not changed.
      */
-   @Test
-   public void ptidSecondaryTimeColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
-
-   /**
-    * Test {@link ControlFlowColumnComparators#BIRTH_TIME_COLUMN_COMPARATOR}
-    */
-   @Test
-   public void birthTimeColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-
-       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
-       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
-       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-   }
+    @Test
+    public void ptidSecondaryTimeColumnComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#BIRTH_TIME_COLUMN_COMPARATOR}
+     */
+    @Test
+    public void birthTimeColumnComparatorTest() {
+        TimeGraphEntry trace1Entry = new TimeGraphEntry(TRACE1.getName(), TRACE_START_TIME1, TRACE_END_TIME);
+        TimeGraphEntry trace2Entry = new TimeGraphEntry(TRACE2.getName(), TRACE_START_TIME2, TRACE_END_TIME);
+        TimeGraphEntry trace3Entry = new TimeGraphEntry(TRACE3.getName(), TRACE_START_TIME3, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry, trace2Entry, trace3Entry);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace3Entry, trace2Entry, trace1Entry);
+        runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry3, trace1Entry2, trace1Entry1);
+        runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+    }
 
     /**
      * Test {@link ControlFlowColumnComparators#BIRTH_TIME_COLUMN_COMPARATOR}
      *
-     * Note, taht when when birth time is the same: The order for that is
-     * process name, tid and ptid. Note that for secondary comparators the
+     * Note, that when when birth time is the same: The order for that is
+     * process name, TID and PTID. Note that for secondary comparators the
      * sort direction is not changed.
      */
-   @Test
-   public void birthTimeSecondaryTimeColumnComparatorTest() {
-       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
-       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
-
-       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
-       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
-       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
-
-   }
-
-   private static void runTest(ITimeGraphEntryComparator comparator, List<ControlFlowEntry> testVec, List<ControlFlowEntry> expectedDown, List<ControlFlowEntry> expectedUp) {
-       comparator.setDirection(SWT.DOWN);
-       Collections.sort(testVec, comparator);
-       assertEquals(expectedDown, testVec);
-
-       comparator.setDirection(SWT.UP);
-       Comparator<ITimeGraphEntry> reverseComp = comparator;
-       reverseComp = Collections.reverseOrder(reverseComp);
-       Collections.sort(testVec, reverseComp);
-       assertEquals(expectedUp, testVec);
-   }
-
-    private static List<ControlFlowEntry> getListOfEntries(ControlFlowEntry... entries) {
-        List<ControlFlowEntry> retList = new ArrayList<>();
-        for (ControlFlowEntry entry : entries) {
-            retList.add(entry);
-        }
-        return retList;
+    @Test
+    public void birthTimeSecondaryTimeColumnComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        List<TimeGraphEntry> testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<TimeGraphEntry> expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        List<TimeGraphEntry> expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+        trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME);
+        trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME);
+
+        testVec = Arrays.asList(trace1Entry2, trace1Entry3, trace1Entry1);
+        expectedDown = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        expectedUp = Arrays.asList(trace1Entry1, trace1Entry2, trace1Entry3);
+        runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
     }
 
+    private static void runTest(ITimeGraphEntryComparator comparator, List<TimeGraphEntry> testVec, List<TimeGraphEntry> expectedDown, List<TimeGraphEntry> expectedUp) {
+        comparator.setDirection(SWT.DOWN);
+        Collections.sort(testVec, comparator);
+        assertEquals(expectedDown, testVec);
+
+        comparator.setDirection(SWT.UP);
+        Comparator<ITimeGraphEntry> reverseComp = comparator;
+        reverseComp = Collections.reverseOrder(reverseComp);
+        Collections.sort(testVec, reverseComp);
+        assertEquals(expectedUp, testVec);
+    }
 
 }
index 282db08033860e3c3e3cd9b3db797f85af7834f0..b26f25ac8273f11a9017fecec8662de2b0b22fe4 100644 (file)
@@ -24,7 +24,6 @@ public class Messages extends NLS {
     public static String ControlFlowView_tidColumn;
     public static String ControlFlowView_ptidColumn;
     public static String ControlFlowView_processColumn;
-    public static String ControlFlowView_traceColumn;
 
     public static String ControlFlowView_stateTypeName;
     public static String ControlFlowView_multipleStates;
index 8098004332317fa4889b70b3043b24a3cf9b77f6..5d8f12927c322dfc18a03ceed340e9d9f24bfa1a 100644 (file)
@@ -15,7 +15,6 @@ ControlFlowView_threadPresentation=Thread Presentation
 ControlFlowView_tidColumn=TID
 ControlFlowView_ptidColumn=PTID
 ControlFlowView_processColumn=Process
-ControlFlowView_traceColumn=Trace
 
 ControlFlowView_stateTypeName=Process
 ControlFlowView_multipleStates=(multiple)
index 4d147258dab768a980747124cdf6143f2ec8b1e9..4455abef125ec008c889d6fe6e0fa814bf16c042 100644 (file)
@@ -43,13 +43,8 @@ public final class ControlFlowColumnComparators {
 
         @Override
         public int compare(@Nullable ITimeGraphEntry o1, @Nullable ITimeGraphEntry o2) {
-            /* First sort by trace */
-            int result = compareTrace(fDirection, o1, o2);
-
-            if (result == 0) {
-                /* Then sort by process name */
-                result = IControlFlowEntryComparator.PROCESS_NAME_COMPARATOR.compare(o1, o2);
-            }
+            /* First sort by process name */
+            int result = IControlFlowEntryComparator.PROCESS_NAME_COMPARATOR.compare(o1, o2);
             return compareList(result, fDirection, SECONDARY_COMPARATORS, o1, o2);
         }
 
@@ -78,13 +73,8 @@ public final class ControlFlowColumnComparators {
 
         @Override
         public int compare(@Nullable ITimeGraphEntry o1, @Nullable ITimeGraphEntry o2) {
-            /* First sort by trace */
-            int result = compareTrace(fDirection, o1, o2);
-
-            if (result == 0) {
-                /* Then sort by TID */
-                result = IControlFlowEntryComparator.TID_COMPARATOR.compare(o1, o2);
-            }
+            /* First sort by TID */
+            int result = IControlFlowEntryComparator.TID_COMPARATOR.compare(o1, o2);
             return compareList(result, fDirection, SECONDARY_COMPARATORS, o1, o2);
         }
 
@@ -114,12 +104,8 @@ public final class ControlFlowColumnComparators {
 
         @Override
         public int compare(@Nullable ITimeGraphEntry o1, @Nullable ITimeGraphEntry o2) {
-            /* First sort by trace */
-            int result = compareTrace(fDirection, o1, o2);
-            if (result == 0) {
-                /* Then sort by PTID */
-                result = IControlFlowEntryComparator.PTID_COMPARATOR.compare(o1, o2);
-            }
+            /* First sort by PTID */
+            int result = IControlFlowEntryComparator.PTID_COMPARATOR.compare(o1, o2);
             return compareList(result, fDirection, SECONDARY_COMPARATORS, o1, o2);
         }
 
@@ -148,12 +134,8 @@ public final class ControlFlowColumnComparators {
         @Override
         public int compare(@Nullable ITimeGraphEntry o1, @Nullable ITimeGraphEntry o2) {
 
-            int result = compareTrace(fDirection, o1, o2);
-
-            if (result == 0) {
-                /* Sort all child processes according to birth time. */
-                result = IControlFlowEntryComparator.BIRTH_TIME_COMPARATOR.compare(o1, o2);
-            }
+            /* Sort all child processes according to birth time. */
+            int result = IControlFlowEntryComparator.BIRTH_TIME_COMPARATOR.compare(o1, o2);
             return compareList(result, fDirection, SECONDARY_COMPARATORS, o1, o2);
         }
 
@@ -171,44 +153,6 @@ public final class ControlFlowColumnComparators {
         }
     };
 
-    /**
-     * Trace comparator. This compares first the trace, then the process birth
-     * time, the process name, the process TID and finally the process's parent
-     * TID.
-     */
-    public static final ITimeGraphEntryComparator TRACE_COLUMN_COMPARATOR = new ITimeGraphEntryComparator() {
-        private final List<Comparator<ITimeGraphEntry>> SECONDARY_COMPARATORS = init();
-        private int fDirection = SWT.DOWN;
-
-        @Override
-        public int compare(@Nullable ITimeGraphEntry o1, @Nullable ITimeGraphEntry o2) {
-            int result = IControlFlowEntryComparator.TRACE_COMPARATOR.compare(o1, o2);
-            return compareList(result, fDirection, SECONDARY_COMPARATORS, o1, o2);
-        }
-
-        @Override
-        public void setDirection(int direction) {
-            fDirection = direction;
-        }
-
-        private List<Comparator<ITimeGraphEntry>> init() {
-            ImmutableList.Builder<Comparator<ITimeGraphEntry>> builder = ImmutableList.builder();
-            builder.add(IControlFlowEntryComparator.BIRTH_TIME_COMPARATOR)
-                .add(IControlFlowEntryComparator.PROCESS_NAME_COMPARATOR)
-                .add(IControlFlowEntryComparator.TID_COMPARATOR)
-                .add(IControlFlowEntryComparator.PTID_COMPARATOR);
-            return builder.build();
-        }
-    };
-
-    private static int compareTrace(int direction, ITimeGraphEntry o1, ITimeGraphEntry o2) {
-        int result = IControlFlowEntryComparator.TRACE_COMPARATOR.compare(o1, o2);
-        if (direction == SWT.UP) {
-            result = -result;
-        }
-        return result;
-    }
-
     private static int compareList(int prevResult, int direction, List<Comparator<ITimeGraphEntry>> comps, ITimeGraphEntry o1, ITimeGraphEntry o2) {
         int result = prevResult;
         for (Comparator<ITimeGraphEntry> comparator : comps) {
index cfdfcf331603364de146177d5ba0c82bb50fef1a..0a1642be8c6e3b115677af183df3938037616550 100644 (file)
@@ -119,10 +119,7 @@ public class ControlFlowEntry extends TimeGraphEntry {
         if (pattern.matcher(Integer.toString(fThreadQuark)).find()) {
             return true;
         }
-        if (pattern.matcher(Utils.formatTime(getStartTime(), TimeFormat.CALENDAR, Resolution.NANOSEC)).find()) {
-            return true;
-        }
-        return pattern.matcher(fTrace.getName()).find();
+        return (pattern.matcher(Utils.formatTime(getStartTime(), TimeFormat.CALENDAR, Resolution.NANOSEC)).find());
     }
 
     @Override
index 9a63d869a7ca9ce7f9ef75010d80b43dfdcb3dec..e7b5d9bd24a145c1b26fb20ca2aa43259b9a58c6 100644 (file)
@@ -16,6 +16,7 @@
 package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.controlflow;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -88,14 +89,12 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
     private static final String TID_COLUMN = Messages.ControlFlowView_tidColumn;
     private static final String PTID_COLUMN = Messages.ControlFlowView_ptidColumn;
     private static final String BIRTH_TIME_COLUMN = Messages.ControlFlowView_birthTimeColumn;
-    private static final String TRACE_COLUMN = Messages.ControlFlowView_traceColumn;
 
     private static final String[] COLUMN_NAMES = new String[] {
             PROCESS_COLUMN,
             TID_COLUMN,
             PTID_COLUMN,
-            BIRTH_TIME_COLUMN,
-            TRACE_COLUMN
+            BIRTH_TIME_COLUMN
     };
 
     private static final String[] FILTER_COLUMN_NAMES = new String[] {
@@ -115,8 +114,7 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
         builder.add(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR)
             .add(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR)
             .add(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR)
-            .add(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR)
-            .add(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR);
+            .add(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR);
         List<Comparator<ITimeGraphEntry>> l = builder.build();
         COLUMN_COMPARATORS = l.toArray(new Comparator[l.size()]);
     }
@@ -214,8 +212,12 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
                     fFlatTraces.remove(parentTrace);
                     for (ITmfTrace trace : TmfTraceManager.getTraceSet(parentTrace)) {
                         final ITmfStateSystem ss = TmfStateSystemAnalysisModule.getStateSystem(trace, KernelAnalysisModule.ID);
-                        List<ControlFlowEntry> currentRootList = getEntryList(ss).stream().filter(e -> e instanceof ControlFlowEntry).map(e -> (ControlFlowEntry) e).collect(Collectors.toList());
-                        addEntriesToHierarchicalTree(currentRootList, parentTrace, ss);
+                        for (TimeGraphEntry traceEntry : getEntryList(ss)) {
+                            List<ControlFlowEntry> currentRootList = traceEntry.getChildren().stream()
+                                    .filter(e -> e instanceof ControlFlowEntry)
+                                    .map(e -> (ControlFlowEntry) e).collect(Collectors.toList());
+                            addEntriesToHierarchicalTree(currentRootList, traceEntry);
+                        }
                     }
                 }
                 refresh();
@@ -235,7 +237,9 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
                     fFlatTraces.add(parentTrace);
                     for (ITmfTrace trace : TmfTraceManager.getTraceSet(parentTrace)) {
                         final ITmfStateSystem ss = TmfStateSystemAnalysisModule.getStateSystem(trace, KernelAnalysisModule.ID);
-                        hierarchicalToFlatTree(parentTrace, ss);
+                        for (TimeGraphEntry traceEntry : getEntryList(ss)) {
+                            hierarchicalToFlatTree(traceEntry);
+                        }
                     }
                 }
                 refresh();
@@ -273,6 +277,12 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
 
         @Override
         public String getColumnText(Object element, int columnIndex) {
+            if (element instanceof TraceEntry) {
+                if (columnIndex == 0) {
+                    return ((TraceEntry) element).getName();
+                }
+                return ""; //$NON-NLS-1$
+            }
             ControlFlowEntry entry = (ControlFlowEntry) element;
 
             if (COLUMN_NAMES[columnIndex].equals(Messages.ControlFlowView_processColumn)) {
@@ -285,8 +295,6 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
                 }
             } else if (COLUMN_NAMES[columnIndex].equals(Messages.ControlFlowView_birthTimeColumn)) {
                 return Utils.formatTime(entry.getStartTime(), TimeFormat.CALENDAR, Resolution.NANOSEC);
-            } else if (COLUMN_NAMES[columnIndex].equals(Messages.ControlFlowView_traceColumn)) {
-                return entry.getTrace().getName();
             }
             return ""; //$NON-NLS-1$
         }
@@ -297,6 +305,12 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
 
         @Override
         public String getColumnText(Object element, int columnIndex) {
+            if (element instanceof TraceEntry) {
+                if (columnIndex == 0) {
+                    return ((TraceEntry) element).getName();
+                }
+                return ""; //$NON-NLS-1$
+            }
             ControlFlowEntry entry = (ControlFlowEntry) element;
 
             if (columnIndex == 0) {
@@ -309,6 +323,18 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
 
     }
 
+    private static class TraceEntry extends TimeGraphEntry {
+
+        public TraceEntry(String name, long startTime, long endTime) {
+            super(name, startTime, endTime);
+        }
+
+        @Override
+        public boolean hasTimeEvents() {
+            return false;
+        }
+    }
+
     @TmfSignalHandler
     @Override
     public void traceClosed(org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal signal) {
@@ -345,7 +371,9 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
         }
 
         final List<ControlFlowEntry> entryList = new ArrayList<>();
-        /** Map of view entries, key is a pair [threadId, cpuId] */
+        /** Map of trace entries */
+        Map<ITmfTrace, TraceEntry> traceEntryMap = new HashMap<>();
+        /** Map of control flow entries, key is a pair [threadId, cpuId] */
         final Map<Pair<Integer, Integer>, ControlFlowEntry> entryMap = new HashMap<>();
 
         long start = ssq.getStartTime();
@@ -364,6 +392,17 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
             if (start == end && !complete) { // when complete execute one last time regardless of end time
                 continue;
             }
+
+            TraceEntry aTraceEntry = traceEntryMap.get(trace);
+            if (aTraceEntry == null) {
+                aTraceEntry = new TraceEntry(trace.getName(), start, end + 1);
+                traceEntryMap.put(trace, aTraceEntry);
+                addToEntryList(parentTrace, ssq, Collections.singletonList(aTraceEntry));
+            } else {
+                aTraceEntry.updateEndTime(end + 1);
+            }
+            final TraceEntry traceEntry = aTraceEntry;
+
             final long resolution = Math.max(1, (end - ssq.getStartTime()) / getDisplayWidth());
             setEndTime(Math.max(getEndTime(), end + 1));
             final List<Integer> threadQuarks = ssq.getQuarks(Attributes.THREADS, "*"); //$NON-NLS-1$
@@ -455,9 +494,9 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
                     }
                     synchronized (fFlatTraces) {
                         if (fFlatTraces.contains(parentTrace)) {
-                            addEntriesToFlatTree(entryList, parentTrace, ssq);
+                            addEntriesToFlatTree(entryList, traceEntry);
                         } else {
-                            addEntriesToHierarchicalTree(entryList, parentTrace, ssq);
+                            addEntriesToHierarchicalTree(entryList, traceEntry);
                         }
                     }
                 }
@@ -466,7 +505,7 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
             queryFullStates(ssq, ssq.getStartTime(), end, resolution, monitor, new IQueryHandler() {
                 @Override
                 public void handle(@NonNull List<List<ITmfStateInterval>> fullStates, @Nullable List<ITmfStateInterval> prevFullState) {
-                    for (final TimeGraphEntry entry : getEntryList(ssq)) {
+                    for (final TimeGraphEntry entry : traceEntry.getChildren()) {
                         if (monitor.isCanceled()) {
                             return;
                         }
@@ -484,12 +523,12 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
     }
 
     /**
-     * Add entries to the traces's entry list in a flat fashion (no hierarchy).
+     * Add entries to the traces's child list in a flat fashion (no hierarchy).
      * If one entry has children, we do a depth first search to add each child
-     * to the trace's entry list and update the parent and child relations.
+     * to the trace's child list and update the parent and child relations.
      */
-    private void hierarchicalToFlatTree(ITmfTrace parentTrace, ITmfStateSystem ss) {
-        List<@NonNull TimeGraphEntry> rootList = getEntryList(ss);
+    private static void hierarchicalToFlatTree(TimeGraphEntry traceEntry) {
+        List<@NonNull TimeGraphEntry> rootList = traceEntry.getChildren();
         // We visit the children of every entry to add
         StreamFlattener<TimeGraphEntry> sf = new StreamFlattener<>(entry -> entry.getChildren().stream());
         Stream<TimeGraphEntry> allEntries = rootList.stream().flatMap(entry -> sf.flatten(entry));
@@ -502,33 +541,31 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
             entry.clearChildren();
         });
         rootListToAdd.forEach(entry -> {
-            entry.setParent(null);
+            traceEntry.addChild(entry);
             entry.clearChildren();
         });
-        addToEntryList(parentTrace, ss, rootListToAdd);
     }
 
     /**
-     * Add entries to the traces's entry list in a flat fashion (no hierarchy).
+     * Add entries to the traces's child list in a flat fashion (no hierarchy).
      */
-    private void addEntriesToFlatTree(List<@NonNull ControlFlowEntry> entryList, ITmfTrace parentTrace, ITmfStateSystem ss) {
-        List<TimeGraphEntry> rootList = getEntryList(ss);
-        List<@NonNull TimeGraphEntry> rootListToAdd = entryList.stream()
-                .filter(entry -> !rootList.contains(entry))
-                .collect(Collectors.toList());
-        addToEntryList(parentTrace, ss, rootListToAdd);
+    private static void addEntriesToFlatTree(List<@NonNull ControlFlowEntry> entryList, TimeGraphEntry traceEntry) {
+        List<TimeGraphEntry> rootList = traceEntry.getChildren();
+        for (ControlFlowEntry entry : entryList) {
+            if (!rootList.contains(entry)) {
+                traceEntry.addChild(entry);
+            }
+        }
     }
 
     /**
-     * Add entries to the trace's entry list in a hierarchical fashion.
+     * Add entries to the trace's child list in a hierarchical fashion.
      */
-    private void addEntriesToHierarchicalTree(List<ControlFlowEntry> entryList, ITmfTrace parentTrace, ITmfStateSystem ss) {
-        List<@NonNull TimeGraphEntry> rootListToAdd = new ArrayList<>();
-        List<TimeGraphEntry> rootListToRemove = new ArrayList<>();
-        List<TimeGraphEntry> rootList = getEntryList(ss);
+    private static void addEntriesToHierarchicalTree(List<ControlFlowEntry> entryList, TimeGraphEntry traceEntry) {
+        List<TimeGraphEntry> rootList = traceEntry.getChildren();
 
         for (ControlFlowEntry entry : entryList) {
-            boolean root = (entry.getParent() == null);
+            boolean root = (entry.getParent() == null || entry.getParent() == traceEntry);
             if (root && entry.getParentThreadId() > 0) {
                 for (ControlFlowEntry parent : entryList) {
                     /*
@@ -544,20 +581,17 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
                             entry.getEndTime() < parent.getStartTime())) {
                         parent.addChild(entry);
                         root = false;
-                        if (rootList != null && rootList.contains(entry)) {
-                            rootListToRemove.add(entry);
+                        if (rootList.contains(entry)) {
+                            traceEntry.removeChild(entry);
                         }
                         break;
                     }
                 }
             }
-            if (root && (rootList == null || !rootList.contains(entry))) {
-                rootListToAdd.add(entry);
+            if (root && (!rootList.contains(entry))) {
+                traceEntry.addChild(entry);
             }
         }
-
-        addToEntryList(parentTrace, ss, rootListToAdd);
-        removeFromEntryList(parentTrace, ss, rootListToRemove);
     }
 
     private void buildStatusEvents(ITmfTrace trace, ITmfTrace parentTrace, ITmfStateSystem ss, @NonNull List<List<ITmfStateInterval>> fullStates,
@@ -779,17 +813,18 @@ public class ControlFlowView extends AbstractStateSystemTimeGraphView {
         return list;
     }
 
-    private ControlFlowEntry findEntry(List<? extends ITimeGraphEntry> entryList, ITmfTrace trace, int threadId) {
-        for (ITimeGraphEntry entry : entryList) {
+    private ControlFlowEntry findEntry(List<TimeGraphEntry> entryList, ITmfTrace trace, int threadId) {
+        for (TimeGraphEntry entry : entryList) {
             if (entry instanceof ControlFlowEntry) {
                 ControlFlowEntry controlFlowEntry = (ControlFlowEntry) entry;
                 if (controlFlowEntry.getThreadId() == threadId && controlFlowEntry.getTrace() == trace) {
                     return controlFlowEntry;
-                } else if (entry.hasChildren()) {
-                    controlFlowEntry = findEntry(entry.getChildren(), trace, threadId);
-                    if (controlFlowEntry != null) {
-                        return controlFlowEntry;
-                    }
+                }
+            }
+            if (entry.hasChildren()) {
+                ControlFlowEntry controlFlowEntry = findEntry(entry.getChildren(), trace, threadId);
+                if (controlFlowEntry != null) {
+                    return controlFlowEntry;
                 }
             }
         }
index eaf69492360e0f092f5cd1d985599ff01230c305..ad633d5f935b1f37fbf31d75c1b04caafce1137a 100644 (file)
@@ -11,7 +11,6 @@ package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.controlflow
 import java.util.Comparator;
 
 import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
 
 /**
@@ -86,26 +85,4 @@ public interface IControlFlowEntryComparator {
         }
     };
 
-    /**
-     * Trace Comparator (uses trace start time and name)
-     */
-    Comparator<ITimeGraphEntry> TRACE_COMPARATOR = new Comparator<ITimeGraphEntry>() {
-        @Override
-        public int compare(@Nullable ITimeGraphEntry o1, @Nullable ITimeGraphEntry o2) {
-            if (o1 == null || o2 == null) {
-                throw new IllegalArgumentException();
-            }
-            int result = 0;
-            if ((o1 instanceof ControlFlowEntry) && (o2 instanceof ControlFlowEntry)) {
-                ITmfTrace trace1 = ((ControlFlowEntry) o1).getTrace();
-                ITmfTrace trace2 = ((ControlFlowEntry) o2).getTrace();
-                result = trace1.getStartTime().compareTo(trace2.getStartTime());
-                if (result == 0) {
-                    result = trace1.getName().compareTo(trace2.getName());
-                }
-            }
-            return result;
-        }
-    };
-
 }
index f3810752c0dd8079b7e76e35e6a098d2f450817e..fcce147d1f2693b0a560d535c100639233334910 100644 (file)
Binary files a/doc/org.eclipse.tracecompass.doc.user/doc/images/Cfv_global.png and b/doc/org.eclipse.tracecompass.doc.user/doc/images/Cfv_global.png differ
index f83d219fe448158b684c9ca188660e198b049396..51491dfa9262ea9fec436a13a81f16ee9a211ec4 100644 (file)
@@ -13,6 +13,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Paths;
 
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
@@ -59,6 +61,7 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
     // ------------------------------------------------------------------------
     // Constants
     // ------------------------------------------------------------------------
+    private static final String TRACE_NAME = "scp_dest";
     private static final String FILTER_ACTION = "Show View Filters";
     private static final String FILTER_DIALOG_TITLE = "Filter";
     private static final String UNCHECK_ALL = "Uncheck all";
@@ -72,7 +75,6 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
     private static final String PTID_COLUMN = "PTID";
     private static final String BIRTH_COLUMN = "Birth time";
     private static final int BIRTH_COLUMN_ID = 3;
-    private static final String TRACE_COLUMN = "Trace";
 
     private static final String SYSTEMD_PROCESS_NAME = "systemd";
     private static final long SYSTEMD_BIRTHTIME = 1361214078967531336L;
@@ -109,12 +111,12 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
             defaultPreferences.put(ITmfTimePreferencesConstants.TIME_ZONE, "GMT-05:00");
             TmfTimestampFormat.updateDefaultFormats();
 
-            String tracePath = FileLocator.toFileURL(CtfTestTrace.SYNC_DEST.getTraceURL()).getPath();
+            String tracePath = Paths.get(FileLocator.toFileURL(CtfTestTrace.SYNC_DEST.getTraceURL()).toURI()).toString();
             SWTBotUtils.openTrace(TRACE_PROJECT_NAME, tracePath, KERNEL_TRACE_TYPE);
             fViewBot = fBot.viewByTitle("Control Flow");
             fViewBot.show();
             fViewBot.setFocus();
-        } catch (IOException e) {
+        } catch (IOException | URISyntaxException e) {
             fail();
         }
     }
@@ -142,14 +144,13 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
         // Create a known state
         applyFilter();
         final SWTBotTree tree = fViewBot.bot().tree();
-        SWTBotTreeItem item = SWTBotUtils.getTreeItem(fBot, tree, SYSTEMD_PROCESS_NAME);
+        SWTBotTreeItem item = SWTBotUtils.getTreeItem(fBot, tree, TRACE_NAME, SYSTEMD_PROCESS_NAME);
         item.select();
 
         testProcessSorting(tree);
         testTidSorting(tree);
         testPidSorting(tree);
         testBirthtimeSorting(tree);
-        testTraceSorting(tree);
     }
 
     // ------------------------------------------------------------------------
@@ -178,7 +179,7 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
     }
 
     private static void checkFilterTreeItems(SWTBot bot, SWTBotTree treeBot, String process) {
-        SWTBotTreeItem item = SWTBotUtils.getTreeItem(bot, treeBot, process);
+        SWTBotTreeItem item = SWTBotUtils.getTreeItem(bot, treeBot, TRACE_NAME, process);
         item.select();
         bot.button(CHECK_SUBTREE).click();
         TreeCheckedCounter treeCheckCounter = new TreeCheckedCounter(treeBot);
@@ -244,25 +245,6 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
         clickColumn(tree, column, condition);
     }
 
-    /*
-     * Note: In this test only one trace is visualized in CFV.
-     * Sorting is done based on birth time (up direction).
-     * The implementation in CFV won't change the order when changing
-     * the direction.
-     */
-    private static void testTraceSorting(final SWTBotTree tree) {
-        SWTBotTreeColumn column = tree.header(TRACE_COLUMN);
-        String[] expected = { LTTNG_CONSUMER_PROCESS_NAME, SYSTEMD_PROCESS_NAME, KTHREAD_PROCESS_NAME };
-
-        /* Sort direction Up */
-        SWTBotTestCondition condition = getSortCondition(TRACE_COLUMN, PROCESS_COLUMN_ID, expected, tree, false);
-        clickColumn(tree, column, condition);
-
-        /* Sort direction Down */
-        condition = getSortCondition(TRACE_COLUMN, PROCESS_COLUMN_ID, expected, tree, false);
-        clickColumn(tree, column, condition);
-    }
-
     private static void clickColumn(final SWTBotTree tree, SWTBotTreeColumn processColumn, SWTBotTestCondition condition) {
         processColumn.click();
         fBot.waitUntil(condition);
@@ -272,7 +254,7 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
         return new SWTBotTestCondition() {
             @Override
             public boolean test() throws Exception {
-                SWTBotTreeItem[] items = tree.getAllItems();
+                SWTBotTreeItem[] items = tree.getTreeItem(TRACE_NAME).getItems();
                 if (reverse) {
                     for (int i = expected.length - 1; i > 0; i--) {
                         if (!expected[i].equals(items[expected.length - (i + 1)].cell(cell))) {
@@ -290,7 +272,7 @@ public class ControlFlowViewSortingTest extends KernelTestBase {
             }
             @Override
             public String getFailureMessage() {
-                return NLS.bind("Test Case: \'{0}\' failed!", testCase);
+                return NLS.bind("Test Case: {0} failed!", testCase);
             }
         };
     }
index 1e7bca28a03330b1e500e9343e8aba427aae7794..0a5a77fc830020143befd6d578daeb0b0315592f 100644 (file)
@@ -30,6 +30,8 @@ import org.eclipse.swtbot.swt.finder.results.VoidResult;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotLabel;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
+import org.eclipse.tracecompass.ctf.core.tests.shared.LttngKernelTraceGenerator;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
 import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
@@ -67,6 +69,7 @@ public class ControlFlowViewTest extends KernelTestBase {
     private static final String FOLLOW_CPU_FORWARD = "Follow CPU Forward";
     private static final String SELECT_PREVIOUS_EVENT = "Select Previous Event";
     private static final String SELECT_NEXT_EVENT = "Select Next Event";
+    private static final String SELECT_NEXT_PROCESS = "Select Next Process";
     private static final Keyboard KEYBOARD = KeyboardFactory.getSWTKeyboard();
     private static final @NonNull ITmfTimestamp START_TIME = TmfTimestamp.fromNanos(1368000272650993664L);
     private static final @NonNull ITmfTimestamp TID1_TIME1 = TmfTimestamp.fromNanos(1368000272651208412L);
@@ -130,6 +133,7 @@ public class ControlFlowViewTest extends KernelTestBase {
         /* select first item */
         final SWTBotTree tree = fViewBot.bot().tree();
         tree.pressShortcut(Keystrokes.HOME);
+        fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click();
 
         /* set focus on time graph */
         final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
@@ -253,7 +257,7 @@ public class ControlFlowViewTest extends KernelTestBase {
         TreeCheckedCounter treeCheckCounter = new TreeCheckedCounter(treeBot);
         // get how many items there are
         Integer checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals("default", 225, checked.intValue());
+        assertEquals("default", 226, checked.intValue());
         // test "uncheck all button"
         bot.button(UNCHECK_ALL).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
@@ -261,49 +265,52 @@ public class ControlFlowViewTest extends KernelTestBase {
         // test check active
         bot.button(CHECK_ACTIVE).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(CHECK_ACTIVE, 68, checked.intValue());
+        assertEquals(CHECK_ACTIVE, 69, checked.intValue());
         // test check all
         bot.button(CHECK_ALL).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(CHECK_ALL, 225, checked.intValue());
+        assertEquals(CHECK_ALL, 226, checked.intValue());
         // test uncheck inactive
         bot.button(UNCHECK_INACTIVE).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(UNCHECK_INACTIVE, 68, checked.intValue());
+        assertEquals(UNCHECK_INACTIVE, 69, checked.intValue());
         // test check selected
-        treeBot.select(1);
+        treeBot.getTreeItem(LttngKernelTraceGenerator.getName()).select("gnuplot");
         bot.button(UNCHECK_ALL).click();
         bot.button(CHECK_SELECTED).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(CHECK_SELECTED, 1, checked.intValue());
+        assertEquals(CHECK_SELECTED, 2, checked.intValue());
         // test check subtree
         bot.button(UNCHECK_ALL).click();
         bot.button(CHECK_SUBTREE).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(CHECK_SUBTREE, 1, checked.intValue());
+        assertEquals(CHECK_SUBTREE, 2, checked.intValue());
         // test uncheck selected
         bot.button(CHECK_ALL).click();
         bot.button(UNCHECK_SELECTED).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(UNCHECK_SELECTED, 224, checked.intValue());
+        assertEquals(UNCHECK_SELECTED, 225, checked.intValue());
         // test uncheck subtree
         bot.button(CHECK_ALL).click();
         bot.button(UNCHECK_SUBTREE).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals(UNCHECK_SELECTED, 224, checked.intValue());
+        assertEquals(UNCHECK_SELECTED, 225, checked.intValue());
         // test filter
         bot.button(UNCHECK_ALL).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
         assertEquals(0, checked.intValue());
         bot.text().setText("half-life 3");
-        fBot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.treeHasRows(treeBot, 25));
+        SWTBotTreeItem treeItem = treeBot.getTreeItem(LttngKernelTraceGenerator.getName());
+        treeItem.rowCount();
+        fBot.waitUntil(ConditionHelpers.treeItemCount(treeItem, 25));
         bot.button(CHECK_ALL).click();
         checked = UIThreadRunnable.syncExec(treeCheckCounter);
-        assertEquals("Filtered", 25, checked.intValue());
+        assertEquals("Filtered", 26, checked.intValue());
         bot.button("OK").click();
         treeBot = fViewBot.bot().tree();
+        treeItem = treeBot.getTreeItem(LttngKernelTraceGenerator.getName());
         for (int i = 0; i < 25; i++) {
-            assertEquals("Filtered Control flow view", "Half-life 3", treeBot.cell(i, 0));
+            assertEquals("Filtered Control flow view", "Half-life 3", treeItem.cell(i, 0));
         }
     }
 
@@ -324,6 +331,7 @@ public class ControlFlowViewTest extends KernelTestBase {
         /* select first item */
         final SWTBotTree tree = fViewBot.bot().tree();
         tree.pressShortcut(Keystrokes.HOME);
+        fViewBot.toolbarButton(SELECT_NEXT_PROCESS).click();
 
         /* set focus on time graph */
         final TimeGraphControl timegraph = fViewBot.bot().widget(WidgetOfType.widgetOfType(TimeGraphControl.class));
index b1233907700ac00f449f3d2f79b0b471c2df6d23..35faa84a9007d6faa2630e46781c18af5f8acaeb 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2015 Ericsson
+ * Copyright (c) 2013, 2016 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -100,7 +100,7 @@ public final class ConditionHelpers {
 
             @Override
             public String getFailureMessage() {
-                return NLS.bind("No child of tree {0} found with text '{1}'. Child items: {2}",
+                return NLS.bind("No child of tree {0} found with text {1}. Child items: {2}",
                         new String[] { tree.toString(), name, Arrays.toString(tree.getAllItems()) });
             }
         };
@@ -189,6 +189,31 @@ public final class ConditionHelpers {
         };
     }
 
+    /**
+     * Condition to check if the number of direct children of the
+     * provided tree item equals the specified count.
+     *
+     * @param treeItem
+     *            the SWTBot tree item
+     * @param count
+     *            the expected count
+     * @return ICondition for verification
+     */
+    public static ICondition treeItemCount(final SWTBotTreeItem treeItem, int count) {
+        return new SWTBotTestCondition() {
+            @Override
+            public boolean test() throws Exception {
+                return treeItem.rowCount() == count;
+            }
+
+            @Override
+            public String getFailureMessage() {
+                return NLS.bind("Tree item count: {0} expected: {1}",
+                        treeItem.rowCount(), count);
+            }
+        };
+    }
+
     /**
      * Checks if the wizard's shell is null
      *
index da35170fc2e5bf7d5b10761a6c45957d92cecff4..4ddb9a1d04866bd2ba29a894cf3d31bcf39520fb 100644 (file)
@@ -96,7 +96,7 @@ public class TimeGraphEntry implements ITimeGraphEntry {
      *
      * @since 2.0
      */
-    public void clearChildren() {
+    public synchronized void clearChildren() {
         fChildren.clear();
     }
 
@@ -286,6 +286,18 @@ public class TimeGraphEntry implements ITimeGraphEntry {
         fChildren.add(index, child);
     }
 
+    /**
+     * Remove a child entry from this one.
+     *
+     * @param child
+     *            The child entry
+     * @since 2.0
+     */
+    public synchronized void removeChild(@NonNull TimeGraphEntry child) {
+        child.setParent(null);
+        fChildren.remove(child);
+    }
+
     /**
      * Sort the children of this entry using the provided comparator. Subsequent
      * calls to {@link #addChild(TimeGraphEntry)} will use this comparator to
This page took 0.046378 seconds and 5 git commands to generate.