From 35c160d986fb2ecbbf323ebfb6f4beee28940a14 Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Thu, 4 Apr 2013 14:31:30 -0400 Subject: [PATCH] tmf: Merge the two statesystem-getting methods into one Use Collections.unmodifiableMap() to return a map directly, instead of using two separate methods. Also changed the declared type to a LinkedHashMap, so that the order of iteration remains constant. Change-Id: I876be06ea550d1244da87215e58fddee95f6de3d Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/11659 Tested-by: Hudson CI Reviewed-by: Patrick Tasse IP-Clean: Patrick Tasse --- .../ControlFlowPresentationProvider.java | 4 ++-- .../ui/views/controlflow/ControlFlowView.java | 8 +++---- .../ResourcesPresentationProvider.java | 8 +++---- .../ui/views/resources/ResourcesView.java | 8 +++---- .../core/tests/trace/TmfExperimentTest.java | 11 +--------- .../tmf/core/tests/trace/TmfTraceTest.java | 17 +++++++------- .../linuxtools/tmf/core/trace/ITmfTrace.java | 22 ++++++------------- .../linuxtools/tmf/core/trace/TmfTrace.java | 18 +++++---------- 8 files changed, 36 insertions(+), 60 deletions(-) diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java index a7e5b754db..f1b51d05f2 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java +++ b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java @@ -111,7 +111,7 @@ public class ControlFlowPresentationProvider extends TimeGraphPresentationProvid Map retMap = new LinkedHashMap(); if (event instanceof ControlFlowEvent) { ControlFlowEntry entry = (ControlFlowEntry) event.getEntry(); - ITmfStateSystem ssq = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); int tid = entry.getThreadId(); try { @@ -172,7 +172,7 @@ public class ControlFlowPresentationProvider extends TimeGraphPresentationProvid return; } ControlFlowEntry entry = (ControlFlowEntry) event.getEntry(); - ITmfStateSystem ss = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ss = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); int status = ((ControlFlowEvent) event).getStatus(); if (status != StateValues.PROCESS_STATUS_RUN_SYSCALL) { return; diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java index c45a25bc75..8c1d147d64 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java +++ b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java @@ -518,7 +518,7 @@ public class ControlFlowView extends TmfView { } if (trace instanceof CtfKernelTrace) { CtfKernelTrace ctfKernelTrace = (CtfKernelTrace) trace; - ITmfStateSystem ssq = ctfKernelTrace.getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = ctfKernelTrace.getStateSystems().get(CtfKernelTrace.STATE_ID); if (time >= ssq.getStartTime() && time <= ssq.getCurrentEndTime()) { List currentThreadQuarks = ssq.getQuarks(Attributes.CPUS, "*", Attributes.CURRENT_THREAD); //$NON-NLS-1$ for (int currentThreadQuark : currentThreadQuarks) { @@ -624,7 +624,7 @@ public class ControlFlowView extends TmfView { if (aTrace instanceof CtfKernelTrace) { ArrayList entryList = new ArrayList(); CtfKernelTrace ctfKernelTrace = (CtfKernelTrace) aTrace; - ITmfStateSystem ssq = ctfKernelTrace.getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = ctfKernelTrace.getStateSystems().get(CtfKernelTrace.STATE_ID); if (!ssq.waitUntilBuilt()) { return; } @@ -736,7 +736,7 @@ public class ControlFlowView extends TmfView { } private void buildStatusEvents(ITmfTrace trace, ControlFlowEntry entry, IProgressMonitor monitor) { - ITmfStateSystem ssq = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); long start = ssq.getStartTime(); long end = ssq.getCurrentEndTime() + 1; long resolution = Math.max(1, (end - start) / fDisplayWidth); @@ -764,7 +764,7 @@ public class ControlFlowView extends TmfView { if (realEnd <= realStart) { return null; } - ITmfStateSystem ssq = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); List eventList = null; try { int statusQuark = ssq.getQuarkRelative(entry.getThreadQuark(), Attributes.STATUS); diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java index 77fa8fbd7e..1aaf5ad87a 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java +++ b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java @@ -183,7 +183,7 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider if (status == StateValues.CPU_STATUS_IRQ) { // In IRQ state get the IRQ that caused the interruption ResourcesEntry entry = (ResourcesEntry) event.getEntry(); - ITmfStateSystem ss = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ss = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); int cpu = entry.getId(); try { @@ -212,7 +212,7 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider } else if (status == StateValues.CPU_STATUS_SOFTIRQ) { // In SOFT_IRQ state get the SOFT_IRQ that caused the interruption ResourcesEntry entry = (ResourcesEntry) event.getEntry(); - ITmfStateSystem ss = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ss = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); int cpu = entry.getId(); try { @@ -241,7 +241,7 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider } else if (status == StateValues.CPU_STATUS_RUN_USERMODE || status == StateValues.CPU_STATUS_RUN_SYSCALL){ // In running state get the current tid ResourcesEntry entry = (ResourcesEntry) event.getEntry(); - ITmfStateSystem ssq = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); try { retMap.put(Messages.ResourcesView_attributeHoverTime, Utils.formatTime(hoverTime, TimeFormat.CALENDAR, Resolution.NANOSEC)); @@ -300,7 +300,7 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider return; } ResourcesEntry entry = (ResourcesEntry) event.getEntry(); - ITmfStateSystem ss = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ss = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); long time = event.getTime(); try { while (time < event.getTime() + event.getDuration()) { diff --git a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java index cb41adbed7..de062eafa6 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java +++ b/org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java @@ -267,7 +267,7 @@ public class ResourcesView extends TmfView { } long resolution = Math.max(1, (fZoomEndTime - fZoomStartTime) / fDisplayWidth); for (TraceEntry traceEntry : fZoomEntryList) { - if (!traceEntry.fKernelTrace.getStateSystem(CtfKernelTrace.STATE_ID).waitUntilBuilt()) { + if (!traceEntry.fKernelTrace.getStateSystems().get(CtfKernelTrace.STATE_ID).waitUntilBuilt()) { return; } for (ITimeGraphEntry child : traceEntry.getChildren()) { @@ -493,7 +493,7 @@ public class ResourcesView extends TmfView { } if (aTrace instanceof CtfKernelTrace) { CtfKernelTrace ctfKernelTrace = (CtfKernelTrace) aTrace; - ITmfStateSystem ssq = ctfKernelTrace.getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = ctfKernelTrace.getStateSystems().get(CtfKernelTrace.STATE_ID); if (!ssq.waitUntilBuilt()) { return; } @@ -543,7 +543,7 @@ public class ResourcesView extends TmfView { return; } CtfKernelTrace ctfKernelTrace = traceEntry.getTrace(); - ITmfStateSystem ssq = ctfKernelTrace.getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = ctfKernelTrace.getStateSystems().get(CtfKernelTrace.STATE_ID); long startTime = ssq.getStartTime(); long endTime = ssq.getCurrentEndTime() + 1; long resolution = (endTime - startTime) / fDisplayWidth; @@ -558,7 +558,7 @@ public class ResourcesView extends TmfView { private static List getEventList(ResourcesEntry entry, long startTime, long endTime, long resolution, boolean includeNull, IProgressMonitor monitor) { - ITmfStateSystem ssq = entry.getTrace().getStateSystem(CtfKernelTrace.STATE_ID); + ITmfStateSystem ssq = entry.getTrace().getStateSystems().get(CtfKernelTrace.STATE_ID); final long realStart = Math.max(startTime, ssq.getStartTime()); final long realEnd = Math.min(endTime, ssq.getCurrentEndTime() + 1); if (realEnd <= realStart) { diff --git a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java index 34537deef5..15e06d87fc 100644 --- a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java +++ b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java @@ -17,7 +17,6 @@ package org.eclipse.linuxtools.tmf.core.tests.trace; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -25,7 +24,6 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; -import java.util.Collection; import java.util.Vector; import org.eclipse.core.resources.IFile; @@ -185,17 +183,10 @@ public class TmfExperimentTest { @Test public void testGetStateSystem() { /* There should not be any experiment-specific state system */ - ITmfStateSystem ss = fExperiment.getStateSystem("something"); + ITmfStateSystem ss = fExperiment.getStateSystems().get("something"); assertNull(ss); } - @Test - public void testListStateSystem() { - Collection sss = fExperiment.listStateSystems(); - assertNotNull(sss); - assertEquals(0, sss.size()); - } - // ------------------------------------------------------------------------ // seekEvent by location // ------------------------------------------------------------------------ diff --git a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java index 2210c2db3e..3a1ee1130d 100644 --- a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java +++ b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java @@ -16,7 +16,6 @@ package org.eclipse.linuxtools.tmf.core.tests.trace; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -25,7 +24,7 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; -import java.util.Collection; +import java.util.Map; import java.util.Vector; import org.eclipse.core.runtime.FileLocator; @@ -548,15 +547,17 @@ public class TmfTraceTest { @Test public void testGetStateSystem() { /* There should be no state system registered so far */ - ITmfStateSystem ss = fTrace.getStateSystem("something"); + ITmfStateSystem ss = fTrace.getStateSystems().get("something"); assertNull(ss); } - @Test - public void testListStateSystem() { - Collection sss = fTrace.listStateSystems(); - assertNotNull(sss); - assertEquals(0, sss.size()); + /** + * Make sure the returned map is unmodifiable. + */ + @Test(expected=UnsupportedOperationException.class) + public void testGetStateSystem_readOnly() { + Map sss = fTrace.getStateSystems(); + sss.put("something", null); } // ------------------------------------------------------------------------ diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java index 7849328870..8ea4666ff9 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java @@ -13,7 +13,8 @@ package org.eclipse.linuxtools.tmf.core.trace; -import java.util.Collection; +import java.util.Collections; +import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -182,24 +183,15 @@ public interface ITmfTrace extends ITmfDataProvider { public ITmfStatistics getStatistics(); /** - * Retrieve a state system that belongs to this trace + * Return the map of state systems associated with this trace. * - * @param id - * The ID of the state system to retrieve. - * @return The state system that is associated with this trace and ID, or - * 'null' if such a match doesn't exist. - * @since 2.0 - */ - public ITmfStateSystem getStateSystem(String id); - - /** - * Return the list of existing state systems registered with this trace. + * This view should be read-only (implementations should use + * {@link Collections#unmodifiableMap}). * - * @return A Collection view of the available state systems. The collection - * could be empty, but should not be null. + * @return The map of state systems * @since 2.0 */ - public Collection listStateSystems(); + public Map getStateSystems(); /** * If a state system is not build by the trace itself, it's possible to diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java index dac5301261..5fc15d9c77 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java @@ -15,8 +15,8 @@ package org.eclipse.linuxtools.tmf.core.trace; import java.io.File; -import java.util.Collection; -import java.util.HashMap; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.Map; import org.eclipse.core.resources.IResource; @@ -114,7 +114,7 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace { * @since 2.0 */ protected final Map fStateSystems = - new HashMap(); + new LinkedHashMap(); // ------------------------------------------------------------------------ // Construction @@ -405,16 +405,8 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace { * @since 2.0 */ @Override - public final ITmfStateSystem getStateSystem(String id) { - return fStateSystems.get(id); - } - - /** - * @since 2.0 - */ - @Override - public final Collection listStateSystems() { - return fStateSystems.keySet(); + public final Map getStateSystems() { + return Collections.unmodifiableMap(fStateSystems); } /** -- 2.34.1