}
// ------------------------------------------------------------------------
- // getNext - updates the context
+ // readtNextEvent - updates the context
// ------------------------------------------------------------------------
- public void testGetNext() throws Exception {
+ public void testReadNextEvent() throws Exception {
// On lower bound, returns the first event (ts = 0)
final ITmfContext context = fExperiment.seekEvent(0);
}
}
- 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
// ------------------------------------------------------------------------
}
// ------------------------------------------------------------------------
- // getNext - updates the context
+ // readtNextEvent - updates the context
// ------------------------------------------------------------------------
- public void testGetNext() throws Exception {
+ public void testReadNextEvent() throws Exception {
// On lower bound, returns the first event (ts = 0)
final ITmfContext context = fExperiment.seekEvent(0);
}
}
- 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
// ------------------------------------------------------------------------
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;
}
// ------------------------------------------------------------------------
- // getNext - updates the context
+ // readNextEvent - updates the context
// ------------------------------------------------------------------------
- public void testGetNext() throws Exception {
+ public void testReadNextEvent() throws Exception {
final int NB_READS = 20;
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
// ------------------------------------------------------------------------
assertEquals("toString", expected, fTrace.toString());
}
-}
+}
\ No newline at end of file
// ITmfTrace trace positioning
// ------------------------------------------------------------------------
+ /* (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
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);
}
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);
}