Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Tasse2012-06-12 11:52:14 +0000
committerPatrick Tasse2012-06-12 11:52:14 +0000
commit0f1360c864a16324f86dd0b6629c6c545a59110e (patch)
treedddc8cc03bb816d404e186e460f077f11fdd0566
parenta1bf6b5a28bc46cb79f871c332f37c9c7aa3b9ee (diff)
downloadorg.eclipse.linuxtools-0f1360c864a16324f86dd0b6629c6c545a59110e.tar.gz
org.eclipse.linuxtools-0f1360c864a16324f86dd0b6629c6c545a59110e.tar.xz
org.eclipse.linuxtools-0f1360c864a16324f86dd0b6629c6c545a59110e.zip
Fix for bug 381411: Incorrect experiment location after getNext.
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java24
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfMultiTraceExperimentTest.java24
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java27
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java40
4 files changed, 71 insertions, 44 deletions
diff --git a/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java b/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java
index 8a89d8e397..b2b4a595ac 100644
--- a/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java
+++ b/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java
@@ -537,10 +537,10 @@ public class TmfExperimentTest extends TestCase {
}
// ------------------------------------------------------------------------
- // readtNextEvent - updates the context
+ // getNext - updates the context
// ------------------------------------------------------------------------
- public void testReadNextEvent() throws Exception {
+ public void testGetNext() throws Exception {
// On lower bound, returns the first event (ts = 0)
final ITmfContext context = fExperiment.seekEvent(0);
@@ -553,6 +553,26 @@ public class TmfExperimentTest extends TestCase {
}
}
+ public void testGetNextLocation() throws Exception {
+
+ ITmfContext context1 = fExperiment.seekEvent(0);
+ fExperiment.getNext(context1);
+ ITmfLocation<?> location = context1.getLocation().clone();
+ ITmfEvent event1 = fExperiment.getNext(context1);
+ ITmfContext context2 = fExperiment.seekEvent(location);
+ ITmfEvent event2 = fExperiment.getNext(context2);
+ assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue());
+ }
+
+ public void testGetNextEndLocation() throws Exception {
+ ITmfContext context1 = fExperiment.seekEvent(fExperiment.getNbEvents() - 1);
+ fExperiment.getNext(context1);
+ ITmfLocation<?> location = context1.getLocation().clone();
+ ITmfContext context2 = fExperiment.seekEvent(location);
+ ITmfEvent event = fExperiment.getNext(context2);
+ assertNull("Event", event);
+ }
+
// ------------------------------------------------------------------------
// processRequest
// ------------------------------------------------------------------------
diff --git a/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfMultiTraceExperimentTest.java b/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfMultiTraceExperimentTest.java
index b5d7198464..740de4ceb6 100644
--- a/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfMultiTraceExperimentTest.java
+++ b/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfMultiTraceExperimentTest.java
@@ -386,10 +386,10 @@ public class TmfMultiTraceExperimentTest extends TestCase {
}
// ------------------------------------------------------------------------
- // readtNextEvent - updates the context
+ // getNext - updates the context
// ------------------------------------------------------------------------
- public void testReadNextEvent() throws Exception {
+ public void testGetNext() throws Exception {
// On lower bound, returns the first event (ts = 0)
final ITmfContext context = fExperiment.seekEvent(0);
@@ -402,6 +402,26 @@ public class TmfMultiTraceExperimentTest extends TestCase {
}
}
+ public void testGetNextLocation() throws Exception {
+
+ ITmfContext context1 = fExperiment.seekEvent(0);
+ fExperiment.getNext(context1);
+ ITmfLocation<?> location = context1.getLocation().clone();
+ ITmfEvent event1 = fExperiment.getNext(context1);
+ ITmfContext context2 = fExperiment.seekEvent(location);
+ ITmfEvent event2 = fExperiment.getNext(context2);
+ assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue());
+ }
+
+ public void testGetNextEndLocation() throws Exception {
+ ITmfContext context1 = fExperiment.seekEvent(fExperiment.getNbEvents() - 1);
+ fExperiment.getNext(context1);
+ ITmfLocation<?> location = context1.getLocation().clone();
+ ITmfContext context2 = fExperiment.seekEvent(location);
+ ITmfEvent event = fExperiment.getNext(context2);
+ assertNull("Event", event);
+ }
+
// ------------------------------------------------------------------------
// processRequest
// ------------------------------------------------------------------------
diff --git a/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java b/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java
index bb73b1bcab..aacc1aef90 100644
--- a/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java
+++ b/lttng/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java
@@ -35,6 +35,7 @@ import org.eclipse.linuxtools.tmf.core.request.TmfDataRequest;
import org.eclipse.linuxtools.tmf.core.request.TmfEventRequest;
import org.eclipse.linuxtools.tmf.core.tests.TmfCoreTestPlugin;
import org.eclipse.linuxtools.tmf.core.trace.ITmfContext;
+import org.eclipse.linuxtools.tmf.core.trace.ITmfLocation;
import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
import org.eclipse.linuxtools.tmf.core.trace.TmfCheckpointIndexer;
import org.eclipse.linuxtools.tmf.core.trace.TmfContext;
@@ -968,10 +969,10 @@ public class TmfTraceTest extends TestCase {
}
// ------------------------------------------------------------------------
- // readNextEvent - updates the context
+ // getNext - updates the context
// ------------------------------------------------------------------------
- public void testReadNextEvent() throws Exception {
+ public void testGetNext() throws Exception {
final int NB_READS = 20;
@@ -992,6 +993,26 @@ public class TmfTraceTest extends TestCase {
assertEquals("Event rank", NB_READS, context.getRank());
}
+ public void testGetNextLocation() throws Exception {
+
+ ITmfContext context1 = fTrace.seekEvent(0);
+ fTrace.getNext(context1);
+ ITmfLocation<?> location = context1.getLocation().clone();
+ ITmfEvent event1 = fTrace.getNext(context1);
+ ITmfContext context2 = fTrace.seekEvent(location);
+ ITmfEvent event2 = fTrace.getNext(context2);
+ assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue());
+ }
+
+ public void testGetNextEndLocation() throws Exception {
+ ITmfContext context1 = fTrace.seekEvent(fTrace.getNbEvents() - 1);
+ fTrace.getNext(context1);
+ ITmfLocation<?> location = context1.getLocation().clone();
+ ITmfContext context2 = fTrace.seekEvent(location);
+ ITmfEvent event = fTrace.getNext(context2);
+ assertNull("Event", event);
+ }
+
// ------------------------------------------------------------------------
// processRequest
// ------------------------------------------------------------------------
@@ -1196,4 +1217,4 @@ public class TmfTraceTest extends TestCase {
assertEquals("toString", expected, fTrace.toString());
}
-} \ No newline at end of file
+}
diff --git a/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java b/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java
index a6a189cd16..a5d0716f3a 100644
--- a/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java
+++ b/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java
@@ -264,37 +264,6 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
// ------------------------------------------------------------------------
/* (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.core.trace.TmfTrace#seekEvent(long)
- *
- * TmfTrace.seekEvent(rank) will return a context that will position the
- * trace to read the event at rank 'rank' in the trace. In the case of an
- * experiment context, that event has to be actually read in the fEvents
- * buffer and the corresponding trace context has to point to the next
- * event (rank + 1) in the trace (the sum of the traces contexts ranks
- * should equal [exp context rank + #traces] (corner cases not considered).
- *
- * In the likely case that TmfTrace.seekEvent() computed the context
- * by using a read loop (reading from the experiment), the 'lastTraceRead'
- * field will be set to the actual trace that needs to be read to obtain
- * event at rank 'rank'.
- *
- * Therefore, if 'lastTraceRead' is set, we need to read that particular
- * trace *and* then decrease the context rank (which has to correspond to
- * the rank of the event to be returned next by TmfExperiemnt.getNext().
- */
- @Override
- public synchronized ITmfContext seekEvent(final long rank) {
- TmfExperimentContext context = (TmfExperimentContext) super.seekEvent(rank);
- int lastTrace = context.getLastTrace();
- if (lastTrace != TmfExperimentContext.NO_TRACE) {
- getNext(context);
- context.setRank(rank);
- context.setLastTrace(TmfExperimentContext.NO_TRACE);
- }
- return context;
- }
-
- /* (non-Javadoc)
*
* Returns a brand new context based on the location provided and
* initializes the event queues
@@ -410,12 +379,6 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
final int lastTrace = expContext.getLastTrace();
if (lastTrace != TmfExperimentContext.NO_TRACE) {
final ITmfContext traceContext = expContext.getContexts()[lastTrace];
-
- TmfExperimentLocation location = (TmfExperimentLocation) expContext.getLocation();
- if (location != null) {
- location.getLocation().getLocations()[lastTrace] = traceContext.getLocation().clone();
- }
-
expContext.getEvents()[lastTrace] = fTraces[lastTrace].getNext(traceContext);
expContext.setLastTrace(TmfExperimentContext.NO_TRACE);
}
@@ -441,6 +404,9 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
updateAttributes(expContext, event.getTimestamp());
expContext.increaseRank();
expContext.setLastTrace(trace);
+ final TmfExperimentLocation location = (TmfExperimentLocation) expContext.getLocation();
+ final ITmfContext traceContext = expContext.getContexts()[trace];
+ location.getLocation().getLocations()[trace] = traceContext.getLocation().clone();
fExperimentContext = expContext;
processEvent(event);
}

Back to the top