Fix for Bug337857
authorFrancois Chouinard <fchouinard@gmail.com>
Fri, 11 Mar 2011 18:47:33 +0000 (13:47 -0500)
committerFrancois Chouinard <fchouinard@gmail.com>
Fri, 11 Mar 2011 18:47:33 +0000 (13:47 -0500)
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java

index be173777738422dabb17c8ca60fd7bdf52c89bd7..6b5d03679002ae12146822ec52805551fe7f852f 100644 (file)
@@ -856,4 +856,8 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                thread.start();
        }
 
+//     @Override
+//    protected void queueBackgroundRequest(final ITmfDataRequest<T> request, final int blockSize, final boolean adjust) {
+//             super.queueBackgroundRequest(request, fIndexPageSize, true);
+//    }
 }
index f8910df53d4133b1793f9fa915db78d242ea9582..27496a78e54cd82c40be445cfd10d8847abd9884 100644 (file)
@@ -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<T extends TmfEvent> extends TmfEventProvider<T> 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<T extends TmfEvent> extends TmfEventProvider<T> i
             }
     }
 
-    @SuppressWarnings({ "unchecked", "unused" })
-       private void indexTraceOld(boolean waitForCompletion) {
-
-               fCheckpoints.clear();
-               
-               ITmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(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<T>) 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<T extends TmfEvent> extends TmfEventProvider<T> i
        // ------------------------------------------------------------------------
 
        @Override
-    protected void queueBackgroundRequest(final ITmfDataRequest<T> request, final int blockSize, final boolean adjust) {
-               super.queueBackgroundRequest(request, fIndexPageSize, true);
-    }
+       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;
+
+               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<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)
+                                       TmfDataRequest<T> subRequest = new TmfDataRequest<T>(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<T> request, final int blockSize, final boolean adjust) {
+//             super.queueBackgroundRequest(request, fIndexPageSize, true);
+//    }
 
 }
This page took 0.02802 seconds and 5 git commands to generate.