import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest.ExecutionType;
import org.eclipse.linuxtools.tmf.request.ITmfEventRequest;
import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
-import org.eclipse.linuxtools.tmf.request.ITmfDataRequest.ExecutionType;
import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
// The experiment index
protected Vector<TmfCheckpoint> fCheckpoints = new Vector<TmfCheckpoint>();
- protected TmfExperimentContext fSavedContext;
+ // The current experiment context
+ protected TmfExperimentContext fExperimentContext;
// ------------------------------------------------------------------------
// Constructors
this(type, id, traces, TmfTimestamp.Zero, indexPageSize);
}
+ /**
+ * Copy constructor
+ * @param other
+ */
public TmfExperiment(TmfExperiment<T> other) {
super(other.getName() + "(clone)", other.fType);
super.dispose();
}
- private static void setCurrentExperiment(TmfExperiment<?> experiment) {
- fCurrentExperiment = experiment;
- }
-
// ------------------------------------------------------------------------
// ITmfTrace
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
+ private static void setCurrentExperiment(TmfExperiment<?> experiment) {
+ fCurrentExperiment = experiment;
+ }
+
public static TmfExperiment<?> getCurrentExperiment() {
return fCurrentExperiment;
}
context.setLastTrace(TmfExperimentContext.NO_TRACE);
context.setRank(rank);
- fSavedContext = new TmfExperimentContext(context);
+ fExperimentContext = context;
return context;
}
event = parseEvent(context);
}
- if (event != null) {
- fSavedContext = new TmfExperimentContext(context);
- }
- else {
+ if (event == null) {
context.setLocation(null);
context.setRank(ITmfContext.UNKNOWN_RANK);
}
- return context;
+
+ return context;
}
/* (non-Javadoc)
event = parseEvent(context);
}
- if (event != null) {
- fSavedContext = new TmfExperimentContext(context);
- }
- else {
+ if (event == null) {
context.setLocation(null);
context.setRank(ITmfContext.UNKNOWN_RANK);
}
+
return context;
}
return null; // Throw an exception?
}
- if (!fSavedContext.equals(context)) {
+ if (!context.equals(fExperimentContext)) {
// Tracer.trace("Ctx: Restoring context");
seekLocation(context.getLocation());
}
// Tracer.trace("Ctx: Event returned= " + event.getTimestamp().toString());
// }
- fSavedContext = new TmfExperimentContext(expContext);
-
return event;
}
return null; // Throw an exception?
}
- if (!fSavedContext.equals(context)) {
+ if (!context.equals(fExperimentContext)) {
// Tracer.trace("Ctx: Restoring context");
seekLocation(context.getLocation());
}
TmfContext traceContext = expContext.getContexts()[lastTrace];
expContext.getEvents()[lastTrace] = expContext.getTraces()[lastTrace].getNextEvent(traceContext);
expContext.setLastTrace(TmfExperimentContext.NO_TRACE);
- fSavedContext = new TmfExperimentContext(expContext);
+ fExperimentContext = (TmfExperimentContext) context;
}
// Scan the candidate events and identify the "next" trace to read from
if (trace != TmfExperimentContext.NO_TRACE) {
event = expContext.getEvents()[trace];
}
+
return event;
}
// fEventLog = openLogFile("TraceEvent.log");
// System.out.println(System.currentTimeMillis() + ": Experiment indexing started");
- ITmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, TmfTimeRange.Eternity, TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.LONG) {
+ ITmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, TmfTimeRange.Eternity, TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.BACKGROUND) {
// long indexingStart = System.nanoTime();
// ------------------------------------------------------------------------
@Override
- protected void queueLongRequest(final ITmfDataRequest<T> request) {
+ protected void queueBackgroundRequest(final ITmfDataRequest<T> request, final int blockSize, final boolean indexing) {
// TODO: Handle the data requests also...
if (!(request instanceof ITmfEventRequest<?>)) {
super.queueRequest(request);
return;
}
+ final ITmfEventRequest<T> eventRequest = (ITmfEventRequest<T>) request;
- final TmfExperiment<T> experiment = this;
-
Thread thread = new Thread() {
@Override
public void run() {
// final long requestStart = System.nanoTime();
final Integer[] CHUNK_SIZE = new Integer[1];
- CHUNK_SIZE[0] = fIndexPageSize + 1;
-
- final ITmfEventRequest<T> req = (ITmfEventRequest<T>) request;
+ CHUNK_SIZE[0] = blockSize + ((indexing) ? 1 : 0);
final Integer[] nbRead = new Integer[1];
nbRead[0] = 0;
// final TmfTimestamp[] timestamp = new TmfTimestamp[1];
-// timestamp[0] = new TmfTimestamp(req.getRange().getStartTime());
-// final TmfTimestamp endTS = req.getRange().getEndTime();
+// timestamp[0] = new TmfTimestamp(eventRequest.getRange().getStartTime());
+// final TmfTimestamp endTS = eventRequest.getRange().getEndTime();
final Boolean[] isFinished = new Boolean[1];
isFinished[0] = Boolean.FALSE;
while (!isFinished[0]) {
-// TmfEventRequest<T> subRequest = new TmfEventRequest<T>(req.getDataType(), new TmfTimeRange(timestamp[0], endTS),
-// requestedSize, req.getBlockize(), ExecutionType.LONG)
- TmfDataRequest<T> subRequest = new TmfDataRequest<T>(req.getDataType(), nbRead[0], CHUNK_SIZE[0],
- req.getBlockize(), ExecutionType.LONG)
+// TmfEventRequest<T> subRequest = new TmfEventRequest<T>(eventRequest.getDataType(), new TmfTimeRange(timestamp[0], endTS), CHUNK_SIZE[0], eventRequest.getBlockize(), ExecutionType.BACKGROUND)
+ TmfDataRequest<T> subRequest = new TmfDataRequest<T>(eventRequest.getDataType(), nbRead[0], CHUNK_SIZE[0], eventRequest.getBlockize(), ExecutionType.BACKGROUND)
{
- int count = 0;
+// int count = 0;
@Override
public void handleData() {
T[] data = getData();
+// timestamp[0] = data[data.length-1].getTimestamp();
// if (count == 0) {
// System.out.println("First event of the block: " + data[0].getTimestamp());
// }
- count++;
+// count++;
// Tracer.trace("Ndx: " + ((TmfEvent) data[0]).getTimestamp());
- req.setData(data);
- req.handleData();
+ eventRequest.setData(data);
+ eventRequest.handleData();
if (fNbRead == CHUNK_SIZE[0]) {
nbRead[0] += fNbRead;
// System.out.println("fNbRead=" + fNbRead + ", count=" + count +", total=" + nbRead[0] + ", TS=" + data[0].getTimestamp());
public void handleCompleted() {
// System.out.println("Request completed at: " + timestamp[0]);
if (fNbRead < CHUNK_SIZE[0]) {
- req.done();
+ eventRequest.done();
isFinished[0] = Boolean.TRUE;
nbRead[0] += fNbRead;
// System.out.println("fNbRead=" + fNbRead + ", count=" + count +", total=" + nbRead[0]);
};
if (!isFinished[0]) {
- experiment.queueRequest(subRequest);
+ queueRequest(subRequest);
try {
subRequest.waitForCompletion();
// TmfTimestamp newTS = new TmfTimestamp(timestamp[0].getValue() + 1, timestamp[0].getScale(), timestamp[0].getPrecision());
// timestamp[0] = newTS;
- CHUNK_SIZE[0] = fIndexPageSize;
+ CHUNK_SIZE[0] = blockSize;
// System.out.println("New timestamp: " + timestamp[0]);
}
}
// System.out.println("Background request completed. Elapsed= " + (requestEnded * 1.0 - requestStart) / 1000000000);
}
};
+
thread.start();
}