context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE, 0));
TmfEvent event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
- assertEquals("Event rank", 1, context.getRank());
+ assertEquals("Event rank", 0, context.getRank());
context = fExperiment.seekEvent(new TmfTimestamp(1001, SCALE, 0));
event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
- assertEquals("Event rank", 1001, context.getRank());
+ assertEquals("Event rank", 1000, context.getRank());
context = fExperiment.seekEvent(new TmfTimestamp(4001, SCALE, 0));
event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
- assertEquals("Event rank", 4001, context.getRank());
+ assertEquals("Event rank", 4000, context.getRank());
}
public void testSeekNotOnCacheBoundary() throws Exception {
context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE, 0));
TmfEvent event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
- assertEquals("Event rank", 10, context.getRank());
+ assertEquals("Event rank", 9, context.getRank());
context = fExperiment.seekEvent(new TmfTimestamp(999, SCALE, 0));
event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 999, event.getTimestamp().getValue());
- assertEquals("Event rank", 999, context.getRank());
+ assertEquals("Event rank", 998, context.getRank());
- context = fExperiment.seekEvent(new TmfTimestamp(1001, SCALE, 0));
+ context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE, 0));
event = fExperiment.getNextEvent(context);
- assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
- assertEquals("Event rank", 1001, context.getRank());
+ assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
+ assertEquals("Event rank", 999, context.getRank());
- context = fExperiment.seekEvent(new TmfTimestamp(4499, SCALE, 0));
+ context = fExperiment.seekEvent(new TmfTimestamp(4500, SCALE, 0));
event = fExperiment.getNextEvent(context);
- assertEquals("Event timestamp", 4499, event.getTimestamp().getValue());
+ assertEquals("Event timestamp", 4500, event.getTimestamp().getValue());
assertEquals("Event rank", 4499, context.getRank());
}
assertEquals("getRank", 10, fExperiment.getRank(new TmfTimestamp( 11, (byte) -3)));
assertEquals("getRank", 100, fExperiment.getRank(new TmfTimestamp( 101, (byte) -3)));
assertEquals("getRank", 1000, fExperiment.getRank(new TmfTimestamp(1001, (byte) -3)));
+ assertEquals("getRank", 2000, fExperiment.getRank(new TmfTimestamp(2001, (byte) -3)));
+ assertEquals("getRank", 2500, fExperiment.getRank(new TmfTimestamp(2501, (byte) -3)));
}
// ------------------------------------------------------------------------
assertTrue("getTimestamp", fExperiment.getTimestamp( 10).equals(new TmfTimestamp( 11, (byte) -3)));
assertTrue("getTimestamp", fExperiment.getTimestamp( 100).equals(new TmfTimestamp( 101, (byte) -3)));
assertTrue("getTimestamp", fExperiment.getTimestamp(1000).equals(new TmfTimestamp(1001, (byte) -3)));
+ assertTrue("getTimestamp", fExperiment.getTimestamp(2000).equals(new TmfTimestamp(2001, (byte) -3)));
+ assertTrue("getTimestamp", fExperiment.getTimestamp(2500).equals(new TmfTimestamp(2501, (byte) -3)));
}
}
\ No newline at end of file
context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE, 0));
TmfEvent event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
- assertEquals("Event rank", 1, context.getRank());
+ assertEquals("Event rank", 0, context.getRank());
context = fExperiment.seekEvent(new TmfTimestamp(1001, SCALE, 0));
event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
- assertEquals("Event rank", 1001, context.getRank());
+ assertEquals("Event rank", 1000, context.getRank());
context = fExperiment.seekEvent(new TmfTimestamp(4001, SCALE, 0));
event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
- assertEquals("Event rank", 4001, context.getRank());
+ assertEquals("Event rank", 4000, context.getRank());
}
public void testSeekNotOnCacheBoundary() throws Exception {
context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE, 0));
TmfEvent event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
- assertEquals("Event rank", 10, context.getRank());
+ assertEquals("Event rank", 9, context.getRank());
context = fExperiment.seekEvent(new TmfTimestamp(999, SCALE, 0));
event = fExperiment.getNextEvent(context);
assertEquals("Event timestamp", 999, event.getTimestamp().getValue());
- assertEquals("Event rank", 999, context.getRank());
+ assertEquals("Event rank", 998, context.getRank());
- context = fExperiment.seekEvent(new TmfTimestamp(1001, SCALE, 0));
+ context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE, 0));
event = fExperiment.getNextEvent(context);
- assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
- assertEquals("Event rank", 1001, context.getRank());
+ assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
+ assertEquals("Event rank", 999, context.getRank());
- context = fExperiment.seekEvent(new TmfTimestamp(4499, SCALE, 0));
+ context = fExperiment.seekEvent(new TmfTimestamp(4500, SCALE, 0));
event = fExperiment.getNextEvent(context);
- assertEquals("Event timestamp", 4499, event.getTimestamp().getValue());
+ assertEquals("Event timestamp", 4500, event.getTimestamp().getValue());
assertEquals("Event rank", 4499, context.getRank());
}
assertEquals("getRank", 10, fExperiment.getRank(new TmfTimestamp( 11, (byte) -3)));
assertEquals("getRank", 100, fExperiment.getRank(new TmfTimestamp( 101, (byte) -3)));
assertEquals("getRank", 1000, fExperiment.getRank(new TmfTimestamp(1001, (byte) -3)));
+ assertEquals("getRank", 2000, fExperiment.getRank(new TmfTimestamp(2001, (byte) -3)));
+ assertEquals("getRank", 2500, fExperiment.getRank(new TmfTimestamp(2501, (byte) -3)));
}
// ------------------------------------------------------------------------
assertTrue("getTimestamp", fExperiment.getTimestamp( 10).equals(new TmfTimestamp( 11, (byte) -3)));
assertTrue("getTimestamp", fExperiment.getTimestamp( 100).equals(new TmfTimestamp( 101, (byte) -3)));
assertTrue("getTimestamp", fExperiment.getTimestamp(1000).equals(new TmfTimestamp(1001, (byte) -3)));
+ assertTrue("getTimestamp", fExperiment.getTimestamp(2000).equals(new TmfTimestamp(2001, (byte) -3)));
+ assertTrue("getTimestamp", fExperiment.getTimestamp(2500).equals(new TmfTimestamp(2501, (byte) -3)));
}
}
\ No newline at end of file
});
}
- @TmfSignalHandler
- public void currentTimeUpdated(TmfTimeSynchSignal signal) {
- if (signal.getSource() != fTable && fExperiment != null) {
- final int index = (int) fExperiment.getRank(signal.getCurrentTime());
- // Perform the updates on the UI thread
- fTable.getDisplay().asyncExec(new Runnable() {
- public void run() {
- fTable.setSelection(index);
- // The timestamp might not correspond to an actual event
- // and the selection will point to the next experiment event.
- // But we would like to display both the event before and
- // after the selected timestamp.
- // This works fine by default except when the selected event
- // is the top displayed event. The following ensures that we
- // always see both events.
- if ((index > 0) && (index == fTable.getTopIndex())) {
- fTable.setTopIndex(index - 1);
- }
- }
- });
- }
- }
+// @TmfSignalHandler
+// public void currentTimeUpdated(TmfTimeSynchSignal signal) {
+// if (signal.getSource() != fTable && fExperiment != null) {
+// final int index = (int) fExperiment.getRank(signal.getCurrentTime());
+// // Perform the updates on the UI thread
+// fTable.getDisplay().asyncExec(new Runnable() {
+// public void run() {
+// fTable.setSelection(index);
+// // The timestamp might not correspond to an actual event
+// // and the selection will point to the next experiment event.
+// // But we would like to display both the event before and
+// // after the selected timestamp.
+// // This works fine by default except when the selected event
+// // is the top displayed event. The following ensures that we
+// // always see both events.
+// if ((index > 0) && (index == fTable.getTopIndex())) {
+// fTable.setTopIndex(index - 1);
+// }
+// }
+// });
+// }
+// }
}
\ No newline at end of file
result.add(data);
if (++nbRead % blockSize == 0) {
pushData(request, result);
+// data.setNull();
+// result.add(data);
}
// To avoid an unnecessary read passed the last data requested
- if (nbRead < nbRequested)
+ if (nbRead < nbRequested) {
data = getNext(context);
+// while (data != null && data.isNull())
+// data = getNext(context);
+ }
}
pushData(request, result);
request.done();
*/
public abstract class TmfData {
+// private boolean isNull = false;
+//
+// public void setNull() {
+// isNull = true;
+// }
+//
+// public void resetNull() {
+// isNull = false;
+// }
+//
+// public boolean isNull() {
+// return isNull;
+// }
+
}
*/
public TmfTimestamp getTimestamp(int index) {
TmfExperimentContext context = seekEvent(index);
- TmfEvent event = parseEvent(context);
+ TmfEvent event = getNextEvent(context);
return (event != null) ? event.getTimestamp() : null;
}
}
context.setLocation(new TmfExperimentLocation(newloc));
context.setRank(rank);
+ context.setLastTrace(-1);
return context;
}
return null;
// And get the event
TmfEvent event = parseEvent(context);
while (event != null && event.getTimestamp().compareTo(timestamp, false) < 0) {
- getNextEvent(context);
- event = parseEvent(context);
+ event = getNextEvent(context);
+// event = parseEvent(context);
}
+ context.setLastTrace(-1);
return context;
}
public synchronized TmfEvent getNextEvent(TmfContext context) {
if (context instanceof TmfExperimentContext) {
TmfExperimentContext expContext = (TmfExperimentContext) context;
+ int lastTrace = expContext.getLastTrace();
+ if (lastTrace != -1) {
+ TmfContext traceContext = expContext.getContexts()[lastTrace];
+ expContext.getTraces()[lastTrace].getNextEvent(traceContext);
+ expContext.getEvents()[lastTrace] = expContext.getTraces()[lastTrace].parseEvent(traceContext);
+ TmfExperimentLocation expLocation = (TmfExperimentLocation) expContext.getLocation();
+ expLocation.getLocation()[lastTrace] = traceContext.getLocation().clone();
+ expContext.updateRank(1);
+ }
int trace = -1;
TmfTimestamp timestamp = TmfTimestamp.BigCrunch;
for (int i = 0; i < expContext.getTraces().length; i++) {
}
if (trace >= 0) {
- TmfContext trcloc = expContext.getContexts()[trace];
- TmfEvent event = expContext.getTraces()[trace].getNextEvent(trcloc);
- TmfExperimentLocation exploc = (TmfExperimentLocation) expContext.getLocation();
- exploc.getLocation()[trace] = trcloc.getLocation().clone();
- expContext.getEvents()[trace] = expContext.getTraces()[trace].parseEvent(trcloc);
- expContext.updateRank(1);
+ expContext.setLastTrace(trace);
+// TmfContext traceContext = expContext.getContexts()[trace];
+ TmfEvent event = expContext.getEvents()[trace];
+// TmfEvent event = expContext.getTraces()[trace].getNextEvent(trcloc);
+// TmfEvent event = expContext.getTraces()[trace].parseEvent(traceContext);
+// TmfExperimentLocation exploc = (TmfExperimentLocation) expContext.getLocation();
+// exploc.getLocation()[trace] = trcloc.getLocation().clone();
+// expContext.getEvents()[trace] = expContext.getTraces()[trace].parseEvent(trcloc);
return event;
}
}
TmfExperimentLocation location = (TmfExperimentLocation) context.getLocation();
// Get the first event
- TmfEvent event = parseEvent(context);
+ TmfEvent event = getNextEvent(context);
if (event != null) {
startTime = new TmfTimestamp(event.getTimestamp());
}
broadcast(new TmfRangeSynchSignal(this, range, null));
}
-// // ========================================================================
-// // Toubleshooting code
-// // ========================================================================
-//
-// private void dumpCheckpoints() {
-// System.out.println("-----");
-// System.out.println("Checkpoints of " + fExperimentId);
-// for (int i = 0; i < fCheckpoints.size(); i++) {
-// System.out.println("Entry:" + i);
-// TmfCheckpoint checkpoint = fCheckpoints.get(i);
-//// long rank = 0;
-// for (int j = 0; j < fTraces.length; j++) {
-// ITmfTrace trace = fTraces[j];
-// TmfExperimentContext context = seekLocation(checkpoint.getLocation());
-// TmfContext[] traces = context.getContexts();
-//// rank += context.getRank();
-// TmfEvent event = fTraces[j].getNextEvent(new TmfContext(traces[j]));
+ // ========================================================================
+ // Toubleshooting code
+ // ========================================================================
+
+ private void dumpCheckpoints() {
+ System.out.println("-----");
+ System.out.println("Checkpoints of " + fExperimentId);
+ for (int i = 0; i < fCheckpoints.size(); i++) {
+ System.out.println("Entry:" + i);
+ TmfCheckpoint checkpoint = fCheckpoints.get(i);
+// long rank = 0;
+ for (int j = 0; j < fTraces.length; j++) {
+ ITmfTrace trace = fTraces[j];
+ TmfExperimentContext context = seekLocation(checkpoint.getLocation());
+ TmfContext[] traces = context.getContexts();
+// rank += context.getRank();
+ TmfEvent event = fTraces[j].getNextEvent(new TmfContext(traces[j]));
// System.out.println(" [" + trace.getName() + "] rank: " + context.getRank() + ", timestamp: " + event.getTimestamp());
-// assert (checkpoint.getTimestamp().compareTo(event.getTimestamp(), false) == 0);
-// }
-//// System.out.println("Sum of ranks: " + rank + " (expected: " + i * fIndexPageSize + ")");
-// }
-// }
+ System.out.println(" [" + trace.getName() + "] timestamp: " + event.getTimestamp());
+ assert (checkpoint.getTimestamp().compareTo(event.getTimestamp(), false) == 0);
+ }
+// System.out.println("Sum of ranks: " + rank + " (expected: " + i * fIndexPageSize + ")");
+ }
+ }
// ------------------------------------------------------------------------
// Signal handlers
private ITmfTrace[] fTraces = new ITmfTrace[0];
private TmfContext[] fContexts;
private TmfEvent[] fEvents;
+ private int lastIndex;
// ------------------------------------------------------------------------
// Constructors
setLocation(new TmfExperimentLocation(locations));
setRank(rank);
+ lastIndex = -1;
}
public TmfExperimentContext(ITmfTrace[] traces) {
return fEvents;
}
+ public int getLastTrace() {
+ return lastIndex;
+ }
+
+ public void setLastTrace(int newIndex) {
+ lastIndex = newIndex;
+ }
+
}