From: Francois Chouinard Date: Fri, 11 Mar 2011 18:47:33 +0000 (-0500) Subject: Fix for Bug337857 X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=64267c9db30ea59364817cf9e0ca205d27951081;p=deliverable%2Ftracecompass.git Fix for Bug337857 --- diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java index be17377773..6b5d036790 100644 --- a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java +++ b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java @@ -856,4 +856,8 @@ public class TmfExperiment extends TmfEventProvider imple thread.start(); } +// @Override +// protected void queueBackgroundRequest(final ITmfDataRequest request, final int blockSize, final boolean adjust) { +// super.queueBackgroundRequest(request, fIndexPageSize, true); +// } } diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java index f8910df53d..27496a78e5 100644 --- a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java +++ b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java @@ -22,6 +22,7 @@ import org.eclipse.linuxtools.tmf.event.TmfEvent; 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; @@ -417,7 +418,7 @@ public abstract class TmfTrace extends TmfEventProvider i startTime = new TmfTimestamp(ts); lastTime = new TmfTimestamp(ts); - if ((getNbRead() % DEFAULT_INDEX_PAGE_SIZE) == 0) { + if ((getNbRead() % fIndexPageSize) == 0) { updateTrace(); } } @@ -448,57 +449,6 @@ public abstract class TmfTrace extends TmfEventProvider i } } - @SuppressWarnings({ "unchecked", "unused" }) - private void indexTraceOld(boolean waitForCompletion) { - - fCheckpoints.clear(); - - ITmfEventRequest request = new TmfEventRequest(TmfEvent.class, TmfTimeRange.Eternity, TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.BACKGROUND) { - - TmfTimestamp startTime = null; - TmfTimestamp lastTime = null; - - @Override - public void handleData(TmfEvent event) { - super.handleData(event); - if (event != null) { - TmfTimestamp ts = event.getTimestamp(); - if (startTime == null) { - startTime = new TmfTimestamp(ts); - fStartTime = startTime; - } - lastTime = new TmfTimestamp(ts); - - if ((getNbRead() % fIndexPageSize) == 0) { - updateTraceData(); - } - } - } - - @Override - public void handleSuccess() { - updateTraceData(); - } - - private void updateTraceData() { - int nbRead = getNbRead(); - if (nbRead != 0) { - fEndTime = new TmfTimestamp(lastTime); - fNbEvents = nbRead; - notifyListeners(); - } - } - }; - - sendRequest((ITmfDataRequest) request); - if (waitForCompletion) - try { - request.waitForCompletion(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - protected void notifyListeners() { broadcast(new TmfTraceUpdatedSignal(this, this, new TmfTimeRange(fStartTime, fEndTime))); } @@ -516,8 +466,97 @@ public abstract class TmfTrace extends TmfEventProvider i // ------------------------------------------------------------------------ @Override - protected void queueBackgroundRequest(final ITmfDataRequest request, final int blockSize, final boolean adjust) { - super.queueBackgroundRequest(request, fIndexPageSize, true); - } + protected void queueBackgroundRequest(final ITmfDataRequest request, final int blockSize, final boolean indexing) { + + // TODO: Handle the data requests also... + if (!(request instanceof ITmfEventRequest)) { + super.queueRequest(request); + return; + } + final ITmfEventRequest eventRequest = (ITmfEventRequest) request; + + Thread thread = new Thread() { + @Override + public void run() { + +// final long requestStart = System.nanoTime(); + + final Integer[] CHUNK_SIZE = new Integer[1]; + 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(eventRequest.getRange().getStartTime()); +// final TmfTimestamp endTS = eventRequest.getRange().getEndTime(); + + final Boolean[] isFinished = new Boolean[1]; + isFinished[0] = Boolean.FALSE; + + while (!isFinished[0]) { + +// TmfEventRequest subRequest = new TmfEventRequest(eventRequest.getDataType(), new TmfTimeRange(timestamp[0], endTS), CHUNK_SIZE[0], eventRequest.getBlockize(), ExecutionType.BACKGROUND) +// TmfDataRequest subRequest = new TmfDataRequest(eventRequest.getDataType(), nbRead[0], CHUNK_SIZE[0], eventRequest.getBlockize(), ExecutionType.BACKGROUND) + TmfDataRequest subRequest = new TmfDataRequest(eventRequest.getDataType(), nbRead[0], CHUNK_SIZE[0], ExecutionType.BACKGROUND) + { + @Override + public void handleData(T data) { + super.handleData(data); + eventRequest.handleData(data); + if (getNbRead() == CHUNK_SIZE[0]) { + nbRead[0] += getNbRead(); + } + if (getNbRead() > CHUNK_SIZE[0]) { + System.out.println("ERROR - Read too many events"); //$NON-NLS-1$ + } + } + + @Override + public void handleCompleted() { +// System.out.println("Request completed at: " + timestamp[0]); + if (getNbRead() < CHUNK_SIZE[0]) { + if (isCancelled()) { + eventRequest.cancel(); + } + else { + eventRequest.done(); + } + isFinished[0] = Boolean.TRUE; + nbRead[0] += getNbRead(); +// System.out.println("fNbRead=" + getNbRead() + " total=" + nbRead[0]); + } + super.handleCompleted(); + } + }; + + if (!isFinished[0]) { + queueRequest(subRequest); + + try { + subRequest.waitForCompletion(); +// System.out.println("Finished at " + timestamp[0]); + } catch (InterruptedException e) { + e.printStackTrace(); + } + +// TmfTimestamp newTS = new TmfTimestamp(timestamp[0].getValue() + 1, timestamp[0].getScale(), timestamp[0].getPrecision()); +// timestamp[0] = newTS; + CHUNK_SIZE[0] = blockSize; +// System.out.println("New timestamp: " + timestamp[0]); + } + } +// final long requestEnded = System.nanoTime(); +// System.out.println("Background request completed. Elapsed= " + (requestEnded * 1.0 - requestStart) / 1000000000); + } + }; + + thread.start(); + } + +// @Override +// protected void queueBackgroundRequest(final ITmfDataRequest request, final int blockSize, final boolean adjust) { +// super.queueBackgroundRequest(request, fIndexPageSize, true); +// } }