Add handling of initial range offset in experiments
authorBernd Hufmann <bhufmann@gmail.com>
Wed, 28 Nov 2012 12:58:53 +0000 (07:58 -0500)
committerBernd Hufmann <bhufmann@gmail.com>
Wed, 28 Nov 2012 16:01:44 +0000 (11:01 -0500)
Change-Id: I3eb8353c183747eaac3e1b39816efcfe29bd3864
Reviewed-on: https://git.eclipse.org/r/8914
Tested-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
IP-Clean: Patrick Tasse <patrick.tasse@gmail.com>

org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfMultiTraceExperimentTest.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java
org.eclipse.linuxtools.tmf.core.tests/stubs/org/eclipse/linuxtools/tmf/tests/stubs/trace/TmfTraceStub.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java

index a49a6844f8b1ecc198f7d0e62cec806c057d22ee..cbeb4595d917bb76f852019329aaad7c6cfabeff 100644 (file)
@@ -25,6 +25,7 @@ import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.linuxtools.internal.tmf.core.trace.TmfExperimentContext;
 import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
+import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp;
@@ -47,7 +48,7 @@ public class TmfMultiTraceExperimentTest extends TestCase {
     // ------------------------------------------------------------------------
     // Attributes
     // ------------------------------------------------------------------------
-
+    private static final long   DEFAULT_INITIAL_OFFSET_VALUE = (1L * 100 * 1000 * 1000); // .1sec
     private static final String DIRECTORY    = "testfiles";
     private static final String TEST_STREAM1 = "O-Test-10K";
     private static final String TEST_STREAM2 = "E-Test-10K";
@@ -71,10 +72,13 @@ public class TmfMultiTraceExperimentTest extends TestCase {
                 URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path1), null);
                 File test = new File(FileLocator.toFileURL(location).toURI());
                 final TmfTraceStub trace1 = new TmfTraceStub(test.getPath(), 0, true);
+                trace1.setInitialRangeOffset(new TmfTimestamp(5, ITmfTimestamp.MILLISECOND_SCALE));
+
                 fTraces[0] = trace1;
                 location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path2), null);
                 test = new File(FileLocator.toFileURL(location).toURI());
                 final TmfTraceStub trace2 = new TmfTraceStub(test.getPath(), 0, true);
+                trace2.setInitialRangeOffset(new TmfTimestamp(2, ITmfTimestamp.MILLISECOND_SCALE));
                 fTraces[1] = trace2;
             } catch (final TmfTraceException e) {
                 e.printStackTrace();
@@ -121,6 +125,16 @@ public class TmfMultiTraceExperimentTest extends TestCase {
         final TmfTimeRange timeRange = fExperiment.getTimeRange();
         assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
         assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
+
+        TmfTimestamp initRange = new TmfTimestamp(2, ITmfTimestamp.MILLISECOND_SCALE);
+        assertEquals("getInitialRangeOffset", initRange, fExperiment.getInitialRangeOffset());
+        assertEquals("getCurrentTime", fExperiment.getTimeRange().getStartTime(), fExperiment.getCurrentTime());
+
+        ITmfTimestamp startTimestamp = fExperiment.getTimeRange().getStartTime();
+        long endValue = startTimestamp.getValue() + initRange.normalize(0, startTimestamp.getScale()).getValue();
+        ITmfTimestamp endTimestamp = new TmfTimestamp(endValue, startTimestamp.getScale());
+        TmfTimeRange expectedRange = new TmfTimeRange(startTimestamp, endTimestamp);
+        assertEquals("getCurrentRange", expectedRange, fExperiment.getCurrentRange());
     }
 
     // ------------------------------------------------------------------------
@@ -806,4 +820,21 @@ public class TmfMultiTraceExperimentTest extends TestCase {
         assertNull("getTimestamp", fExperiment.getTimestamp(20000));
     }
 
+    // ------------------------------------------------------------------------
+    // getInitialRangeOffset, getCurrentRange, getCurrentTime
+    // ------------------------------------------------------------------------
+    public void testDefaultCurrentTimeValues() {
+        // reset to default initial range offset
+        ((TmfTraceStub)fTraces[0]).setInitialRangeOffset(null);
+        ((TmfTraceStub)fTraces[1]).setInitialRangeOffset(null);
+
+        TmfExperimentStub exp = new TmfExperimentStub(EXPERIMENT, fTraces, BLOCK_SIZE);
+
+        // verify initial values
+        TmfTimestamp initRange = new TmfTimestamp(DEFAULT_INITIAL_OFFSET_VALUE, ITmfTimestamp.NANOSECOND_SCALE);
+        assertEquals("getInitialRangeOffset", initRange, exp.getInitialRangeOffset());
+        assertEquals("getCurrentTime", TmfTimestamp.ZERO, exp.getCurrentTime());
+        assertEquals("getCurrentRange", TmfTimeRange.NULL_RANGE, exp.getCurrentRange());
+
+    }
 }
index 8258ebc9e6a953edfe26821d3bb17dd9fc1abc0c..b104fddfde0c13054e1bb5e3800caa8e327bc8b1 100644 (file)
@@ -50,7 +50,7 @@ public class TmfTraceTest extends TestCase {
     // ------------------------------------------------------------------------
     // Variables
     // ------------------------------------------------------------------------
-
+    private static final long   DEFAULT_INITIAL_OFFSET_VALUE = (1L * 100 * 1000 * 1000); // .1sec
     private static final String DIRECTORY   = "testfiles";
     private static final String TEST_STREAM = "A-Test-10K";
     private static final int    BLOCK_SIZE  = 500;
@@ -1394,4 +1394,40 @@ public class TmfTraceTest extends TestCase {
         assertEquals("toString", expected, fTrace.toString());
     }
 
+    // ------------------------------------------------------------------------
+    // getInitialRangeOffset, getCurrentRange, getCurrentTime
+    // ------------------------------------------------------------------------
+    @SuppressWarnings("null")
+    public void testCurrentTimeValues() throws TmfTraceException {
+
+        TmfTraceStub trace = null;
+        File testfile = null;
+        try {
+            final URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(DIRECTORY + File.separator + TEST_STREAM), null);
+            testfile = new File(FileLocator.toFileURL(location).toURI());
+            trace = new TmfTraceStub(testfile.toURI().getPath());
+            // verify initial values
+            TmfTimestamp defaultInitRange = new TmfTimestamp(DEFAULT_INITIAL_OFFSET_VALUE, ITmfTimestamp.NANOSECOND_SCALE);
+            assertEquals("getInitialRangeOffset", defaultInitRange, trace.getInitialRangeOffset());
+            assertEquals("getCurrentTime", TmfTimestamp.ZERO, trace.getCurrentTime());
+            assertEquals("getCurrentRange", TmfTimeRange.NULL_RANGE, trace.getCurrentRange());
+            trace.setInitialRangeOffset(new TmfTimestamp(5, ITmfTimestamp.MILLISECOND_SCALE));
+            trace.indexTrace();
+        } catch (final URISyntaxException e) {
+            fail("URISyntaxException");
+        } catch (final IOException e) {
+            fail("IOException");
+        }
+        assertFalse ("Open trace", trace == null);
+
+        TmfTimestamp initRange = new TmfTimestamp(5, ITmfTimestamp.MILLISECOND_SCALE);
+        assertEquals("getInitialRangeOffset", initRange, trace.getInitialRangeOffset());
+        assertEquals("getCurrentTime", trace.getTimeRange().getStartTime(), trace.getCurrentTime());
+
+        ITmfTimestamp startTimestamp = trace.getTimeRange().getStartTime();
+        long endValue = startTimestamp.getValue() + initRange.normalize(0, startTimestamp.getScale()).getValue();
+        ITmfTimestamp endTimestamp = new TmfTimestamp(endValue, startTimestamp.getScale());
+        TmfTimeRange expectedRange = new TmfTimeRange(startTimestamp, endTimestamp);
+        assertEquals("getCurrentRange", expectedRange, trace.getCurrentRange());
+    }
 }
index e0be954fabae02f9ff003842644168da870acf27..2a16a2e7ba47ac2932bc41858534373b11ecf061 100644 (file)
@@ -54,6 +54,8 @@ public class TmfTraceStub extends TmfTrace implements ITmfEventParser {
     // The synchronization lock
     private final ReentrantLock fLock = new ReentrantLock();
 
+    private ITmfTimestamp fInitialRangeOffset = null;
+
     // ------------------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------------------
@@ -207,6 +209,18 @@ public class TmfTraceStub extends TmfTrace implements ITmfEventParser {
         return fTrace;
     }
 
+    public void setInitialRangeOffset(ITmfTimestamp initOffset) {
+        fInitialRangeOffset = initOffset;
+    }
+
+    @Override
+    public ITmfTimestamp getInitialRangeOffset() {
+        if (fInitialRangeOffset != null) {
+            return fInitialRangeOffset;
+        }
+        return super.getInitialRangeOffset();
+    }
+
     // ------------------------------------------------------------------------
     // Operators
     // ------------------------------------------------------------------------
index 5cdf5d1d601f04a21486b4ef94eafe6970a6f4b9..b42a9d96fe658adee577e3e59130c0d2d8a13519 100644 (file)
@@ -292,6 +292,14 @@ public interface ITmfTrace extends ITmfDataProvider {
      */
     public ITmfContext seekEvent(double ratio);
 
+    /**
+     * Returns the initial range offset
+     *
+     * @return the initial range offset
+     * @since 2.0
+     */
+    public ITmfTimestamp getInitialRangeOffset();
+
     /**
      * Return the current selected time.
      *
index 2a25b96739c92daaabcca12716a9a4b6ecef095d..eda777efdddc5331e1321b09c91ee8f2d6a5e86a 100644 (file)
@@ -384,6 +384,28 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser {
         return event;
     }
 
+    /* (non-Javadoc)
+     * @see org.eclipse.linuxtools.tmf.core.trace.TmfTrace#getInitialRangeOffset()
+     */
+    /**
+     * @since 2.0
+     */
+    @Override
+    public ITmfTimestamp getInitialRangeOffset() {
+        if ((fTraces == null) || (fTraces.length == 0)) {
+            return super.getInitialRangeOffset();
+        }
+
+        ITmfTimestamp initTs = TmfTimestamp.BIG_CRUNCH;
+        for (int i = 0; i < fTraces.length; i++) {
+            ITmfTimestamp ts = fTraces[i].getInitialRangeOffset();
+            if (ts.compareTo(initTs) < 0) {
+                initTs = ts;
+            }
+        }
+        return initTs;
+    }
+
     /* (non-Javadoc)
      * @see java.lang.Object#toString()
      */
index 0c317c45bb5f6f290c33c4a2df0586197ba94af8..6f776496de037b63f7371197741fa7fc3c50c4b8 100644 (file)
@@ -451,13 +451,15 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
         return fCurrentRange;
     }
 
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getInitialRangeOffset()
+     */
     /**
-     * Returns the initial range offset
-     *
-     * @return the initial range offset
      * @since 2.0
      */
-    protected TmfTimestamp getInitialRangeOffset() {
+    @Override
+    public ITmfTimestamp getInitialRangeOffset() {
         final long DEFAULT_INITIAL_OFFSET_VALUE = (1L * 100 * 1000 * 1000); // .1sec
         return new TmfTimestamp(DEFAULT_INITIAL_OFFSET_VALUE, ITmfTimestamp.NANOSECOND_SCALE);
     }
This page took 0.030203 seconds and 5 git commands to generate.