tmf: Update TmfExperiment to new API in ITmfEventProvider
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Wed, 2 Apr 2014 20:11:16 +0000 (16:11 -0400)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Wed, 10 Dec 2014 21:04:06 +0000 (16:04 -0500)
Change-Id: I3ab5f0c8c731921674e693622e5c92265a165ae9
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/35970
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/DsfGdbAdaptor.java
org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventsTable.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfExperimentTest.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/component/TmfEventProvider.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTraceManager.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/experiment/TmfExperiment.java
org.eclipse.tracecompass.tmf.ctf.core.tests/perf/org/eclipse/tracecompass/tmf/ctf/core/tests/perf/experiment/ExperimentBenchmark.java
org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/analysis/StreamListAnalysis.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/editors/TmfEventsEditor.java

index f13192abf599def62f2cb915e3ff16eab1d71542..e3c77c301b11acdd83db38f2a88a0a6be4e46229 100644 (file)
@@ -839,9 +839,10 @@ public class DsfGdbAdaptor {
                                     }
                                 } else if (trace instanceof TmfExperiment) {
                                     TmfExperiment experiment = (TmfExperiment) trace;
-                                    int nbTraces = experiment.getTraces().length;
+                                    List<ITmfTrace> expTraces = experiment.getTraces();
+                                    int nbTraces = expTraces.size();
                                     for (int i = 0; i < nbTraces; i++) {
-                                        GdbTrace gdbTrace = (GdbTrace) experiment.getTraces()[i];
+                                        GdbTrace gdbTrace = (GdbTrace) expTraces.get(i);
                                         if (gdbTrace.getDsfSessionId().equals(sessionId)) {
                                             wbPage.bringToTop(editor);
                                             if (recordId != -1) {
index f69017d2b6e3b4363af513675b3ea68f3346eca6..6efa4c506ddaf54b7f4b5c25aeaa3326dd9c5e76 100644 (file)
@@ -12,6 +12,8 @@
 
 package org.eclipse.tracecompass.internal.gdbtrace.ui.views.events;
 
+import java.util.List;
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -95,8 +97,9 @@ public class GdbEventsTable extends TmfEventsTable {
             fSelectedFrame = 0;
         } else if (trace instanceof TmfExperiment) {
             TmfExperiment experiment = (TmfExperiment) trace;
-            if (experiment.getTraces().length > 0) {
-                fSelectedTrace = (GdbTrace) experiment.getTraces()[0];
+            List<ITmfTrace> expTraces = experiment.getTraces();
+            if (!expTraces.isEmpty()) {
+                fSelectedTrace = (GdbTrace) expTraces.get(0);
                 fSelectedFrame = 0;
             }
         }
index af6a2d3e528b5030da2a2aa69b565d62cdf55fd4..008d5826c6d7a2f3e11986761a4c0b3a7b936080 100644 (file)
@@ -136,7 +136,7 @@ public class TmfExperimentTest {
         final long nbExperimentEvents = fExperiment.getNbEvents();
         assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
 
-        final long nbTraceEvents = fExperiment.getTraces()[0].getNbEvents();
+        final long nbTraceEvents = fExperiment.getTraces().get(0).getNbEvents();
         assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
 
         final TmfTimeRange timeRange = fExperiment.getTimeRange();
@@ -164,7 +164,7 @@ public class TmfExperimentTest {
         final long nbExperimentEvents = fExperiment.getNbEvents();
         assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
 
-        final long nbTraceEvents = fExperiment.getTraces()[0].getNbEvents();
+        final long nbTraceEvents = fExperiment.getTraces().get(0).getNbEvents();
         assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
 
         final TmfTimeRange timeRange = fExperiment.getTimeRange();
@@ -222,7 +222,7 @@ public class TmfExperimentTest {
         TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT,
                 null, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
         ITmfContext context = experiment.seekEvent((TmfExperimentLocation) null);
-        assertNull("seekEvent", context);
+        validateContextRanks(context);
         experiment.dispose();
     }
 
index 71f31be36eec16f6bf8399e68b9d7debdb936c36..bfea564e29fe6f50290f61ac2b421da273fbc4c8 100644 (file)
@@ -574,6 +574,7 @@ public abstract class TmfEventProvider extends TmfComponent implements ITmfEvent
         if (!(child instanceof TmfEventProvider)) {
             throw new IllegalArgumentException();
         }
+        child.setParent(this);
         fChildren.add((TmfEventProvider)child);
     }
 
index b13fb41baeeb6cd94c9c11d79571d8b04247c6af..78a75f37d5c29aaec11a316b7168c9367066eae2 100644 (file)
@@ -16,7 +16,6 @@ package org.eclipse.tracecompass.tmf.core.trace;
 
 import java.io.File;
 import java.net.URISyntaxException;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -233,8 +232,8 @@ public final class TmfTraceManager {
         }
         if (trace instanceof TmfExperiment) {
             TmfExperiment exp = (TmfExperiment) trace;
-            ITmfTrace[] traces = exp.getTraces();
-            Set<ITmfTrace> alltraces = new LinkedHashSet<>(Arrays.asList(traces));
+            List<ITmfTrace> traces = exp.getTraces();
+            Set<ITmfTrace> alltraces = new LinkedHashSet<>(traces);
             alltraces.add(exp);
             return alltraces;
         }
@@ -515,9 +514,9 @@ public final class TmfTraceManager {
      */
     private static String getTemporaryDir(ITmfTrace trace) {
         String pathName = getTemporaryDirPath() +
-            File.separator +
-            trace.getName() +
-            File.separator;
+                File.separator +
+                trace.getName() +
+                File.separator;
         File dir = new File(pathName);
         if (!dir.exists()) {
             dir.mkdirs();
index be89a00791975d172f5ede4e06121c4a2a9d9feb..4817ac90a8bb5ad59d4d77f630c4cde5ff5b6ad9 100644 (file)
@@ -20,8 +20,8 @@ package org.eclipse.tracecompass.tmf.core.trace.experiment;
 
 import java.io.File;
 import java.nio.ByteBuffer;
-import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -37,7 +37,6 @@ import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfExperiment
 import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfExperimentLocation;
 import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfLocationArray;
 import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
-import org.eclipse.tracecompass.tmf.core.component.ITmfEventProvider;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
 import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest;
@@ -102,11 +101,6 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
     // Attributes
     // ------------------------------------------------------------------------
 
-    /**
-     * The set of traces that constitute the experiment
-     */
-    protected ITmfTrace[] fTraces;
-
     /**
      * The set of traces that constitute the experiment
      */
@@ -220,7 +214,6 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
         // traces have to be set before super.initialize()
         if (traces != null) {
             // initialize
-            fTraces = new ITmfTrace[0];
             for (ITmfTrace trace : traces) {
                 if (trace != null) {
                     addChild(trace);
@@ -256,8 +249,8 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
      *
      * @return The array of contained traces
      */
-    public ITmfTrace[] getTraces() {
-        return fTraces;
+    public List<ITmfTrace> getTraces() {
+        return getChildren(ITmfTrace.class);
     }
 
     /**
@@ -287,7 +280,7 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
     public synchronized ITmfContext armRequest(final ITmfEventRequest request) {
 
         // Make sure we have something to read from
-        if (fTraces.length == 0) {
+        if (getChildren().isEmpty()) {
             return null;
         }
 
@@ -316,32 +309,29 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
             return null; // Throw an exception?
         }
 
-        // Make sure we have something to read from
-        if (fTraces == null) {
-            return null;
-        }
+        int length = getNbChildren();
 
         // Initialize the location array if necessary
         TmfLocationArray locationArray = ((location == null) ?
-                new TmfLocationArray(fTraces.length) :
+                new TmfLocationArray(length) :
                 ((TmfExperimentLocation) location).getLocationInfo());
 
         ITmfLocation[] locations = locationArray.getLocations();
         long[] ranks = locationArray.getRanks();
 
         // Create and populate the context's traces contexts
-        final TmfExperimentContext context = new TmfExperimentContext(fTraces.length);
+        final TmfExperimentContext context = new TmfExperimentContext(length);
 
         // Position the traces
         long rank = 0;
-        for (int i = 0; i < fTraces.length; i++) {
+        for (int i = 0; i < length; i++) {
             // Get the relevant trace attributes
-            final ITmfContext traceContext = fTraces[i].seekEvent(locations[i]);
+            final ITmfContext traceContext = ((ITmfTrace) getChild(i)).seekEvent(locations[i]);
             context.setContext(i, traceContext);
             traceContext.setRank(ranks[i]);
             // update location after seek
             locations[i] = traceContext.getLocation();
-            context.setEvent(i, fTraces[i].getNext(traceContext));
+            context.setEvent(i, ((ITmfTrace) getChild(i)).getNext(traceContext));
             rank += ranks[i];
         }
 
@@ -407,8 +397,10 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
             return null; // Throw an exception?
         }
 
+        int length = getNbChildren();
+
         // Make sure that we have something to read from
-        if (fTraces == null) {
+        if (length == 0) {
             return null;
         }
 
@@ -419,15 +411,16 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
         final int lastTrace = expContext.getLastTrace();
         if (lastTrace != TmfExperimentContext.NO_TRACE) {
             final ITmfContext traceContext = expContext.getContext(lastTrace);
-            expContext.setEvent(lastTrace, fTraces[lastTrace].getNext(traceContext));
+            expContext.setEvent(lastTrace, ((ITmfTrace) getChild(lastTrace)).getNext(traceContext));
             expContext.setLastTrace(TmfExperimentContext.NO_TRACE);
         }
 
         // Scan the candidate events and identify the "next" trace to read from
         int trace = TmfExperimentContext.NO_TRACE;
         ITmfTimestamp timestamp = TmfTimestamp.BIG_CRUNCH;
-        for (int i = 0; i < fTraces.length; i++) {
+        for (int i = 0; i < length; i++) {
             final ITmfEvent event = expContext.getEvent(i);
+
             if (event != null && event.getTimestamp() != null) {
                 final ITmfTimestamp otherTS = event.getTimestamp();
                 if (otherTS.compareTo(timestamp) < 0) {
@@ -468,13 +461,15 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
     @Override
     public ITmfTimestamp getInitialRangeOffset() {
 
-        if ((fTraces == null) || (fTraces.length == 0)) {
+        List<ITmfTrace> children = getChildren(ITmfTrace.class);
+
+        if (children.isEmpty()) {
             return super.getInitialRangeOffset();
         }
 
         ITmfTimestamp initTs = TmfTimestamp.BIG_CRUNCH;
-        for (int i = 0; i < fTraces.length; i++) {
-            ITmfTimestamp ts = fTraces[i].getInitialRangeOffset();
+        for (ITmfTrace trace : children) {
+            ITmfTimestamp ts = (trace).getInitialRangeOffset();
             if (ts.compareTo(initTs) < 0) {
                 initTs = ts;
             }
@@ -582,32 +577,6 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
         return "[TmfExperiment (" + getName() + ")]";
     }
 
-    // ------------------------------------------------------------------------
-    // ITmfCompositeComponent
-    // ------------------------------------------------------------------------
-
-    /**
-     * @since 3.0
-     */
-    @Override
-    public void addChild(ITmfEventProvider child) {
-        if (child instanceof ITmfTrace) {
-            super.addChild(child);
-            child.setParent(this);
-
-            // Cache the children in an array for performance reasons
-            if ((fTraces == null) || (fTraces.length == 0)) {
-                fTraces = new ITmfTrace[] { (ITmfTrace) child };
-            } else {
-                ITmfTrace[] tmpArray = Arrays.copyOf(fTraces, fTraces.length + 1);
-                tmpArray[fTraces.length] = (ITmfTrace) child;
-                fTraces = tmpArray;
-            }
-            return;
-        }
-        throw new IllegalArgumentException();
-    }
-
     // ------------------------------------------------------------------------
     // Streaming support
     // ------------------------------------------------------------------------
@@ -650,7 +619,8 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
                     if (!getIndexer().isIndexing()) {
                         ITmfTimestamp startTimestamp = TmfTimestamp.BIG_CRUNCH;
                         ITmfTimestamp endTimestamp = TmfTimestamp.BIG_BANG;
-                        for (final ITmfTrace trace : fTraces) {
+
+                        for (final ITmfTrace trace : getChildren(ITmfTrace.class)) {
                             if (trace.getStartTime().compareTo(startTimestamp) < 0) {
                                 startTimestamp = trace.getStartTime();
                             }
@@ -685,7 +655,7 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
     @Override
     public long getStreamingInterval() {
         long interval = 0;
-        for (final ITmfTrace trace : fTraces) {
+        for (final ITmfTrace trace : getChildren(ITmfTrace.class)) {
             interval = Math.max(interval, trace.getStreamingInterval());
         }
         return interval;
@@ -718,22 +688,21 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
     public synchronized int getCheckpointSize() {
         int totalCheckpointSize = 0;
         try {
-            if (fTraces != null) {
-                for (final ITmfTrace trace : fTraces) {
-                    if (!(trace instanceof ITmfPersistentlyIndexable)) {
-                        return 0;
-                    }
+            List<ITmfTrace> children = getChildren(ITmfTrace.class);
+            for (ITmfTrace trace : children) {
+                if (!(trace instanceof ITmfPersistentlyIndexable)) {
+                    return 0;
+                }
 
-                    ITmfPersistentlyIndexable persistableIndexTrace = (ITmfPersistentlyIndexable) trace;
-                    int currentTraceCheckpointSize = persistableIndexTrace.getCheckpointSize();
-                    if (currentTraceCheckpointSize <= 0) {
-                        return 0;
-                    }
-                    totalCheckpointSize += currentTraceCheckpointSize;
-                    // each entry in the TmfLocationArray has a rank in addition
-                    // of the location
-                    totalCheckpointSize += 8;
+                ITmfPersistentlyIndexable persistableIndexTrace = (ITmfPersistentlyIndexable) trace;
+                int currentTraceCheckpointSize = persistableIndexTrace.getCheckpointSize();
+                if (currentTraceCheckpointSize <= 0) {
+                    return 0;
                 }
+                totalCheckpointSize += currentTraceCheckpointSize;
+                // each entry in the TmfLocationArray has a rank in addition
+                // of the location
+                totalCheckpointSize += 8;
             }
         } catch (UnsupportedOperationException e) {
             return 0;
@@ -747,10 +716,12 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
      */
     @Override
     public ITmfLocation restoreLocation(ByteBuffer bufferIn) {
-        ITmfLocation[] locations = new ITmfLocation[fTraces.length];
-        long[] ranks = new long[fTraces.length];
-        for (int i = 0; i < fTraces.length; ++i) {
-            final ITmfTrace trace = fTraces[i];
+        List<ITmfTrace> children = getChildren(ITmfTrace.class);
+        int length = children.size();
+        ITmfLocation[] locations = new ITmfLocation[length];
+        long[] ranks = new long[length];
+        for (int i = 0; i < length; ++i) {
+            final ITmfTrace trace = children.get(i);
             locations[i] = ((ITmfPersistentlyIndexable) trace).restoreLocation(bufferIn);
             ranks[i] = bufferIn.getLong();
         }
@@ -758,5 +729,4 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPers
         TmfExperimentLocation l = new TmfExperimentLocation(arr);
         return l;
     }
-
 }
index 12e49717efc7c89286f1200793e820c496127ea8..39a4ef62be0a6fefdda11224b5d97fcd6264e623 100644 (file)
@@ -75,18 +75,18 @@ public class ExperimentBenchmark {
 
                 init(numTraces);
                 fExperiment.sendRequest(expReq);
-                ITmfTrace[] traces = fExperiment.getTraces();
+                List<ITmfTrace> traces = fExperiment.getTraces();
                 for (int i = 0; i < numTraces; i++) {
                     traceReq[i] = new InnerEventRequest(ITmfEvent.class, 0, ITmfEventRequest.ALL_DATA, ExecutionType.BACKGROUND);
-                    traces[i].sendRequest(traceReq[i]);
+                    traces.get(i).sendRequest(traceReq[i]);
                 }
 
                 pm.start();
                 waitForRequest(expReq, traceReq);
                 pm.stop();
 
-                for (int i = 0; i < traces.length; i++) {
-                    if (!expReq.isTraceHandled(traces[i])) {
+                for (int i = 0; i < traces.size(); i++) {
+                    if (!expReq.isTraceHandled(traces.get(i))) {
                         System.err.println("Trace " + i + " not handled!");
                     }
                 }
index 3dac79ada9185e0c9abc06f9cd9e72bcc448cdea..7978bda64b5dfd9288824bc7495efb01a1d8ea82 100644 (file)
@@ -13,6 +13,7 @@
 package org.eclipse.tracecompass.internal.tmf.pcap.core.analysis;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -74,9 +75,9 @@ public class StreamListAnalysis extends TmfAbstractAnalysisModule {
 
         // Trace is TmfExperiment. Check if it has a PcapTrace.
         TmfExperiment experiment = (TmfExperiment) trace;
-        ITmfTrace[] traces = experiment.getTraces();
-        for (int i = 0; i < traces.length; i++) {
-            if (traces[i] instanceof PcapTrace) {
+        List<ITmfTrace> traces = experiment.getTraces();
+        for (ITmfTrace expTrace : traces) {
+            if (expTrace instanceof PcapTrace) {
                 return true;
             }
         }
index 819ce3874561fbe5a9344346256dca244775622e..8c831d9aa3500e6e1c0921c06bd860898aa29c70 100644 (file)
@@ -13,6 +13,8 @@
 
 package org.eclipse.tracecompass.tmf.ui.editors;
 
+import java.util.List;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IMarkerDelta;
@@ -344,7 +346,7 @@ public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReus
      */
     private static @NonNull Iterable<ITmfEventAspect> getExperimentAspects(
             final TmfExperiment experiment) {
-        ITmfTrace[] traces = experiment.getTraces();
+        List<ITmfTrace> traces = experiment.getTraces();
         ImmutableSet.Builder<ITmfEventAspect> builder = new ImmutableSet.Builder<>();
 
         /* For experiments, we'll add a "trace name" aspect/column */
@@ -356,7 +358,7 @@ public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReus
              * All the traces in this experiment are of the same type, let's
              * just use the normal table for that type.
              */
-            builder.addAll(traces[0].getEventAspects());
+            builder.addAll(traces.get(0).getEventAspects());
 
         } else {
             /*
This page took 0.035309 seconds and 5 git commands to generate.