diff options
author | Patrick Tasse | 2012-06-12 11:52:14 +0000 |
---|---|---|
committer | Patrick Tasse | 2012-06-12 11:52:14 +0000 |
commit | 0f1360c864a16324f86dd0b6629c6c545a59110e (patch) | |
tree | dddc8cc03bb816d404e186e460f077f11fdd0566 | |
parent | a1bf6b5a28bc46cb79f871c332f37c9c7aa3b9ee (diff) | |
download | org.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.
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); } |