Monster merge from the integration branch. Still some problems left and JUnits failing.
authorFrancois Chouinard <fchouinard@gmail.com>
Wed, 2 Jun 2010 20:19:59 +0000 (20:19 +0000)
committerFrancois Chouinard <fchouinard@gmail.com>
Wed, 2 Jun 2010 20:19:59 +0000 (20:19 +0000)
67 files changed:
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/AllLTTngRefactoringTests.java [deleted file]
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/control/LTTngSyntheticEventProviderTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/model/LTTngTreeNodeTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/state/experiment/StateExperimentManagerTextTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/state/resource/LTTngStateResourceTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/AllLTTngCoreTests.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/state/StateManagerFactoryTestSupport.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/state/TestStateManager.java
org.eclipse.linuxtools.lttng.ui.tests/stubs/org/eclipse/linuxtools/lttng/stubs/LTTngTraceStub.java
org.eclipse.linuxtools.lttng.ui/.options [new file with mode: 0644]
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/common/AbsTimeUpdateView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvasMouseListener.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramRequest.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/resources/ResourcesView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/resources/evProcessor/ResourcesEventToHandlerFactory.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/statistics/evProcessor/StatsTimeCountHandlers.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/TraceDebug.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/control/LttngSyntheticEventProvider.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/event/LttngEvent.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/event/LttngEventContent.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/event/LttngSyntheticEvent.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/model/LTTngTreeNode.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/model/LTTngTreeNodeGeneric.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/request/LttngBaseEventRequest.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/request/LttngSyntEventRequest.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/evProcessor/AbsEventToHandlerResolver.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/evProcessor/state/AbsStateUpdate.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/evProcessor/state/StateUpdateHandlers.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/experiment/IStateExperimentManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/experiment/StateExperimentManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/experiment/StateManagerFactory.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/model/LttngTraceState.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/resource/LTTngStateResource.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/trace/IStateTraceManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/trace/StateTraceManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/trace/LTTngTextTrace.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/trace/LTTngTrace.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/experiment/TmfExperimentTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/experiment/TmfMultiTraceExperimentTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/trace/TmfContextTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/trace/TmfExperimentTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/trace/TmfTraceTest.java
org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/component/TmfSyntheticEventProviderStub.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/TmfEventsView.java
org.eclipse.linuxtools.tmf/.options
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/Tracer.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfDataProvider.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfComponent.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfDataProvider.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/event/TmfTimeRange.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentContext.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/ITmfDataRequest.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfCoalescedEventRequest.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfDataRequest.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfEventRequest.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfSignalManager.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfContext.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfTrace.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfCheckpoint.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfContext.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java

diff --git a/org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/AllLTTngRefactoringTests.java b/org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/AllLTTngRefactoringTests.java
deleted file mode 100644 (file)
index 556f823..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.eclipse.linuxtools.lttng;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.linuxtools.lttng.control.LTTngSyntheticEventProviderTest;
-import org.eclipse.linuxtools.lttng.control.LTTngSyntheticEventProviderTextTest;
-import org.eclipse.linuxtools.lttng.model.LTTngTreeNodeTest;
-import org.eclipse.linuxtools.lttng.state.experiment.StateExperimentManagerTextTest;
-import org.eclipse.linuxtools.lttng.state.resource.LTTngStateResourceTest;
-
-public class AllLTTngRefactoringTests {
-
-       public static Test suite() {
-               TestSuite suite = new TestSuite(AllLTTngRefactoringTests.class.getName());
-               //$JUnit-BEGIN$
-
-               // suite.addTestSuite(LTTngTextTraceTest.class);
-               // suite.addTestSuite(LttngTimestampTest.class);
-               // suite.addTestSuite(LttngEventFieldTest.class);
-               // suite.addTestSuite(LttngEventContentTest.class);
-               // suite.addTestSuite(LttngEventReferenceTest.class);
-               // suite.addTestSuite(LttngEventTypeTest.class);
-               // suite.addTestSuite(LttngEventTest.class);
-               //              
-               // suite.addTestSuite(JniTraceTest.class);
-               // suite.addTestSuite(JniTracefileTest.class);
-               // suite.addTestSuite(JniEventTest.class);
-               // suite.addTestSuite(JniMarkerTest.class);
-               // suite.addTestSuite(JniMarkerFieldTest.class);
-               //        
-               // suite.addTestSuite(LTTngTextTraceTest.class);
-               // suite.addTestSuite(LTTngTraceTest.class);
-               
-               suite.addTestSuite(LTTngSyntheticEventProviderTest.class);
-               suite.addTestSuite(LTTngSyntheticEventProviderTextTest.class);
-               suite.addTestSuite(LTTngTreeNodeTest.class);
-               suite.addTestSuite(StateExperimentManagerTextTest.class);
-               suite.addTestSuite(LTTngStateResourceTest.class);
-
-               //$JUnit-END$
-               return suite;
-       }
-
-}
index a2621bbe0568af80c22bc929657b8b80b4772013..861d7923a39280413869f4daa3f450f698b9b9f9 100644 (file)
@@ -60,7 +60,7 @@ public class LTTngSyntheticEventProviderTest extends LttngTestPreparation {
                // experiment selected, build experiment selection context and trigger
                // check point creation
                expManager.experimentSelected_prep(experiment);
-               // Action trigger
+               // builds check points in parallel
                expManager.experimentSelected(this, experiment);
 
                // Obtain the singleton event provider
@@ -77,6 +77,7 @@ public class LTTngSyntheticEventProviderTest extends LttngTestPreparation {
                synProvider.sendRequest(request1);
                synProvider.sendRequest(request2);
                try {
+                       request1.waitForCompletion();
                        request2.waitForCompletion();
                } catch (InterruptedException e) {
                        e.printStackTrace();
index 87e68dd60545806f0e00bc32318caae6271ead0d..472199f27fb7dc95672a2a5b4f68ed1be35bb43a 100644 (file)
@@ -42,6 +42,7 @@ public class LTTngTreeNodeTest extends TestCase {
        /* (non-Javadoc)
         * @see junit.framework.TestCase#setUp()
         */
+       @Override
        protected void setUp() throws Exception {
                super.setUp();
                // Create state resources and assign a parent
@@ -86,6 +87,7 @@ public class LTTngTreeNodeTest extends TestCase {
        /* (non-Javadoc)
         * @see junit.framework.TestCase#tearDown()
         */
+       @Override
        protected void tearDown() throws Exception {
                super.tearDown();
        }
index 69fa7f58d65e6614ac05d1bd45b0edec07ebeb43..eae057b3e94fa93006a43b25c6dc96572126a708 100644 (file)
@@ -51,7 +51,7 @@ public class StateExperimentManagerTextTest extends LttngTestPreparation {
                                .getChildById(0L);
 
                // validate
-               int numProcesses = traceManager.getStateModel().getProcesses().length;
+               int numProcesses = traceManager.getCheckPointStateModel().getProcesses().length;
                assertEquals("Total number of processes created", 276, numProcesses);
 
        }
@@ -82,7 +82,7 @@ public class StateExperimentManagerTextTest extends LttngTestPreparation {
                                .getChildById(0L);
 
                // validate
-               int numProcesses = traceManager.getStateModel().getProcesses().length;
+               int numProcesses = traceManager.getCheckPointStateModel().getProcesses().length;
                assertEquals("Total number of processes created", 276, numProcesses);
 
        }
index c538e95a0b301f3c64d4aca252718059da697afb..be0d1e810018c94ec269d7356776f915ebc0bbef 100644 (file)
@@ -52,6 +52,7 @@ public class LTTngStateResourceTest extends TestCase {
        /* (non-Javadoc)
         * @see junit.framework.TestCase#setUp()
         */
+       @Override
        protected void setUp() throws Exception {
                super.setUp();
                context = getContext();
@@ -124,6 +125,7 @@ public class LTTngStateResourceTest extends TestCase {
        /* (non-Javadoc)
         * @see junit.framework.TestCase#tearDown()
         */
+       @Override
        protected void tearDown() throws Exception {
                super.tearDown();
        }
index a6b1f483e6d5115e2f2e2c91f6e291a6bb204561..09ab7ed5f062e03e0038cf2550bf68d3f05265af 100644 (file)
@@ -3,6 +3,11 @@ package org.eclipse.linuxtools.lttng.tests;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import org.eclipse.linuxtools.lttng.control.LTTngSyntheticEventProviderTest;
+import org.eclipse.linuxtools.lttng.control.LTTngSyntheticEventProviderTextTest;
+import org.eclipse.linuxtools.lttng.model.LTTngTreeNodeTest;
+import org.eclipse.linuxtools.lttng.state.experiment.StateExperimentManagerTextTest;
+import org.eclipse.linuxtools.lttng.state.resource.LTTngStateResourceTest;
 import org.eclipse.linuxtools.lttng.tests.event.LttngEventContentTest;
 import org.eclipse.linuxtools.lttng.tests.event.LttngEventFieldTest;
 import org.eclipse.linuxtools.lttng.tests.event.LttngEventReferenceTest;
@@ -39,6 +44,12 @@ public class AllLTTngCoreTests {
         
         suite.addTestSuite(LTTngTextTraceTest.class);
         suite.addTestSuite(LTTngTraceTest.class);
+
+               suite.addTestSuite(LTTngSyntheticEventProviderTest.class);
+               suite.addTestSuite(LTTngSyntheticEventProviderTextTest.class);
+               suite.addTestSuite(LTTngTreeNodeTest.class);
+               suite.addTestSuite(StateExperimentManagerTextTest.class);
+               suite.addTestSuite(LTTngStateResourceTest.class);
                //$JUnit-END$
                return suite;
        }
index b1b9e9569cbf4f2ec21482783586a3e2be7b42e0..ff7ee5f7da1cda16ee3de59e2b37a61162066522 100644 (file)
@@ -15,15 +15,10 @@ package org.eclipse.linuxtools.lttng.tests.state;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.linuxtools.lttng.control.LttngCoreProviderFactory;
-import org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent;
 import org.eclipse.linuxtools.lttng.model.LTTngTreeNode;
 import org.eclipse.linuxtools.lttng.state.LttngStateException;
-import org.eclipse.linuxtools.lttng.state.model.LttngTraceState;
-import org.eclipse.linuxtools.lttng.state.model.StateModelFactory;
 import org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager;
 import org.eclipse.linuxtools.lttng.state.trace.StateTraceManager;
-import org.eclipse.linuxtools.tmf.component.TmfEventProvider;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
 
 /**
@@ -36,7 +31,7 @@ public class StateManagerFactoryTestSupport {
        // =======================================================================
 
        private static final Map<String, IStateTraceManager> instanceBook = new HashMap<String, IStateTraceManager>();
-       private static TmfEventProvider<LttngSyntheticEvent> feventProvider = null;
+
        // ========================================================================
        // Methods
        // =======================================================================
@@ -57,21 +52,16 @@ public class StateManagerFactoryTestSupport {
                        return instanceBook.get(traceUniqueId);
                }
 
-               LttngTraceState traceModel = StateModelFactory.getStateEntryInstance();
+               // LttngTraceState traceModel =
+               // StateModelFactory.getStateEntryInstance();
                IStateTraceManager manager = null;
 
-               if (feventProvider == null) {
-                       feventProvider = LttngCoreProviderFactory.getEventProvider();
-               }
-
                // catch construction problems
                Long id = 0L;
                LTTngTreeNode parent = null;
 
                try {
-                       manager = new StateTraceManager(id, parent, traceUniqueId, trace,
-                                       traceModel,
-                                       feventProvider);
+                       manager = new StateTraceManager(id, parent, traceUniqueId, trace);
                } catch (LttngStateException e) {
                        e.printStackTrace();
                }
index ca8cb1e9821ff94232aa6ee543b3808c372f02dd..8c80e309bdd3ee34c1e33ccd75fe2a36cb920aab 100644 (file)
@@ -14,18 +14,18 @@ package org.eclipse.linuxtools.lttng.tests.state;
 
 import junit.framework.TestCase;
 
-import org.eclipse.linuxtools.lttng.event.LttngEvent;
-import org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager;
 import org.eclipse.linuxtools.lttng.trace.LTTngTrace;
-import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
-import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
 
 /**
  * @author alvaro
  * 
  */
 public class TestStateManager extends TestCase {
-       
+
+       /**
+        * TODO: Not used for the time being, for experiment selection test cases
+        * for package state.experiment
+        */
        public void testSetTraceSelection() {
                String logName = "traceset/trace1";
                
@@ -39,13 +39,15 @@ public class TestStateManager extends TestCase {
                if (testStream != null) {
                    LTTngTrace[] streamList = new LTTngTrace[1];
                        streamList[0] = testStream;
-                       TmfExperiment<LttngEvent> newExp = new TmfExperiment<LttngEvent>(LttngEvent.class, logName, streamList);
+                       // TmfExperiment<LttngEvent> newExp = new
+                       // TmfExperiment<LttngEvent>(LttngEvent.class, logName, streamList);
                        
                        //Get the Test StateManager
-                       IStateTraceManager manager = StateManagerFactoryTestSupport
-                                       .getManager(testStream);
+                       // IStateTraceManager manager = StateManagerFactoryTestSupport
+                       // .getManager(testStream);
                        //Start execution.
-                       manager.experimentUpdated(new TmfExperimentUpdatedSignal(this, newExp, null), true);
+                       // manager.experimentUpdated(new TmfExperimentUpdatedSignal(this,
+                       // newExp, null), true);
                        
                        //Print events not handled.
                        // Set<String> notHandledEvents = manager.getEventsNotHandled();
index 3395776f44cefbc275b070b0d10d4c5ab0c1e587..91ba9941e59044281be4eeffa15c03ebfdcfb88a 100644 (file)
@@ -65,7 +65,7 @@ public class LTTngTraceStub extends TmfTrace<LttngEvent> {
         super(filename, LttngEvent.class, filename, cacheSize);
         fTrace = new RandomAccessFile(filename, "r");
        fParser = new LTTngEventParserStub();
-       indexTrace(true);
+//     indexTrace(true);
     }
     
        public ITmfTrace createTraceCopy() {
diff --git a/org.eclipse.linuxtools.lttng.ui/.options b/org.eclipse.linuxtools.lttng.ui/.options
new file mode 100644 (file)
index 0000000..31efb0f
--- /dev/null
@@ -0,0 +1,3 @@
+org.eclipse.linuxtools.lttng.ui/debug=false
+org.eclipse.linuxtools.lttng.ui/info=false
+org.eclipse.linuxtools.lttng.ui/warn=false
index 58b8e65258bf34b55a959d0981fa2de6385d47fe..85d110267398bd1e00fb1fc03c686538041216fe 100644 (file)
@@ -347,11 +347,16 @@ public abstract class AbsTimeUpdateView extends TmfView implements
                         * org.eclipse.linuxtools.lttng.request.LttngSyntEventRequest#handleData
                         * ()
                         */
+                       int handleDataCount = 0;
+                       int handleDataValidCount = 0;
+                       @Override
                        public void handleData() {
                                TmfEvent[] result = getData();
        
                                TmfEvent evt = (result.length > 0) ? result[0] : null;
+                               handleDataCount++;
                                if (evt != null) {
+                                       handleDataValidCount++;
                                        LttngSyntheticEvent synEvent = (LttngSyntheticEvent) evt;
                                        // process event
                                        SequenceInd indicator = synEvent.getSynType();
@@ -384,7 +389,16 @@ public abstract class AbsTimeUpdateView extends TmfView implements
                        public void handleRequestStarted() {
                                notifyStarting();
                        }
+
+                       @Override
+                       public void done() {
+                               if (TraceDebug.isDEBUG()) {
+                                       TraceDebug.debug("AbsTimeUpdateView: Received=" + handleDataCount + ", Valid=" + handleDataCount + ", fCount=" + fCount);
+                               }
+                               super.done();
+                       }
        
+                       @Override
                        public void handleCompleted() {
                                super.handleCompleted();
 
index db480780a322716f327f1ae6e3d2b68c8a985d22..342fb026ec60e25f292f00330721c21d4147e6df 100644 (file)
@@ -836,6 +836,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
         * (org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeSelectionEvent
         * )
         */
+       @Override
        public void tsfTmProcessSelEvent(TmfTimeSelectionEvent event) {
                // common implementation
                super.tsfTmProcessSelEvent(event);
@@ -855,6 +856,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
         * #tsfTmProcessTimeScaleEvent(org.eclipse.linuxtools
         * .tmf.ui.viewers.timeAnalysis.TmfTimeScaleSelectionEvent)
         */
+       @Override
        public synchronized void tsfTmProcessTimeScaleEvent(TmfTimeScaleSelectionEvent event) {
                super.tsfTmProcessTimeScaleEvent(event);
        }
@@ -878,6 +880,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
         * ITmfTimeAnalysisEntry[], long, long, boolean, long, long,
         * java.lang.Object)
         */
+       @Override
        public void displayModel(final ITmfTimeAnalysisEntry[] items,
                        final long startBoundTime, final long endBoundTime,
                        final boolean updateTimeBounds, final long startVisibleWindow,
@@ -973,6 +976,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
         * 
         * @param signal
         */
+       @Override
        @TmfSignalHandler
        public void synchToTime(TmfTimeSynchSignal signal) {
                super.synchToTime(signal);
index 7c06cd6ae0e3429de6d5bcc6fb37361f33832e44..c27715bcf49542e15d60bb5e50d3b0d7b64df7c3 100644 (file)
@@ -83,7 +83,7 @@ public class HistogramCanvasMouseListener implements MouseMoveListener, MouseLis
         * @param event  The generated mouse event when the mouse double-click was issued.
         */
        public void mouseDoubleClick(MouseEvent event) {
-               System.out.println("mouseDoubleClick");
+//             System.out.println("mouseDoubleClick");
        }
        
        /**
index 34d00572fb5fb9393c074b2c2991e6bda0579f21..56a585e02eea91c1f33b4093d621baff7ded09e8 100644 (file)
@@ -14,6 +14,7 @@ package org.eclipse.linuxtools.lttng.ui.views.histogram;
 import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
 import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
 
 /**
@@ -47,8 +48,8 @@ public class HistogramRequest extends TmfEventRequest<LttngEvent> {
         * 
         * @see org.eclipse.linuxtools.tmf.request.TmfEventRequest
         */
-       public HistogramRequest(TmfTimeRange range, int nbRequested, HistogramCanvas newParentCanvas, long timeInterval) {
-        super((Class<LttngEvent>)LttngEvent.class, range, nbRequested, HistogramConstant.MAX_EVENTS_PER_READ);
+       public HistogramRequest(TmfTimeRange range, int nbRequested, HistogramCanvas newParentCanvas, long timeInterval, ITmfDataRequest.ExecutionType execType) {
+        super((Class<LttngEvent>)LttngEvent.class, range, nbRequested, HistogramConstant.MAX_EVENTS_PER_READ, execType);
         
         // *** FIXME ***
         // This does not work! The request won't be processed or the number of events returned is wrong!
index 25df24c23a41bd46a7e8a3f9582afa7fd0d540f7..5624ee22e49f7ded0a6771f9ecea7406d3c716ef 100644 (file)
@@ -13,14 +13,19 @@ package org.eclipse.linuxtools.lttng.ui.views.histogram;
 
 import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
+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.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
+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.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
+import org.eclipse.linuxtools.tmf.trace.TmfContext;
 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ControlEvent;
@@ -506,17 +511,20 @@ public class HistogramView extends TmfView implements ControlListener {
        // Save the experiment we are about to use
        lastUsedExperiment = newExperiment;
        
-       // Create a copy of the trace that will be use only by the full experiment request
-       TmfExperiment<LttngEvent> experimentCopy = newExperiment.createTraceCopy();
+//     // Create a copy of the trace that will be use only by the full experiment request
+//     TmfExperiment<LttngEvent> experimentCopy = newExperiment.createTraceCopy();
        
        // Create the content for the full experiment. 
        // This NEED to be created first, as we use it in the selectedWindowCanvas
                fullExperimentCanvas.createNewHistogramContent(fullExperimentCanvas.getSize().x, FULL_TRACE_BAR_WIDTH, FULL_TRACE_CANVAS_HEIGHT, FULL_TRACE_DIFFERENCE_TO_AVERAGE);
                fullExperimentCanvas.createNewSelectedWindow(DEFAULT_WINDOW_SIZE);
-               currentEventTime = newExperiment.getStartTime().getValue();
-       // Set the window of the fullTrace canvas visible.
+
+               TmfTimeRange timeRange = getExperimentTimeRange(newExperiment);
+               currentEventTime = timeRange.getStartTime().getValue();
+
+               // Set the window of the fullTrace canvas visible.
                fullExperimentCanvas.getCurrentWindow().setSelectedWindowVisible(true);
-               fullExperimentCanvas.getHistogramContent().resetTable(newExperiment.getStartTime().getValue(), newExperiment.getEndTime().getValue());
+               fullExperimentCanvas.getHistogramContent().resetTable(timeRange.getStartTime().getValue(), timeRange.getEndTime().getValue());
                
                // Create the content for the selected window. 
                selectedWindowCanvas.createNewHistogramContent(selectedWindowCanvas.getSize().x ,SELECTED_WINDOW_BAR_WIDTH, SELECTED_WINDOW_CANVAS_HEIGHT, SELECTED_WINDOW_DIFFERENCE_TO_AVERAGE);
@@ -539,9 +547,34 @@ public class HistogramView extends TmfView implements ControlListener {
                // Perform both request. 
                // Order is important here, the small/synchronous request for the selection window should go first
                performSelectedWindowEventsRequest(newExperiment);
-               performAllTraceEventsRequest(experimentCopy);
+//             performAllTraceEventsRequest(experimentCopy);
+               performAllTraceEventsRequest(newExperiment);
     }
-    
+
+       // Before completing its indexing, the experiment doesn't know start/end time.
+       // However, LTTng individual traces have this knowledge so we should ask them
+       // directly.
+    private TmfTimeRange getExperimentTimeRange(TmfExperiment<LttngEvent> experiment) {
+       // Before completing its indexing, the experiment doesn't know start/end time.
+       // However, LTTng individual traces have this knowledge so we should ask them
+       // directly.
+               TmfTimestamp startTime = TmfTimestamp.BigCrunch;
+               TmfTimestamp endTime   = TmfTimestamp.BigBang;
+               for (ITmfTrace trace : experiment.getTraces()) {
+                       TmfContext context = trace.seekLocation(null);
+                       context.setRank(0);
+                       TmfEvent event = trace.getNextEvent(context);
+                       TmfTimestamp traceStartTime = event.getTimestamp();
+                       if (traceStartTime.compareTo(startTime, true) < 0)
+                               startTime = traceStartTime;
+                       TmfTimestamp traceEndTime = trace.getEndTime();
+                       if (traceEndTime.compareTo(endTime, true) > 0)
+                               endTime = traceEndTime;
+       }
+        TmfTimeRange tmpRange = new TmfTimeRange(startTime, endTime);
+        return tmpRange;
+    }
+
     /**
      * Perform a new request for the Selection window.<p>
      * This assume the full experiment canvas has correct information about the selected window; 
@@ -553,7 +586,7 @@ public class HistogramView extends TmfView implements ControlListener {
        
        HistogramSelectedWindow curSelectedWindow = fullExperimentCanvas.getCurrentWindow();
        
-       // If no selection window exists, we will try to cerate one; 
+       // If no selection window exists, we will try to create one; 
        //      however this will most likely fail as the content is probably not created either
        if ( curSelectedWindow == null ) {
                fullExperimentCanvas.createNewSelectedWindow( DEFAULT_WINDOW_SIZE );
@@ -569,7 +602,7 @@ public class HistogramView extends TmfView implements ControlListener {
         // Set a (dynamic) time interval
         long intervalTime = ( (ts2.getValue() - ts1.getValue()) / selectedWindowCanvas.getHistogramContent().getNbElement() );
         
-        selectedWindowRequest = performRequest(experiment, selectedWindowCanvas, tmpRange, intervalTime);
+        selectedWindowRequest = performRequest(experiment, selectedWindowCanvas, tmpRange, intervalTime, ExecutionType.SHORT);
         selectedWindowCanvas.redrawAsynchronously();
     }
     
@@ -582,12 +615,16 @@ public class HistogramView extends TmfView implements ControlListener {
     public void performAllTraceEventsRequest(TmfExperiment<LttngEvent> experiment) {
        // Create a new time range from "start" to "end"
         //     That way, we will get "everything" in the trace
-        LttngTimestamp ts1 = new LttngTimestamp( experiment.getStartTime() );
-        LttngTimestamp ts2 = new LttngTimestamp( experiment.getEndTime() );
-        TmfTimeRange tmpRange = new TmfTimeRange(ts1, ts2);
+//        LttngTimestamp ts1 = new LttngTimestamp( experiment.getStartTime() );
+//        LttngTimestamp ts2 = new LttngTimestamp( experiment.getEndTime() );
+//        TmfTimeRange tmpRange = new TmfTimeRange(ts1, ts2);
+       
+        TmfTimeRange tmpRange  = getExperimentTimeRange(experiment);
+               TmfTimestamp startTime = tmpRange.getStartTime();
+               TmfTimestamp endTime   = tmpRange.getEndTime();
         
         // Set a (dynamic) time interval
-        long intervalTime = ( (ts2.getValue() - ts1.getValue()) / fullExperimentCanvas.getHistogramContent().getNbElement() );
+        long intervalTime = ( (endTime.getValue() - startTime.getValue()) / fullExperimentCanvas.getHistogramContent().getNbElement() );
         
         // *** VERIFY ***
         // This would enable "fixed interval" instead of dynamic one.
@@ -599,7 +636,7 @@ public class HistogramView extends TmfView implements ControlListener {
         // It would be interesting if there was a way to tell the framework to run the request "in parallel" here.
         // Mean a completetly independant copy of the Expereiment would be done and we would proceed on that.
         //
-        dataBackgroundFullRequest = performRequest(experiment, fullExperimentCanvas, tmpRange, intervalTime);
+        dataBackgroundFullRequest = performRequest(experiment, fullExperimentCanvas, tmpRange, intervalTime, ExecutionType.LONG);
         fullExperimentCanvas.redrawAsynchronously();
     }
     
@@ -616,7 +653,7 @@ public class HistogramView extends TmfView implements ControlListener {
      * @param newRange                 The range of the request
      * @param newInterval              The interval of time we use to store the result into the HistogramContent
      */
-    public synchronized HistogramRequest performRequest(TmfExperiment<LttngEvent> experiment, HistogramCanvas targetCanvas, TmfTimeRange newRange, long newInterval) {
+    private synchronized HistogramRequest performRequest(TmfExperiment<LttngEvent> experiment, HistogramCanvas targetCanvas, TmfTimeRange newRange, long newInterval, ITmfDataRequest.ExecutionType execType) {
        HistogramRequest returnedRequest = null;
        
         // *** FIXME ***
@@ -624,7 +661,7 @@ public class HistogramView extends TmfView implements ControlListener {
            // We use int.MAX_VALUE because we want every events BUT we don't know the number inside the range.
         // HOWEVER, this would cause the request to run forever (or until it reach the end of trace).
         // Seeting an EndTime does not seems to stop the request
-        returnedRequest = new HistogramRequest(newRange, Integer.MAX_VALUE, targetCanvas, newInterval );
+        returnedRequest = new HistogramRequest(newRange, Integer.MAX_VALUE, targetCanvas, newInterval, execType );
         
         // Send the request to the framework : it will be queued and processed later
         experiment.sendRequest(returnedRequest);
@@ -642,7 +679,7 @@ public class HistogramView extends TmfView implements ControlListener {
        
        if ( lastUsedExperiment != null ) {
                // If a request is ongoing, try to stop it
-               if ( selectedWindowRequest.isCompleted() == false ) {
+               if ( selectedWindowRequest != null && selectedWindowRequest.isCompleted() == false ) {
                        selectedWindowRequest.cancel();
                }
                
index c76654f77e11d8dcb6e130d4b712c215f9efaf5f..ecc0eb5a47ae417ce7e0eec75115a13c359c0f43 100644 (file)
@@ -168,8 +168,11 @@ public class ProjectView extends TmfView {
         */
        public void selectExperiment(LTTngExperimentNode experiment) {
        String expId = experiment.getName();
-        if (fSelectedExperiment != null)
+        if (fSelectedExperiment != null) {
+//             System.out.println(fSelectedExperiment.getName() + ": nbEvents=" + fSelectedExperiment.getNbEvents() + 
+//                             ", nbReads=" + ((LTTngTrace) fSelectedExperiment.getTraces()[0]).nbEventsRead);
                fSelectedExperiment.dispose();
+        }
         try {
                LTTngTraceNode[] traceEntries = experiment.getTraces();
                int nbTraces = traceEntries.length;
@@ -181,7 +184,7 @@ public class ProjectView extends TmfView {
                 traces[i] = trace;
                }
             fSelectedExperiment = new TmfExperiment<LttngEvent>(LttngEvent.class, expId, traces);
-            fSelectedExperiment.indexExperiment(waitForCompletion);
+
                        // Make sure the lttng-core, experiment selection context is ready
                        // for an event request from any view
                        StateManagerFactory.getExperimentManager().experimentSelected_prep(
index c658ac2b10103de1194a119e8b83436be982fb2f..8dde5f3b35ee897919617f87b496f1e336c5a128 100644 (file)
@@ -407,6 +407,7 @@ public class ResourcesView extends AbsTimeUpdateView implements
         * (org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeSelectionEvent
         * )
         */
+       @Override
        public void tsfTmProcessSelEvent(TmfTimeSelectionEvent event) {
                // common implementation
                super.tsfTmProcessSelEvent(event);
@@ -420,6 +421,7 @@ public class ResourcesView extends AbsTimeUpdateView implements
         * #tsfTmProcessTimeScaleEvent(org.eclipse.linuxtools
         * .tmf.ui.viewers.timeAnalysis.TmfTimeScaleSelectionEvent)
         */
+       @Override
        public void tsfTmProcessTimeScaleEvent(TmfTimeScaleSelectionEvent event) {
                super.tsfTmProcessTimeScaleEvent(event);
        }
@@ -433,6 +435,7 @@ public class ResourcesView extends AbsTimeUpdateView implements
         * ITmfTimeAnalysisEntry[], long, long, boolean, long, long,
         * java.lang.Object)
         */
+       @Override
        public void displayModel(final ITmfTimeAnalysisEntry[] items, final long startBoundTime,
                        final long endBoundTime, final boolean updateTimeBounds, final long startVisibleWindow,
                        final long endVisibleWindow, final Object source) {
@@ -466,6 +469,7 @@ public class ResourcesView extends AbsTimeUpdateView implements
         * 
         * @param signal
         */
+       @Override
        @TmfSignalHandler
        public void synchToTime(TmfTimeSynchSignal signal) {
                super.synchToTime(signal);
@@ -543,6 +547,7 @@ public class ResourcesView extends AbsTimeUpdateView implements
         * @see org.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView#
         * getParamsUpdater()
         */
+       @Override
        protected ParamsUpdater getParamsUpdater() {
                return ResourceModelFactory.getParamsUpdater();
        }
index 234435cffd43d2426cad79f4a7471f297e4a3f43..9d823306d15cbe7b0b26ae80f52b686cb935c579 100644 (file)
@@ -132,6 +132,7 @@ public class ResourcesEventToHandlerFactory extends AbsEventToHandlerResolver {
                return finishProcessor;
        }
 
+       @Override
        public boolean process(LttngEvent trcEvent, LttngTraceState traceSt) {
                if (trcEvent instanceof LttngSyntheticEvent) {
 
index ccce8ea741deecede8d68f8a7f924333ea626c2e..269b0beb682b81f3624ec5f0a4fe366597f727c1 100644 (file)
@@ -478,6 +478,7 @@ public class StatisticsView extends AbsTimeUpdateView {
        /**
         * @return
         */
+       @Override
        public AbsEventToHandlerResolver getEventProcessor() {
                return StatsTimeCountHandlerFactory.getInstance();
        }
@@ -489,6 +490,7 @@ public class StatisticsView extends AbsTimeUpdateView {
         * org.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView#waitCursor
         * (boolean)
         */
+       @Override
        protected void waitCursor(final boolean waitInd) {
                if (treeViewer == null) {
                        return;
index 2fb581e2e37ec0288eb5f66e1c8d2125573bb41f..889082948943aea6488ad9ce246aaf68ed713b3e 100644 (file)
@@ -157,6 +157,7 @@ class StatsTimeCountHandlers {
        final ILttngEventProcessor getAfterHandler() {
                AbstractStatsEventHandler handler = new StatsModeChangeHandler(null) {
                        int sched_hash = StateStrings.Events.LTT_EVENT_SCHED_SCHEDULE.getInName().hashCode();
+                       @Override
                        public boolean process(LttngEvent event, LttngTraceState traceState) {
                                // Step the event counter for any after event
                                stepCount(event, traceState);
index c2cd34637df0d8ceef8760e7089a94f9d10ba391..a4eea698d2ae7a8839dd84bfc5369663e9362538 100644 (file)
@@ -26,15 +26,15 @@ public class TraceDebug {
                String warnTrace = Platform.getDebugOption(pluginID + "/warn");\r
 \r
                if (debugTrace != null) {\r
-                       DEBUG = (new Boolean(debugTrace)).booleanValue();\r
+                       DEBUG = (Boolean.valueOf(debugTrace)).booleanValue();\r
                }\r
 \r
                if (infoTrace != null) {\r
-                       INFO = (new Boolean(infoTrace)).booleanValue();\r
+                       INFO = (Boolean.valueOf(infoTrace)).booleanValue();\r
                }\r
 \r
                if (warnTrace != null) {\r
-                       WARN = (new Boolean(warnTrace)).booleanValue();\r
+                       WARN = (Boolean.valueOf(warnTrace)).booleanValue();\r
                }\r
        }\r
 \r
index 1f9074154ccbf8e96fefb1990eb5443f1cfd362f..6736b0ebfc6a7a578c7c391fa44c00ff2c0449a1 100644 (file)
@@ -34,7 +34,6 @@ import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
 import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
 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.trace.ITmfContext;
 import org.eclipse.linuxtools.tmf.trace.TmfContext;
@@ -57,10 +56,10 @@ public class LttngSyntheticEventProvider extends
 
        // TmfDataProvider<LttngEvent> fExtProvider = null;
        private ITmfDataRequest<LttngSyntheticEvent> fmainRequest = null;
-       private final Map<IStateTraceManager, LttngBaseEventRequest> feventProviderRequests = new HashMap<IStateTraceManager, LttngBaseEventRequest>();
+       private final Map<IStateTraceManager, LttngBaseEventRequest> fEventProviderRequests = new HashMap<IStateTraceManager, LttngBaseEventRequest>();
        private final LttngSyntheticEvent fStatusEvent;
        private final LttngSyntheticEvent fStatusEventAck;
-       private int fmainReqEventCount = 0;
+       private int fMainReqEventCount = 0;
        volatile boolean startIndSent = false;
        private LTTngTreeNode fExperiment = null;
        private ITransEventProcessor fstateUpdateProcessor = StateEventToHandlerFactory
@@ -97,6 +96,7 @@ public class LttngSyntheticEventProvider extends
        // ========================================================================
        // Methods
        // ========================================================================
+
        @SuppressWarnings("unchecked")
        @Override
        public ITmfContext armRequest(
@@ -119,7 +119,7 @@ public class LttngSyntheticEventProvider extends
                reset(fExperiment);
 
                // At least one base provider shall be available
-               if (feventProviderRequests.size() < 1) {
+               if (fEventProviderRequests.size() < 1) {
                        request.cancel();
                        TraceDebug.debug("No Base event providers available");
                        return null;
@@ -129,35 +129,39 @@ public class LttngSyntheticEventProvider extends
                // define event data handling
                ITmfEventRequest<LttngSyntheticEvent> eventRequest = (ITmfEventRequest<LttngSyntheticEvent>) fmainRequest;
                TmfTimeRange reqWindow = eventRequest.getRange();
-               
+
                TraceDebug.debug("Main Synthethic event request started on thread:  " + Thread.currentThread().getName());
 
                // loop for every traceManager in current experiment
-               for (IStateTraceManager traceManager : feventProviderRequests
-                               .keySet()) {
+               boolean subRequestQueued = false;
+               for (IStateTraceManager traceManager : fEventProviderRequests.keySet()) {
 
                        // restore trace state system to nearest check point
                        TmfTimestamp checkPoint = traceManager
                                        .restoreCheckPointByTimestamp(reqWindow.getStartTime());
+
+                       // adjust start time bound to check point
+
                        // validate so checkpoint restore is within requested bounds
                        TmfTimeRange traceRange = traceManager.getTrace().getTimeRange();
-                       if (!(checkPoint.getValue() >= traceRange.getStartTime().getValue()
-                                       && checkPoint.getValue() <= traceRange.getEndTime()
-                                                       .getValue() && checkPoint.getValue() < reqWindow
-                                       .getEndTime().getValue())) {
+                       if ((checkPoint != null) && !(
+                                       checkPoint.getValue() >= traceRange.getStartTime().getValue() &&
+                                       checkPoint.getValue() <= traceRange.getEndTime().getValue() && 
+                                       checkPoint.getValue() < reqWindow.getEndTime().getValue())
+                                       ) {
                                // checkpoint is out of trace bounds
                                continue;
                        }
-
-                       // adjust start time bound to check point
-                       TmfTimeRange adjustedRange = new TmfTimeRange(checkPoint, reqWindow
-                                       .getEndTime());
+                       TmfTimeRange adjustedRange = reqWindow;
+                       if (checkPoint != null) {
+                               adjustedRange = new TmfTimeRange(checkPoint, reqWindow.getEndTime());
+                       }
 
                        LttngTraceState traceModel = traceManager.getStateModel();
                        // create sub-request for one trace within experiment
                        final LttngBaseEventRequest subRequest = new LttngBaseEventRequest(
                                        adjustedRange, reqWindow.getStartTime(), 0,
-                                       TmfEventRequest.ALL_DATA, BLOCK_SIZE, traceModel) {
+                                       TmfEventRequest.ALL_DATA, BLOCK_SIZE, traceModel, ITmfDataRequest.ExecutionType.SHORT) {
 
                                private LttngSyntheticEvent syntheticEvent = null;
                                private LttngSyntheticEvent syntheticAckIndicator = null;
@@ -182,7 +186,8 @@ public class LttngSyntheticEventProvider extends
                                                }
                                        } else {
                                                TraceDebug.debug("handle data received with no data");
-                                               // done();
+//                                             handleProviderDone(getTraceModel());
+//                                             done();
                                        }
                                }
 
@@ -196,6 +201,7 @@ public class LttngSyntheticEventProvider extends
                                        // mark this sub-request as completed
                                        super.done();
                                        handleProviderDone(getTraceModel());
+//                                     super.done();
                                }
                                
                                /**
@@ -214,36 +220,36 @@ public class LttngSyntheticEventProvider extends
                                        // queue the new event data and an ACK
                                        updateSynEvent(e);
 
-
-
                                        // If time at or above requested time, update application
-                                       if (eventTime >= fDispatchTime) {
-                                               // Before update
-                                               syntheticEvent.setSequenceInd(SequenceInd.BEFORE);
-                                               queueResult(syntheticEvent);
-                                               queueResult(syntheticAckIndicator);
-
-                                               // Update state locally
-                                               syntheticEvent.setSequenceInd(SequenceInd.UPDATE);
-                                               fstateUpdateProcessor.process(syntheticEvent,
-                                                               fTraceModel);
-
-                                               // After Update
-                                               syntheticEvent.setSequenceInd(SequenceInd.AFTER);
-                                               queueResult(syntheticEvent);
-                                               queueResult(syntheticAckIndicator);
-
-                                               // increment once per dispatch
-                                               incrementSynEvenCount();
-                                               subEventCount++;
-                                       } else {
-                                               // event time is between checkpoint adjusted time and
-                                               // requested time i.e. application does not expect the
-                                               // event, however the state system needs to be re-built
-                                               // to the dispatch point
-                                               syntheticEvent.setSequenceInd(SequenceInd.UPDATE);
-                                               fstateUpdateProcessor.process(syntheticEvent,
-                                                               fTraceModel);
+                                       try {
+                                               if (eventTime >= fDispatchTime) {
+                                                       // Before update
+                                                       syntheticEvent.setSequenceInd(SequenceInd.BEFORE);
+                                                       queueResult(syntheticEvent);
+                                                       queueResult(syntheticAckIndicator);
+
+                                                       // Update state locally
+                                                       syntheticEvent.setSequenceInd(SequenceInd.UPDATE);
+                                                       fstateUpdateProcessor.process(syntheticEvent, fTraceModel);
+
+                                                       // After Update
+                                                       syntheticEvent.setSequenceInd(SequenceInd.AFTER);
+                                                       queueResult(syntheticEvent);
+                                                       queueResult(syntheticAckIndicator);
+
+                                                       // increment once per dispatch
+                                                       incrementSynEvenCount();
+                                                       subEventCount++;
+                                               } else {
+                                                       // event time is between checkpoint adjusted time and
+                                                       // requested time i.e. application does not expect the
+                                                       // event, however the state system needs to be re-built
+                                                       // to the dispatch point
+                                                       syntheticEvent.setSequenceInd(SequenceInd.UPDATE);
+                                                       fstateUpdateProcessor.process(syntheticEvent, fTraceModel);
+                                               }
+                                       } catch (InterruptedException e1) {
+                                               e1.printStackTrace();
                                        }
                                }
 
@@ -278,19 +284,21 @@ public class LttngSyntheticEventProvider extends
                                        return syntheticEvent;
                                }
                        };
-                       
+                                               
                        // preserve the associated sub request to control it e.g.
                        // cancellation
-                       feventProviderRequests.put(traceManager, subRequest);
+                       fEventProviderRequests.put(traceManager, subRequest);
 
                        // start request
                        TmfTrace<LttngEvent> provider = (TmfTrace<LttngEvent>) traceManager
                                        .getTrace();
+                       // provider.sendRequest(subRequest, ExecutionType.LONG);
                        provider.sendRequest(subRequest);
+                       subRequestQueued = true;
                }
 
                // Return a dummy context, not used for relay provider
-               return new TmfContext();
+               return (subRequestQueued) ? new TmfContext() : null;
        }
 
        /**
@@ -302,8 +310,12 @@ public class LttngSyntheticEventProvider extends
                startIndEvent.setSequenceInd(SequenceInd.STARTREQ);
 
                // Notify application
-               queueResult(startIndEvent);
-               queueResult(fStatusEventAck);
+               try {
+                       queueResult(startIndEvent);
+                       queueResult(fStatusEventAck);
+               } catch (InterruptedException e) {
+                       e.printStackTrace();
+               }
 
                // Notify state event processor
                fstateUpdateProcessor.process(startIndEvent, null);
@@ -321,7 +333,7 @@ public class LttngSyntheticEventProvider extends
                // handle completion and cancellations properly
 
                // Close the main request when all sub-requests are marked completed
-               for (LttngBaseEventRequest subRequest : feventProviderRequests.values()) {
+               for (LttngBaseEventRequest subRequest : fEventProviderRequests.values()) {
                        if (subRequest != null) {
                                if (!subRequest.isCompleted()) {
                                        // Not ready to complete main request
@@ -333,27 +345,34 @@ public class LttngSyntheticEventProvider extends
                // All sub-requests are marked completed so the main request can be
                // completed as well
                // Notify application,
-               LttngSyntheticEvent finishEvent = new LttngSyntheticEvent(fStatusEvent);
-               finishEvent.setSequenceInd(SequenceInd.ENDREQ);
-               finishEvent.setTraceModel(traceModel);
-               queueResult(finishEvent);
-               queueResult(fStatusEventAck);
-               // End the loop in the main request
-               queueResult(LttngSyntheticEvent.NullEvent);
+//             LttngSyntheticEvent finishEvent = new LttngSyntheticEvent(fStatusEvent);
+//             finishEvent.setSequenceInd(SequenceInd.ENDREQ);
+//             finishEvent.setTraceModel(traceModel);
+
+               try {
+//                     queueResult(finishEvent);
+//                     queueResult(fStatusEventAck);
+                       // End the loop in the main request
+                       queueResult(LttngSyntheticEvent.NullEvent);
+               } catch (InterruptedException e) {
+                       // System.out.println(getName() +
+                       // ":handleProviderDone() failed to queue request");
+                       e.printStackTrace();
+               }
        }
 
        /**
         * Increment the global event counter i.e. events from any sub requests
         */
        private synchronized void incrementSynEvenCount() {
-               fmainReqEventCount++;
+               fMainReqEventCount++;
        }
 
        /**
         * @return
         */
        public synchronized int getSynEvenCount() {
-               return fmainReqEventCount;
+               return fMainReqEventCount;
        }
 
        /**
@@ -361,19 +380,19 @@ public class LttngSyntheticEventProvider extends
         * 
         * @param experimentNode
         */
-       public /* synchronized */ void reset(LTTngTreeNode experimentNode) {
+       public synchronized void reset(LTTngTreeNode experimentNode) {
 
                fmainRequest = null;
 
                // Make sure previous request are terminated
-               for (LttngBaseEventRequest tmpRequest : feventProviderRequests.values()) {
+               for (LttngBaseEventRequest tmpRequest : fEventProviderRequests.values()) {
                        if (tmpRequest != null && !tmpRequest.isCompleted()) {
                                tmpRequest.cancel();
                        }
                }
 
-               feventProviderRequests.clear();
-               fmainReqEventCount = 0;
+               fEventProviderRequests.clear();
+               fMainReqEventCount = 0;
                startIndSent = false;
 
                // set of base event providers
@@ -381,7 +400,7 @@ public class LttngSyntheticEventProvider extends
                        LTTngTreeNode[] traces = fExperiment.getChildren();
                        for (LTTngTreeNode trace : traces) {
                                IStateTraceManager traceBaseEventProvider = (IStateTraceManager) trace;
-                               feventProviderRequests.put(traceBaseEventProvider, null);
+                               fEventProviderRequests.put(traceBaseEventProvider, null);
                        }
                }
 
@@ -413,7 +432,7 @@ public class LttngSyntheticEventProvider extends
         * org.eclipse.linuxtools.tmf.component.TmfDataProvider#sendRequest(org.
         * eclipse.linuxtools.tmf.request.TmfDataRequest)
         */
-       public void sendRequest(final TmfDataRequest<LttngSyntheticEvent> request) {
+       public void sendRequest(final ITmfDataRequest<LttngSyntheticEvent> request) {
                super.sendRequest(request);
                if (waitForRequest) {
                        try {
index 3204207bb93794ab883d4cbe785689e567c0a610..ea4a01025b9ec40d848f600c1c22746d31358cb8 100644 (file)
@@ -170,13 +170,13 @@ public class LttngEvent extends TmfEvent {
     
     @Override
        public String toString() {
-       String returnedData="";
+       StringBuffer result= new StringBuffer("[LttngEvent(");
+       result.append("Timestamp:" + getTimestamp().getValue());
+       result.append(",Channel:"  + getChannelName());
+       result.append(",CPU:"      + getCpuId());
+       result.append(",Marker:"   + getMarkerName());
+       result.append(",Content:"  + getContent() + ")]");
        
-       returnedData += "Event timestamp:" + this.getTimestamp().getValue() + " ";
-       returnedData += "Channel:" + getChannelName() + " ";
-       returnedData += "CPU:" + getCpuId() + " ";
-       returnedData += "Marker:" + getMarkerName() + " ";
-       
-       return returnedData;
+       return result.toString();
     }
 }
index 116b90e058907f7d576ce465b2d014b9b54f801d..c8b6d454082c79711811b4c684d3766a419da3a4 100644 (file)
@@ -255,6 +255,7 @@ public class LttngEventContent extends TmfEventContent {
         
         StringBuffer strBuffer = new StringBuffer();
         for ( int pos=0; pos < allFields.length; pos++) {
+               if (pos != 0) strBuffer.append(",");
                strBuffer.append(allFields[pos].toString());
         }
         
index 52aee15cd5950a9c2bd6f58ba09eb3861a72f972..d348e161dc135655b8b6ce4cc3608219dccedbe1 100644 (file)
@@ -125,7 +125,8 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#getParentTrace()
         */
-    public TmfTrace<LttngEvent> getParentTrace() {
+       @Override
+   public TmfTrace<LttngEvent> getParentTrace() {
                if (baseEvent != null) {
                        return baseEvent.getParentTrace();
                } else {
@@ -140,6 +141,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * org.eclipse.linuxtools.lttng.event.LttngEvent#setParentTrace(org.eclipse
         * .linuxtools.tmf.trace.TmfTrace)
         */
+       @Override
        public void setParentTrace(TmfTrace<LttngEvent> parentTrace) {
                if (baseEvent != null) {
                        baseEvent.setParentTrace(parentTrace);
@@ -153,6 +155,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#getChannelName()
         */
+       @Override
        public String getChannelName() {
                if (baseEvent != null) {
                        return baseEvent.getChannelName();
@@ -166,6 +169,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#getCpuId()
         */
+       @Override
        public long getCpuId() {
                if (baseEvent != null) {
                        return baseEvent.getCpuId();
@@ -179,6 +183,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#getMarkerName()
         */
+       @Override
        public String getMarkerName() {
                if (baseEvent != null) {
                        return baseEvent.getMarkerName();
@@ -192,6 +197,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#getContent()
         */
+       @Override
        public LttngEventContent getContent() {
                if (baseEvent != null) {
                        return baseEvent.getContent();
@@ -207,6 +213,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * org.eclipse.linuxtools.lttng.event.LttngEvent#setContent(org.eclipse.
         * linuxtools.lttng.event.LttngEventContent)
         */
+       @Override
        public void setContent(LttngEventContent newContent) {
                if (baseEvent != null) {
                        baseEvent.setContent(newContent);
@@ -220,6 +227,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#getType()
         */
+       @Override
        public LttngEventType getType() {
                if (baseEvent != null) {
                        return baseEvent.getType();
@@ -235,6 +243,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * org.eclipse.linuxtools.lttng.event.LttngEvent#setType(org.eclipse.linuxtools
         * .lttng.event.LttngEventType)
         */
+       @Override
        public void setType(LttngEventType newType) {
                if (baseEvent != null) {
                        baseEvent.setType(newType);
@@ -250,6 +259,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * org.eclipse.linuxtools.lttng.event.LttngEvent#updateJniEventReference
         * (org.eclipse.linuxtools.lttng.jni.JniEvent)
         */
+       @Override
        public void updateJniEventReference(JniEvent newJniEventReference) {
                if (baseEvent != null) {
                        baseEvent.updateJniEventReference(newJniEventReference);
@@ -263,6 +273,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#convertEventTmfToJni()
         */
+       @Override
        public JniEvent convertEventTmfToJni() {
                if (baseEvent != null) {
                        return baseEvent.convertEventTmfToJni();
@@ -276,6 +287,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#isNullRef()
         */
+       @Override
        public boolean isNullRef() {
                return this == NullEvent;
        }
@@ -285,6 +297,7 @@ public class LttngSyntheticEvent extends LttngEvent {
         * 
         * @see org.eclipse.linuxtools.lttng.event.LttngEvent#toString()
         */
+       @Override
        public String toString() {
                if (baseEvent != null) {
                        return baseEvent.toString();
index 65f40aca75a07a073b88d277459af821d1f236f1..65de900fdcd61ec868056ce2b69bc54352dab544 100644 (file)
@@ -60,6 +60,7 @@ public class LTTngTreeNode extends
         * @see
         * org.eclipse.linuxtools.lttng.model.LTTngTreeNodeGeneric#getChildren()
         */
+       @Override
        public LTTngTreeNode[] getChildren() {
                return childrenToArray(fchildren.values(), this.getClass());
        }
index b46cc52d757131f684370f255fbc0a47b680e295..9f3a1426d10279e25cc2f7c9b8971b78a69d4cdf 100644 (file)
@@ -345,6 +345,7 @@ public abstract class LTTngTreeNodeGeneric<E extends LTTngTreeNodeGeneric<E>>
         * 
         * @see org.eclipse.linuxtools.tmf.event.TmfData#isNullRef()
         */
+       @Override
        public boolean isNullRef() {
                return false;
        }
index ce3ff8104b9a4c26000c990b2c291c0f8a82a24e..e9cc6fdd246bff56f6b8db04c50a8e53d9469d83 100644 (file)
@@ -16,6 +16,7 @@ import org.eclipse.linuxtools.lttng.state.model.LttngTraceState;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
 import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
 
 /**
@@ -55,8 +56,8 @@ public abstract class LttngBaseEventRequest extends TmfEventRequest<LttngEvent>
         */
        public LttngBaseEventRequest(TmfTimeRange range, TmfTimestamp dispatchTime,
                        long offset, int nbEvents, int maxBlockSize,
-                       LttngTraceState traceModel) {
-               super(LttngEvent.class, range, nbEvents, maxBlockSize);
+                       LttngTraceState traceModel, ITmfDataRequest.ExecutionType execType) {
+               super(LttngEvent.class, range, nbEvents, maxBlockSize, execType);
                ftraceModel = traceModel;
                fDispatchTime = dispatchTime;
        }
index ee8bd416dcd27e78ecbcb7b342dd374c33c78fb0..ab4889d05bbbce59f5eec7cffb51c924ea7e4ca0 100644 (file)
@@ -134,7 +134,7 @@ public class LttngSyntEventRequest extends TmfEventRequest<LttngSyntheticEvent>
         * org.eclipse.linuxtools.lttng.request.ILttngSyntEventRequest#getEventCount
         * ()
         */
-       public Long getSynEventCount() {
+       public synchronized Long getSynEventCount() {
                return feventCount;
        }
 
@@ -165,6 +165,7 @@ public class LttngSyntEventRequest extends TmfEventRequest<LttngSyntheticEvent>
         * 
         * @see org.eclipse.linuxtools.tmf.request.TmfDataRequest#handleCompleted()
         */
+       @Override
        public void handleCompleted() {
                // notify listeners
                notifyCompletion();
index c74626ce44aa27a6e7cdd9bef89060c3ba208456..dbbf5b26cc4a2def5dc0240cbc10ae6179425ad6 100644 (file)
@@ -53,21 +53,8 @@ public abstract class AbsEventToHandlerResolver implements
        public abstract ILttngEventProcessor getStateUpdaterProcessor(
                        String eventType);
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * org.eclipse.linuxtools.lttng.state.evProcessor.ILttngEventProcessor#process
-        * (org.eclipse.linuxtools.lttng.event.LttngEvent,
-        * org.eclipse.linuxtools.lttng.state.model.LttngTraceState)
-        */
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * org.eclipse.linuxtools.lttng.state.evProcessor.ILttngEventProcessor#process
-        * (org.eclipse.linuxtools.lttng.event.LttngEvent,
-        * org.eclipse.linuxtools.lttng.state.model.LttngTraceState)
+       /* (non-Javadoc)
+        * @see org.eclipse.linuxtools.lttng.state.evProcessor.ILttngEventProcessor#process(org.eclipse.linuxtools.lttng.event.LttngEvent, org.eclipse.linuxtools.lttng.state.model.LttngTraceState)
         */
        public boolean process(LttngEvent trcEvent, LttngTraceState traceSt) {
                if (trcEvent instanceof LttngSyntheticEvent) {
@@ -108,14 +95,17 @@ public abstract class AbsEventToHandlerResolver implements
 
                                // TODO: Implement filter of events not associated to this trace
                                // Make sure the event received is associated to this trace
-                               // handling context
-                               if (traceSt != null
-                                               && trcEvent.getParentTrace() != traceSt.getContext()
-                                                               .getTraceIdRef()) {
-                                       // increment the number of events filtered out
-                                       filteredOutEventsCount++;
-                                       return false;
-                               }
+                               // handling context, Implementing a trace compare for each event
+                               // is not acceptable due to performance, and a reference check
+                               // may not be feasible since there are trace clones used either
+                               // to build the state system check points or UI requests.
+
+                               // if (traceSt != null && trcEvent.getParentTrace() !=
+                               // traceSt.getContext().getTraceIdRef()) {
+                               // // increment the number of events filtered out
+                               // filteredOutEventsCount++;
+                               // return false;
+                               // }
                        }
 
                        if (processor != null) {
index 2acc221d079376e6b9bffa4c40b4d75ea8ed799b..5838443e7c7ed18f6a70f0a2c730e6e1c97e9f43 100644 (file)
@@ -48,7 +48,8 @@ public abstract class AbsStateUpdate extends AbsStateProcessing implements
                exe_state.setEntry_Time(eventTime.getValue());
                exe_state.setChange_Time(eventTime.getValue());
                exe_state.setCum_cpu_time(0L);
-               exe_state.setProc_status(process.getState().getProc_status());
+//             if (process != null)
+                       exe_state.setProc_status(process.getState().getProc_status());
                process.pushToExecutionStack(exe_state);
        }
 
@@ -128,7 +129,7 @@ public abstract class AbsStateUpdate extends AbsStateProcessing implements
                LttngProcessState process = traceSt.getRunning_process().get(cpu);
                Long curr_function = process.getCurrent_function();
 
-               if (curr_function != null && curr_function != funcptr) {
+               if (curr_function != null && !curr_function.equals(funcptr)) {
                        TraceDebug.debug("Different functions: " + funcptr + " current: "
                                        + curr_function + " time stamp: "
                                        + trcEvent.getTimestamp().toString());
index d15b2008313e260d88e64584ecde720dd0d8cbc1..c4b604eff96447e68b0cc33f15f9438ff8991344 100644 (file)
@@ -223,7 +223,7 @@ class StateUpdateHandlers {
                                                Fields.LTT_FIELD_IRQ_ID);
                                if (irq == null || traceSt.getIrq_states().get(irq) == null) {
                                        if (irq != null) {
-                                               System.out.println("Invalid irq (" + irq + "), ts = " + trcEvent.getOriginalTimestamp());
+                                               TraceDebug.debug("Invalid irq (" + irq + "), ts = " + trcEvent.getOriginalTimestamp());
                                        }
                                        return true;
                                }
index ad3a37cecebcb4e613a2158b1485c5da17033746..9258dc13f830638d7e0d4f98d822f608ba0a8789 100644 (file)
@@ -14,40 +14,37 @@ package org.eclipse.linuxtools.lttng.state.experiment;
 
 import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.lttng.model.LTTngTreeNode;
-import org.eclipse.linuxtools.lttng.request.ILttngSyntEventRequest;
-import org.eclipse.linuxtools.lttng.request.IRequestStatusListener;
-import org.eclipse.linuxtools.lttng.state.evProcessor.ITransEventProcessor;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
 
 public interface IStateExperimentManager {
 
-       /**
-        * Read all available traces from the nearest checkpoint from start position
-        * to the end of a specified time range. One request per trace in the
-        * experiment will be triggered
-        * 
-        * @param trange
-        * @param obs
-        * @param transactionID
-        * @param display
-        * @return
-        */
-       public abstract ILttngSyntEventRequest readExperimentTimeWindow(
-                       TmfTimeRange trange,
-                       Object origin, IRequestStatusListener listener,
-                       ITransEventProcessor processor);
-
-       /**
-        * Read available traces from the Experiment start time, One request per
-        * trace in the Experiment
-        * 
-        * @param source
-        * @param listener
-        * @param processor
-        */
-       public abstract void readExperiment(Object source,
-                       IRequestStatusListener listener, ITransEventProcessor processor);
+//     /**
+//      * Read all available traces from the nearest checkpoint from start position
+//      * to the end of a specified time range. One request per trace in the
+//      * experiment will be triggered
+//      * 
+//      * @param trange
+//      * @param obs
+//      * @param transactionID
+//      * @param display
+//      * @return
+//      */
+//     public abstract ILttngSyntEventRequest readExperimentTimeWindow(
+//                     TmfTimeRange trange,
+//                     Object origin, IRequestStatusListener listener,
+//                     ITransEventProcessor processor);
+//
+//     /**
+//      * Read available traces from the Experiment start time, One request per
+//      * trace in the Experiment
+//      * 
+//      * @param source
+//      * @param listener
+//      * @param processor
+//      */
+//     public abstract void readExperiment(Object source,
+//                     IRequestStatusListener listener, ITransEventProcessor processor);
 
        /**
         * A new Experiment selected, notification received from the framework
index 1efc21dd6c6ffae899fcb6bec2249ca16001f04f..d99d6081e3e58cfe37ad5a78e863dfba50b06d77 100644 (file)
  *******************************************************************************/
 package org.eclipse.linuxtools.lttng.state.experiment;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.eclipse.linuxtools.lttng.TraceDebug;
 import org.eclipse.linuxtools.lttng.control.LttngCoreProviderFactory;
 import org.eclipse.linuxtools.lttng.control.LttngSyntheticEventProvider;
 import org.eclipse.linuxtools.lttng.event.LttngEvent;
+import org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent;
+import org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent.SequenceInd;
 import org.eclipse.linuxtools.lttng.model.LTTngTreeNode;
-import org.eclipse.linuxtools.lttng.request.ILttngSyntEventRequest;
-import org.eclipse.linuxtools.lttng.request.IRequestStatusListener;
 import org.eclipse.linuxtools.lttng.signal.ILttExperimentSelectedListener;
 import org.eclipse.linuxtools.lttng.signal.StateExperimentListener;
-import org.eclipse.linuxtools.lttng.state.evProcessor.ITransEventProcessor;
 import org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager;
+import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
+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.signal.TmfExperimentUpdatedSignal;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
 
@@ -41,6 +48,13 @@ public class StateExperimentManager extends LTTngTreeNode implements
                                                                                                                // supported
        private final StateExperimentListener fexperimentListener;
        private boolean fwaitForCompletion = false;
+       /**
+        * Used to route incoming events to proper trace manager, during check point
+        * building
+        */
+       private final Map<String, IStateTraceManager> ftraceToManagerMap = new HashMap<String, IStateTraceManager>();
+       private LttngSyntheticEvent syntheticEvent = null;
+       private ITmfEventRequest<LttngEvent> fStateCheckPointRequest = null;
 
 
        // ========================================================================
@@ -57,55 +71,55 @@ public class StateExperimentManager extends LTTngTreeNode implements
        // Methods
        // =======================================================================
 
-       /* (non-Javadoc)
-        * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#readExperimentTimeWindow(org.eclipse.linuxtools.tmf.event.TmfTimeRange, java.lang.String, org.eclipse.linuxtools.lttng.state.IStateDataRequestListener)
-        */
-       public ILttngSyntEventRequest readExperimentTimeWindow(TmfTimeRange trange,
-                       Object source, IRequestStatusListener listener,
-                       ITransEventProcessor processor) {
-
-               ILttngSyntEventRequest request = null;
-
-               // validate
-               if (fSelectedExperiment != null) {
-                       // Get all trace manager nodes
-                       LTTngTreeNode[] traceMgrs = fSelectedExperiment.getChildren();
-
-                       if (traceMgrs != null && traceMgrs.length > 0) {
-                               IStateTraceManager traceManager;
-                               // Trigger one request per trace
-                               for (LTTngTreeNode traceNode : traceMgrs) {
-                                       traceManager = (IStateTraceManager) traceNode;
-                                       request = traceManager.executeDataRequest(trange, source,
-                                                       listener,
-                                                       processor);
-                               }
-                       }
-               } else {
-                       if (fSelectedExperiment == null) {
-                               TraceDebug.debug("No experiment selected");
-                       }
-               }
-
-               return request;
-       }
+//     /* (non-Javadoc)
+//      * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#readExperimentTimeWindow(org.eclipse.linuxtools.tmf.event.TmfTimeRange, java.lang.String, org.eclipse.linuxtools.lttng.state.IStateDataRequestListener)
+//      */
+//     public ILttngSyntEventRequest readExperimentTimeWindow(TmfTimeRange trange,
+//                     Object source, IRequestStatusListener listener,
+//                     ITransEventProcessor processor) {
+//
+//             ILttngSyntEventRequest request = null;
+//
+//             // validate
+//             if (fSelectedExperiment != null) {
+//                     // Get all trace manager nodes
+//                     LTTngTreeNode[] traceMgrs = fSelectedExperiment.getChildren();
+//
+//                     if (traceMgrs != null && traceMgrs.length > 0) {
+//                             IStateTraceManager traceManager;
+//                             // Trigger one request per trace
+//                             for (LTTngTreeNode traceNode : traceMgrs) {
+//                                     traceManager = (IStateTraceManager) traceNode;
+//                                     request = traceManager.executeDataRequest(trange, source,
+//                                                     listener,
+//                                                     processor);
+//                             }
+//                     }
+//             } else {
+//                     if (fSelectedExperiment == null) {
+//                             TraceDebug.debug("No experiment selected");
+//                     }
+//             }
+//
+//             return request;
+//     }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#readExperiment(java.lang.String, org.eclipse.linuxtools.lttng.state.IStateDataRequestListener)
-        */
-       @SuppressWarnings("unchecked")
-       public void readExperiment(Object source, IRequestStatusListener listener,
-                       ITransEventProcessor processor) {
-               // validate
-               if (fSelectedExperiment != null) {
-                       TmfExperiment<LttngEvent> experiment = (TmfExperiment<LttngEvent>) fSelectedExperiment
-                                       .getValue();
-                       TmfTimeRange trange = experiment.getTimeRange();
-                       readExperimentTimeWindow(trange, source, listener, processor);
-               } else {
-                       TraceDebug.debug("No selected experiment available");
-               }
-       }
+//     /* (non-Javadoc)
+//      * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#readExperiment(java.lang.String, org.eclipse.linuxtools.lttng.state.IStateDataRequestListener)
+//      */
+//     @SuppressWarnings("unchecked")
+//     public void readExperiment(Object source, IRequestStatusListener listener,
+//                     ITransEventProcessor processor) {
+//             // validate
+//             if (fSelectedExperiment != null) {
+//                     TmfExperiment<LttngEvent> experiment = (TmfExperiment<LttngEvent>) fSelectedExperiment
+//                                     .getValue();
+//                     TmfTimeRange trange = experiment.getTimeRange();
+//                     readExperimentTimeWindow(trange, source, listener, processor);
+//             } else {
+//                     TraceDebug.debug("No selected experiment available");
+//             }
+//     }
        
 
 
@@ -177,25 +191,35 @@ public class StateExperimentManager extends LTTngTreeNode implements
        public void experimentSelected(Object source,
                        TmfExperiment<LttngEvent> experiment) {
                // validate
-               if (experiment == null) {
+               if (experiment == null) { 
+                       TraceDebug.debug("Received expriment is null");
                        return;
                }
 
-               LTTngTreeNode experimentNode = getChildByName(experiment.getName());
-               if (experimentNode != null) {
-                       // get the trace manager nodes
-                       LTTngTreeNode[] traceNodes = experimentNode.getChildren();
-                       for (LTTngTreeNode traceStateManagerNode : traceNodes) {
-                               // The trace node needs to perform its first data request
-                               // for this experiment with the main goal of building its
-                               // checkpoints
-                               if (traceStateManagerNode instanceof ILttExperimentSelectedListener) {
-                                       // no need to provide the trace to the trace manager
-                                       ((ILttExperimentSelectedListener) traceStateManagerNode).experimentUpdated(
-                                                       new TmfExperimentUpdatedSignal(source, experiment, null), fwaitForCompletion);
-                               }
-                       }
+               // If previous request is ongoing, cancel it before requesting a new
+               // one.
+               if (fStateCheckPointRequest != null && !fStateCheckPointRequest.isCompleted()) {
+                       fStateCheckPointRequest.cancel();
                }
+
+               // trigger data request to build the state system check points
+               fStateCheckPointRequest = buildCheckPoints(experiment);
+
+//             LTTngTreeNode experimentNode = getChildByName(experiment.getName());
+//             if (experimentNode != null) {
+//                     // get the trace manager nodes
+//                     LTTngTreeNode[] traceNodes = experimentNode.getChildren();
+//                     for (LTTngTreeNode traceStateManagerNode : traceNodes) {
+//                             // The trace node needs to perform its first data request
+//                             // for this experiment with the main goal of building its
+//                             // checkpoints
+//                             if (traceStateManagerNode instanceof ILttExperimentSelectedListener) {
+//                                     // no need to provide the trace to the trace manager
+//                                     ((ILttExperimentSelectedListener) traceStateManagerNode).experimentUpdated(
+//                                                     new TmfExperimentUpdatedSignal(source, experiment, null), fwaitForCompletion);
+//                             }
+//                     }
+//             }
        }
 
        /*
@@ -238,6 +262,7 @@ public class StateExperimentManager extends LTTngTreeNode implements
         * 
         * @see java.lang.Object#finalize()
         */
+       @Override
        protected void finalize() {
                fexperimentListener.dispose();
        }
@@ -254,4 +279,168 @@ public class StateExperimentManager extends LTTngTreeNode implements
                fwaitForCompletion = wait;
        }
 
+       private ITmfEventRequest<LttngEvent> buildCheckPoints(TmfExperiment<LttngEvent> experiment) {
+               // validate
+               if (experiment == null) {
+                       TraceDebug.debug("Received expriment is null");
+                       return null;
+               }
+               
+               LTTngTreeNode experimentNode = getChildByName(experiment.getName());
+               if (experimentNode == null) {
+                       TraceDebug.debug("Expriment Node " + experiment.getName() + " does not exist");
+                       return null;
+               }
+               
+               // get the trace manager nodes associated to the experiment
+               LTTngTreeNode[] traceNodes = experimentNode.getChildren();
+               synchronized (this) {
+                       ftraceToManagerMap.clear();
+               }
+               
+               ITmfTrace trace;
+               for (LTTngTreeNode traceStateManagerNode : traceNodes) {
+                       IStateTraceManager traceManager;
+                       try {
+                               traceManager = (IStateTraceManager) traceStateManagerNode;
+                       } catch (ClassCastException e) {
+                               System.out.println(e.getStackTrace().toString());
+                               return null;
+                       }
+               
+                       // Clear all previously created check points as preparation to
+                       // re-build
+                       traceManager.clearCheckPoints();
+               
+                       // build the trace to manager mapping for event dispatching
+                       trace = traceManager.getTrace();
+                       synchronized (this) {
+                               ftraceToManagerMap.put(getTraceKey(trace), traceManager);
+                       }
+               }
+               
+               // if no trace mapping
+               if (ftraceToManagerMap.size() < 1) {
+                       TraceDebug.debug("No traces associated to experiment " + experiment.getName());
+                       return null;
+               }
+               
+               // Prepare event data request to build state model
+               ITmfEventRequest<LttngEvent> request = new TmfEventRequest<LttngEvent>(
+                               LttngEvent.class, TmfTimeRange.Eternity,
+                               TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.LONG) {
+               
+                       Long nbEvents = 0L;
+               
+                       /*
+                        * (non-Javadoc)
+                        * 
+                        * @see
+                        * org.eclipse.linuxtools.tmf.request.TmfDataRequest#handleData()
+                        */
+                       @Override
+                       public void handleData() {
+                               TmfEvent[] events = getData();
+                               if (events.length > 0) {
+                                       nbEvents++;
+               
+                                       LttngEvent event = (LttngEvent) events[0];
+                                       ITmfTrace trace = event.getParentTrace();
+                                       IStateTraceManager traceManager = ftraceToManagerMap.get(getTraceKey(trace));
+                                       if (traceManager != null) {
+                                               // obtain synthetic event
+                                               LttngSyntheticEvent synEvent = updateSynEvent(event,
+                                                               traceManager);
+                                               // update state system, and save check points as needed
+                                               traceManager.handleEvent(synEvent, nbEvents);
+                                       } else {
+                                               TraceDebug
+                                                               .debug("StateTraceManager not found for trace"
+                                                                               + trace.getName());
+                                       }
+                               }
+                       }
+               
+                       /*
+                        * (non-Javadoc)
+                        * 
+                        * @see
+                        * org.eclipse.linuxtools.tmf.request.TmfDataRequest#handleFailure()
+                        */
+                       public void handleFailure() {
+                               printCompletedMessage();
+                       }
+                       
+                       /*
+                        * (non-Javadoc)
+                        * 
+                        * @see
+                        * org.eclipse.linuxtools.tmf.request.TmfDataRequest#handleCancel()
+                        */
+                       public void handleCancel() {
+                               printCompletedMessage();
+                       }
+               
+                       /*
+                        * (non-Javadoc)
+                        * 
+                        * @see
+                        * org.eclipse.linuxtools.tmf.request.TmfDataRequest#handleSuccess()
+                        */
+                       public void handleSuccess() {
+                               printCompletedMessage();
+                       }
+               
+                       /**
+                        * @param header
+                        */
+                       private void printCompletedMessage() {
+                               // super.handleCompleted();
+                               if (TraceDebug.isDEBUG()) {
+                                       TraceDebug.debug("Trace check point building completed, number of events handled: " + nbEvents
+                                                       + "\n\t\t");
+                                       for (IStateTraceManager traceMgr : ftraceToManagerMap.values()) {
+                                               TraceDebug.debug(traceMgr.toString() + "\n\t\t");
+                                       }
+                               }
+                       }
+               };
+               
+               // Execute event data request
+               experiment.sendRequest(request);
+
+               if (fwaitForCompletion) {
+                       try {
+                               request.waitForCompletion();
+                       } catch (InterruptedException e) {
+                               e.printStackTrace();
+                       }
+               }
+
+               return request;
+       }
+
+       /**
+        * Simplified trace key used to identify trace within experiment
+        * 
+        * @param trace
+        * @return
+        */
+       private String getTraceKey(ITmfTrace trace) {
+               String traceKey = trace.getPath() + trace.getName();
+               return traceKey;
+       }
+
+       private LttngSyntheticEvent updateSynEvent(LttngEvent e, IStateTraceManager stateTraceManager) {
+               if (syntheticEvent == null || syntheticEvent.getBaseEvent() != e) {
+                       syntheticEvent = new LttngSyntheticEvent(e);
+               }
+
+               // Trace model needed by application handlers
+               syntheticEvent.setTraceModel(stateTraceManager.getStateModel());
+               syntheticEvent.setSequenceInd(SequenceInd.UPDATE);
+
+               return syntheticEvent;
+       }
+
 }
\ No newline at end of file
index 0c336bee9bb1caf2b15a5722eedf2167d0e56bef..ff2a34d2cb2ca3304493caca022f183eeaee5f29 100644 (file)
 package org.eclipse.linuxtools.lttng.state.experiment;
 
 import org.eclipse.linuxtools.lttng.TraceDebug;
-import org.eclipse.linuxtools.lttng.control.LttngCoreProviderFactory;
 import org.eclipse.linuxtools.lttng.model.LTTngTreeNode;
 import org.eclipse.linuxtools.lttng.state.LttngStateException;
-import org.eclipse.linuxtools.lttng.state.model.LttngTraceState;
-import org.eclipse.linuxtools.lttng.state.model.StateModelFactory;
 import org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager;
 import org.eclipse.linuxtools.lttng.state.trace.StateTraceManager;
 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
@@ -71,14 +68,13 @@ public class StateManagerFactory {
                        return managerNode;
                }
 
-               LttngTraceState traceModel = StateModelFactory.getStateEntryInstance();
+//             LttngTraceState traceModel = 
+//             StateModelFactory.getStateEntryInstance();
                StateTraceManager manager = null;
 
                // catch potential construction problems
                try {
-                       manager = new StateTraceManager(experiment.getNextUniqueId(),
-                                       experiment, traceUniqueId, rtrace, traceModel,
-                                       LttngCoreProviderFactory.getEventProvider());
+                       manager = new StateTraceManager(experiment.getNextUniqueId(), experiment, traceUniqueId, rtrace);
 
                        // Allow the possibility to configure the trace state check point
                        // interval at creation time
@@ -109,9 +105,8 @@ public class StateManagerFactory {
         * @param traceUniqueId
         */
        public static void removeManager(ITmfTrace rtrace, LTTngTreeNode rexperiment) {
-               Object experimentObj = rexperiment.getValue();
                if (rtrace != null && rexperiment != null
-                               && experimentObj instanceof TmfExperiment<?>) {
+                               && rexperiment.getValue() instanceof TmfExperiment<?>) {
                        LTTngTreeNode childToremove = rexperiment.getChildByName(rtrace
                                        .getName());
                        if (childToremove != null) {
index f5cb1c7a99cf81c55dba0e9f7e93944e4c1f2b38..d1dd4a11be8116a4a718bcf87f7fec3b5ed47efb 100644 (file)
@@ -489,8 +489,10 @@ class ProcessStateKey {
     
     @Override
     public boolean equals(Object obj) {
+
+       if (obj == null) return false;
                boolean isSame = true;
-        
+               
         if ( obj instanceof ProcessStateKey ) {
                ProcessStateKey procKey = (ProcessStateKey) obj;
                
@@ -524,6 +526,7 @@ class ProcessStateKey {
                        TraceDebug
                                        .debug("ERROR : The received Key is not of the type ProcessStateKey! but "
                                                        + obj.getClass().toString());
+                       return false;
         }
         
         return isSame;
index adffb37a88ed316122aa8ea0e8ebb77bdaa79121..7f66a982ec35d5e22ff75bf20898ddaf9741fdb9 100644 (file)
@@ -54,6 +54,7 @@ public class LTTngStateResource extends
         * org.eclipse.linuxtools.lttng.control.LTTngStateTreeNodeGeneric#getChildren
         * ()
         */
+       @Override
        public LTTngStateResource[] getChildren() {
                return childrenToArray(fchildren.values(), this.getClass());
        }
index 29ed0cf1ee7d5ef33486a7c2078479dc3e4d2b5a..d997e47810cb593efbcc5b6c2caafabaac3c4994 100644 (file)
@@ -1,30 +1,27 @@
 package org.eclipse.linuxtools.lttng.state.trace;
 
-import org.eclipse.linuxtools.lttng.request.ILttngSyntEventRequest;
-import org.eclipse.linuxtools.lttng.request.IRequestStatusListener;
-import org.eclipse.linuxtools.lttng.signal.ILttExperimentSelectedListener;
-import org.eclipse.linuxtools.lttng.state.evProcessor.ITransEventProcessor;
+import org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent;
 import org.eclipse.linuxtools.lttng.state.model.LttngTraceState;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
 
-public interface IStateTraceManager extends ILttExperimentSelectedListener {
-       /**
-        * TODO: Not ready for threading
-        * <p>
-        * Read events within specific time window, e.g. time range selection
-        * </p>
-        * 
-        * @param trange
-        * @param source
-        * @param listener
-        * @param processor
-        * @return
-        */
-       public abstract ILttngSyntEventRequest executeDataRequest(
-                       TmfTimeRange trange, Object source,
-                       IRequestStatusListener listener, ITransEventProcessor processor);
+public interface IStateTraceManager {
+//     /**
+//      * TODO: Not ready for threading
+//      * <p>
+//      * Read events within specific time window, e.g. time range selection
+//      * </p>
+//      * 
+//      * @param trange
+//      * @param source
+//      * @param listener
+//      * @param processor
+//      * @return
+//      */
+//     public abstract ILttngSyntEventRequest executeDataRequest(
+//                     TmfTimeRange trange, Object source,
+//                     IRequestStatusListener listener, ITransEventProcessor processor);
 
        /**
         * used to obtain details on the log associated with this manager e.g.
@@ -55,10 +52,36 @@ public interface IStateTraceManager extends ILttExperimentSelectedListener {
        public abstract TmfTimeRange getExperimentTimeWindow();
 
        /**
+        * Returns the State model used to build the check points for the state
+        * system
+        * 
+        * @return
+        */
+       public abstract LttngTraceState getCheckPointStateModel();
+
+       /**
+        * Returns the State model instance associated with this Trace i.e. not the
+        * checkpoint build state model
         * Returns the State model instance associated with this Trace
         * 
         * @return
         */
        public abstract LttngTraceState getStateModel();
 
-}
\ No newline at end of file
+               
+       /**
+        * Reset previously stored check points, and initialize the associated state
+        * model
+        */
+       public void clearCheckPoints();
+
+       /**
+        * handles incoming events used to build the associated check points, The
+        * user must call clearCheckPoints before the processing the first synthetic
+        * event.
+        * 
+        * @param synEvent
+        * @param eventCount
+        */
+       public void handleEvent(LttngSyntheticEvent synEvent, Long eventCount);
+}
index 479e8d1b4d3340f81cb4aabc6d843988f75a0582..c41c48a3b9ac756f852db77e5450cb4476cc2c7b 100644 (file)
@@ -32,19 +32,16 @@ import org.eclipse.linuxtools.lttng.state.model.StateModelFactory;
 import org.eclipse.linuxtools.lttng.state.resource.ILttngStateContext;
 import org.eclipse.linuxtools.lttng.trace.LTTngTextTrace;
 import org.eclipse.linuxtools.lttng.trace.LTTngTrace;
-import org.eclipse.linuxtools.tmf.component.TmfEventProvider;
 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.experiment.TmfExperiment;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
-import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfCheckpoint;
 import org.eclipse.linuxtools.tmf.trace.TmfLocation;
 
-public class StateTraceManager extends LTTngTreeNode implements
- IStateTraceManager, ILttngStateContext {
+public class StateTraceManager extends LTTngTreeNode implements IStateTraceManager, ILttngStateContext {
 
        // constants
        private static final long DEFAULT_OFFSET = 0L;
@@ -65,17 +62,11 @@ public class StateTraceManager extends LTTngTreeNode implements
        private final HashMap<Long, LttngTraceState> stateCheckpointsList = new HashMap<Long, LttngTraceState>();
        private final Vector<TmfCheckpoint> timestampCheckpointsList = new Vector<TmfCheckpoint>();
        private LttngTraceState fStateModel;
-       private int selectionCount = 0;
+       private LttngTraceState fCheckPointStateModel;
 
        // locks
        private Object checkPointsLock = new Object();
 
-       /**
-        * Could be fixed to trace level from received trace, however preparation
-        * for multiple threads is necessary, a common synthetic event provider at
-        * experiment level is a good start although can be adjusted externally
-        */
-       private TmfEventProvider<LttngSyntheticEvent> fSynEventProvider;
 
        
        // =======================================================================
@@ -86,14 +77,9 @@ public class StateTraceManager extends LTTngTreeNode implements
         * @param parent
         * @param name
         * @param trace
-        * @param stateModel
-        * @param eventProvider
         * @throws LttngStateException
         */
-       public StateTraceManager(Long id, LTTngTreeNode parent, String name,
-                       ITmfTrace trace, LttngTraceState stateModel,
-                       TmfEventProvider<LttngSyntheticEvent> eventProvider)
-                       throws LttngStateException {
+       public StateTraceManager(Long id, LTTngTreeNode parent, String name, ITmfTrace trace) throws LttngStateException {
                super(id, parent, name, trace);
 
                if (trace == null) {
@@ -101,11 +87,15 @@ public class StateTraceManager extends LTTngTreeNode implements
                }
 
                fTrace = trace;
-               fStateModel = stateModel;
-               fStateModel.init(this);
                fStateUpdateProcessor = StateEventToHandlerFactory.getInstance();
-               fSynEventProvider = eventProvider;
+
                init();
+
+               fStateModel = StateModelFactory.getStateEntryInstance(this);
+               fStateModel.init(this);
+
+               fCheckPointStateModel = StateModelFactory.getStateEntryInstance(this);
+               fCheckPointStateModel.init(this);
        }
 
        // =======================================================================
@@ -126,94 +116,10 @@ public class StateTraceManager extends LTTngTreeNode implements
                        fcpuNumber = ((LTTngTextTrace) fTrace).getCpuNumber();
                }
        }
+       
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.eclipse.linuxtools.lttng.signal.ILttExperimentSelectedListener#
-        * experimentSelected(java.lang.Object,
-        * org.eclipse.linuxtools.tmf.experiment.TmfExperiment)
-        */
-       public void experimentSelected(Object source,
-                       TmfExperiment<LttngEvent> experiment) {
-               // Only update experiment is needed for the time being
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.eclipse.linuxtools.lttng.signal.ILttExperimentSelectedListener#
-        * experimentUpdated
-        * (org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal)
-        */
-       public void experimentUpdated(TmfExperimentUpdatedSignal signal, boolean wait) {
-               // initialise check points once per new experiment selection
-
-               synchronized (checkPointsLock) {
-                       stateCheckpointsList.clear();
-                       timestampCheckpointsList.clear();
-               }
-
-               // requested time window from trace start to end, this to
-               // make sure one thread is used so the events arrive in order for proper
-               // building of the checkpoints
-               TmfTimeRange adjustedRange = new TmfTimeRange(fTrace.getTimeRange()
-                               .getStartTime(), fTrace.getTimeRange().getEndTime());
-               // Obtain a dataRequest to pass to the processRequest function
-               ILttngSyntEventRequest request = getDataRequestStateSave(adjustedRange,
-                               null, fStateUpdateProcessor);
-               request.setclearDataInd(true);
-               request.startRequestInd(fSynEventProvider);
-               if (wait) {
-                       try {
-                               request.waitForCompletion();
-                       } catch (InterruptedException e) {
-                               e.printStackTrace();
-                       }
-               }
-       }
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager#
-        * executeDataRequest(org.eclipse.linuxtools.tmf.event.TmfTimeRange,
-        * java.lang.Object,
-        * org.eclipse.linuxtools.lttng.request.IRequestStatusListener,
-        * org.eclipse.linuxtools.lttng.state.evProcessor.ITransEventProcessor)
-        */
-       public ILttngSyntEventRequest executeDataRequest(TmfTimeRange trange,
-                       Object source,
-                       IRequestStatusListener listener, ITransEventProcessor processor) {
-               TmfTimestamp restoredStartTime = restoreCheckPointByTimestamp(trange
-                               .getStartTime());
-               // Adjust the time range to consider rewinding to the start time
-               trange = new TmfTimeRange(restoredStartTime, trange.getEndTime());
-               // Get a data request for the time range we want (nearest checkpoint
-               // to timestamp wanted)
-
-               // Process request to that point
-               ILttngSyntEventRequest request = getDataRequestByTimeRange(trange,
-                               listener, processor);
-               request.setSource(source);
-
-               // don't wait for completion i.e. allow cancellations
-               request.startRequestInd(fSynEventProvider);
-               // fSynEventProvider
-               // .sendRequest((TmfDataRequest<LttngSyntheticEvent>) request);
-
-               if (TraceDebug.isDEBUG()) {
-                       TraceDebug
-                                       .debug(" Time Window requested, (start adjusted to checkpoint): "
-                                                       + trange.getStartTime()
-                                                       + "-"
-                                                       + trange.getEndTime()
-                                                       + " Total number of processes in the State provider: "
-                                                       + fStateModel.getProcesses().length + " Completed");
-               }
 
-               return request;
-       }
 
        /*
         * (non-Javadoc)
@@ -237,13 +143,12 @@ public class StateTraceManager extends LTTngTreeNode implements
         * 
         * @return boolean True if a checkpoint was saved, false otherwise
         */
-       private void saveCheckPointIfNeeded(Long eventCounter,
-                       TmfTimestamp eventTime) {
+       private void saveCheckPointIfNeeded(Long eventCounter, TmfTimestamp eventTime) {
                // Save a checkpoint every LTTNG_STATE_SAVE_INTERVAL event
                if ((eventCounter.longValue() % fcheckPointInterval) == 0) {
                        LttngTraceState stateCheckPoint;
-                       synchronized (fStateModel) {
-                               stateCheckPoint = fStateModel.clone();
+                       synchronized (fCheckPointStateModel) {
+                               stateCheckPoint = fCheckPointStateModel.clone();
                        }
 
                        TraceDebug.debug("Check point created here: " + eventCounter
@@ -256,9 +161,8 @@ public class StateTraceManager extends LTTngTreeNode implements
                                stateCheckpointsList.put(eventCounter, stateCheckPoint);
                                // Save correlation between timestamp and checkpoint index
 
-                               timestampCheckpointsList.add(new TmfCheckpoint(
-                                               new TmfTimestamp(eventTime), new TmfLocation<Long>(
-                                                               eventCounter)));
+                               timestampCheckpointsList.add(new TmfCheckpoint(new TmfTimestamp(eventTime), new TmfLocation<Long>(
+                                               eventCounter)));
                        }
                }
        }
@@ -281,8 +185,8 @@ public class StateTraceManager extends LTTngTreeNode implements
        /*
         * (non-Javadoc)
         * 
-        * @see
-        * org.eclipse.linuxtools.lttng.state.IStateManager#restoreCheckPointByTimestamp
+        * @see org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager#
+        * restoreCheckPointByTimestamp
         * (org.eclipse.linuxtools.tmf.event.TmfTimestamp)
         */
        @SuppressWarnings("unchecked")
@@ -292,8 +196,7 @@ public class StateTraceManager extends LTTngTreeNode implements
 
                // The GUI can have time limits higher than this log, since GUI can
                // handle multiple logs
-               if ((eventTime.getValue() < 0)
-                               || (eventTime.getValue() > experimentRange.getEndTime().getValue())) {
+               if ((eventTime.getValue() < 0) || (eventTime.getValue() > experimentRange.getEndTime().getValue())) {
                        return null;
                }
 
@@ -301,40 +204,38 @@ public class StateTraceManager extends LTTngTreeNode implements
                // can handle multiple traces
                if ((eventTime.getValue() < fTrace.getStartTime().getValue())) {
                        eventTime = fTrace.getStartTime();
-               }
 
-               // Sort the checkpoints, required before the binary search
-               Collections.sort(timestampCheckpointsList);
-               // Initiate the compare with a checkpoint containing the target time
-               // stamp to find
-               int index = Collections.binarySearch(timestampCheckpointsList,
-                               new TmfCheckpoint(eventTime, new TmfLocation<Long>(0L)));
-               // adjust index to round down to earlier checkpoint when exact match not
-               // found
-               index = getPrevIndex(index);
-
-               LttngTraceState traceState;
-               if (index == 0) {
-                       // No checkpoint restore is needed, start with a brand new
-                       // TraceState
-                       traceState = StateModelFactory.getStateEntryInstance(this);
-               } else {
-                       synchronized (checkPointsLock) {
-                               // Useful CheckPoint found
-                               TmfCheckpoint checkpoint = timestampCheckpointsList.get(index);
-                               nearestTimeStamp = checkpoint.getTimestamp();
-                               // get the location associated with the checkpoint
-                               TmfLocation<Long> location = (TmfLocation<Long>) checkpoint
-                                               .getLocation();
-                               // reference a new copy of the checkpoint template
-                               traceState = stateCheckpointsList.get(location.getLocation())
-                                               .clone();
+                       Collections.sort(timestampCheckpointsList);
+                       // Initiate the compare with a checkpoint containing the target time
+                       // stamp to find
+                       int index = Collections.binarySearch(timestampCheckpointsList, new TmfCheckpoint(eventTime,
+                                       new TmfLocation<Long>(0L)));
+                       // adjust index to round down to earlier checkpoint when exact match
+                       // not
+                       // found
+                       index = getPrevIndex(index);
+
+                       LttngTraceState traceState;
+                       if (index == 0) {
+                               // No checkpoint restore is needed, start with a brand new
+                               // TraceState
+                               traceState = StateModelFactory.getStateEntryInstance(this);
+                       } else {
+                               synchronized (checkPointsLock) {
+                                       // Useful CheckPoint found
+                                       TmfCheckpoint checkpoint = timestampCheckpointsList.get(index);
+                                       nearestTimeStamp = checkpoint.getTimestamp();
+                                       // get the location associated with the checkpoint
+                                       TmfLocation<Long> location = (TmfLocation<Long>) checkpoint.getLocation();
+                                       // reference a new copy of the checkpoint template
+                                       traceState = stateCheckpointsList.get(location.getLocation()).clone();
+                               }
                        }
-               }
 
-               // Restore the stored traceState
-               synchronized (fStateModel) {
-                       fStateModel = traceState;
+                       // Restore the stored traceState
+                       synchronized (this) {
+                               fStateModel = traceState;
+                       }
                }
 
                return nearestTimeStamp;
@@ -357,7 +258,6 @@ public class StateTraceManager extends LTTngTreeNode implements
                return roundDownPosition;
        }
 
-
        // TODO: Remove this request type when the UI handle their own requests
        /**
         * Request Event data of a specified time range
@@ -367,100 +267,16 @@ public class StateTraceManager extends LTTngTreeNode implements
         * @param processor
         * @return ILttngEventRequest The request made
         */
-       ILttngSyntEventRequest getDataRequestByTimeRange(TmfTimeRange timeWindow,
-                       IRequestStatusListener listener,
-                       final ITransEventProcessor processor) {
-
-               ILttngSyntEventRequest request = new StateTraceManagerRequest(timeWindow,
-                               DEFAULT_OFFSET, TmfDataRequest.ALL_DATA, DEFAULT_CHUNK,
-                               listener, getExperimentTimeWindow(), processor) {
-               };
-
-               return request;
-       }
-
-       private ILttngSyntEventRequest getDataRequestStateSave(TmfTimeRange timeWindow,
-                       IRequestStatusListener requestListener,
+       ILttngSyntEventRequest getDataRequestByTimeRange(TmfTimeRange timeWindow, IRequestStatusListener listener,
                        final ITransEventProcessor processor) {
 
-               // Create the new request and override the handlePartialResult function
-               ILttngSyntEventRequest request = new StateTraceManagerRequest(timeWindow,
-                               DEFAULT_OFFSET, TmfDataRequest.ALL_DATA, DEFAULT_CHUNK,
-                               requestListener, getExperimentTimeWindow(), processor) {
-
-                       @Override
-                       public void handleCompleted() {
-                               if (isCancelled() || isFailed()) {
-                                       // No notification to end request handlers
-                               } else {
-                                       // Indicates that trace selection has successfully completed
-                                       // i.e. check points have been already build if the number
-                                       // of events exceeded the interval
-                                       setTraceSelectCount(getTraceSelectCount() + 1);
-                               }
-
-                               super.handleCompleted();
-
-                               if (TraceDebug.isDEBUG()) {
-                                       StringBuilder sb = new StringBuilder(
-                                                       "Check Point build Request completed"
-                                                                       + "\n\tEventCount: "
-                                                                       + fprocessor.getStateUpdateCount()
-                                                                       + "\tEvents for a different trace state received: "
-                                                                       + fprocessor.getFilteredOutEventCount()
-                                                                       + "\n\t"
-                                                                       + "Total number of processes in the State provider: "
-                                                                       + fStateModel.getProcesses().length);
-
-                                       TmfTimeRange logTimes = fTrace.getTimeRange();
-                                       sb.append("\n\tTrace time interval for trace "
-                                                       + fTrace.getName()
-                                                       + "\n\t"
-                                                       + new LttngTimestamp(logTimes.getStartTime()));
-                                       sb.append(" - " + new LttngTimestamp(logTimes.getEndTime()));
-                                       sb.append("\n\tRequested Time: "
-                                                       + getRange().getStartTime().toString() + " - "
-                                                       + getRange().getEndTime().toString());
-                                       sb.append("\n\tCheckPoints available at: ");
-                                       for (TmfCheckpoint cpoint : timestampCheckpointsList) {
-                                               sb.append("\n\t" + "Location: " + cpoint.getLocation()
-                                                               + " - " + cpoint.getTimestamp());
-                                       }
-
-                                       TraceDebug.debug(sb.toString());
-                               }
-                       }
-
-                       /*
-                        * (non-Javadoc)
-                        * 
-                        * @see
-                        * org.eclipse.linuxtools.lttng.request.LttngEventRequest#saveCheckPoint
-                        * (java.lang.Long, org.eclipse.linuxtools.tmf.event.TmfTimestamp)
-                        */
-                       public void saveCheckPoint(Long count, TmfTimestamp time) {
-                               saveCheckPointIfNeeded(count, time);
-                       }
-
+               ILttngSyntEventRequest request = new StateTraceManagerRequest(timeWindow, DEFAULT_OFFSET,
+                               TmfDataRequest.ALL_DATA, DEFAULT_CHUNK, listener, getExperimentTimeWindow(), processor) {
                };
 
                return request;
        }
 
-       /**
-        * 
-        * @return
-        */
-       private synchronized int getTraceSelectCount() {
-               return selectionCount;
-       }
-
-       /**
-        * @param value
-        */
-       private synchronized void setTraceSelectCount(int value) {
-               selectionCount = value;
-       }
 
        /*
         * (non-Javadoc)
@@ -475,6 +291,18 @@ public class StateTraceManager extends LTTngTreeNode implements
                }
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager#
+        * getCheckPointStateModel()
+        */
+       public LttngTraceState getCheckPointStateModel() {
+               synchronized (fStateModel) {
+                       return fCheckPointStateModel;
+               }
+       }
+
        /**
         * @return the stateCheckpointsList
         */
@@ -503,13 +331,10 @@ public class StateTraceManager extends LTTngTreeNode implements
                // =======================================================================
                // Constructor
                // =======================================================================
-               public StateTraceManagerRequest(TmfTimeRange range, long offset,
-                               int nbEvents, int maxBlockSize,
-                               IRequestStatusListener listener,
-                               TmfTimeRange experimentTimeRange, ITransEventProcessor processor) {
+               public StateTraceManagerRequest(TmfTimeRange range, long offset, int nbEvents, int maxBlockSize,
+                               IRequestStatusListener listener, TmfTimeRange experimentTimeRange, ITransEventProcessor processor) {
 
-                       super(range, offset, nbEvents, maxBlockSize, listener,
-                                       experimentTimeRange, processor);
+                       super(range, offset, nbEvents, maxBlockSize, listener, experimentTimeRange, processor);
                        fprocessor = processor;
                        TraceDebug.debug("Instance created for range: " + range.toString());
                        fCount = 0L;
@@ -541,8 +366,7 @@ public class StateTraceManager extends LTTngTreeNode implements
 
                                        if (TraceDebug.isDEBUG()) {
                                                if (fCount % 1000 == 0) {
-                                                       TraceDebug.debug("handled: " + fCount
-                                                                       + " sequence: " + synEvent.getSynType());
+                                                       TraceDebug.debug("handled: " + fCount + " sequence: " + synEvent.getSynType());
                                                }
                                        }
                                }
@@ -634,4 +458,63 @@ public class StateTraceManager extends LTTngTreeNode implements
        public ITmfTrace getTraceIdRef() {
                return fTrace;
        }
-}
\ No newline at end of file
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager#clearCheckPoints
+        * ()
+        */
+       public void clearCheckPoints() {
+               synchronized (checkPointsLock) {
+                       stateCheckpointsList.clear();
+                       timestampCheckpointsList.clear();
+
+                       fCheckPointStateModel = StateModelFactory.getStateEntryInstance(this);
+                       try {
+                               fCheckPointStateModel.init(this);
+                       } catch (LttngStateException e) {
+                               e.printStackTrace();
+                       }
+               }
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * org.eclipse.linuxtools.lttng.state.trace.IStateTraceManager#handleEvent
+        * (org.eclipse.linuxtools.lttng.event.LttngSyntheticEvent, java.lang.Long)
+        */
+       public void handleEvent(LttngSyntheticEvent synEvent, Long eventCount) {
+               fStateUpdateProcessor.process(synEvent, fCheckPointStateModel);
+
+               // Save checkpoint as needed
+               saveCheckPointIfNeeded(eventCount - 1, synEvent.getTimestamp());
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see java.lang.Object#toString()
+        */
+       public String toString() {
+               StringBuilder sb = new StringBuilder(super.toString());
+               sb.append("\n\tTotal number of processes in the Shared State model: " + fStateModel.getProcesses().length
+                               + "\n\t" + "Total number of processes in the Check point State model: "
+                               + fCheckPointStateModel.getProcesses().length);
+
+               TmfTimeRange traceTRange = fTrace.getTimeRange();
+               sb.append("\n\tTrace time interval for trace " + fTrace.getName() + "\n\t"
+                               + new LttngTimestamp(traceTRange.getStartTime()));
+               sb.append(" - " + new LttngTimestamp(traceTRange.getEndTime()));
+               sb.append("\n\tCheckPoints available at: ");
+               for (TmfCheckpoint cpoint : timestampCheckpointsList) {
+                       sb.append("\n\t" + "Location: " + cpoint.getLocation() + " - " + cpoint.getTimestamp());
+               }
+
+               return sb.toString();
+       }
+
+}
index eb15be80d871dc7fc03947d5fa68dbfdefd2573c..9254b07a44a02ebf3fc8bef1734eba233479a966 100644 (file)
@@ -80,12 +80,12 @@ public class LTTngTextTrace extends TmfTrace<LttngEvent> implements ITmfTrace {
                fIndexPageSize = 1000;
                
                // Skip indexing if asked
-               if ( skipIndexing == true ) {
+//             if ( skipIndexing == true ) {
                        fCheckpoints.add(new TmfCheckpoint(new LttngTimestamp(0L), new TmfLocation<Long>(0L)));
-               }
-               else {
-                       indexTrace(true);
-               }
+//             }
+//             else {
+//                     indexTrace(true);
+//             }
                
                Long endTime = currentLttngEvent.getTimestamp().getValue();
                positionToFirstEvent();
@@ -143,7 +143,7 @@ public class LTTngTextTrace extends TmfTrace<LttngEvent> implements ITmfTrace {
                // Make sure the event time is consistent
                eventTimestamp.setValue(0L);
        }
-       catch (Exception e) {
+       catch (IOException e) {
                isSuccessful = false;
        }
        
index f5f844a140a55fcf96a84f10626af2bb3e44dbf2..56c801e390ac2e875a2d65d26a98d17943549f90 100644 (file)
@@ -29,11 +29,11 @@ import org.eclipse.linuxtools.lttng.jni.JniMarker;
 import org.eclipse.linuxtools.lttng.jni.JniTrace;
 import org.eclipse.linuxtools.lttng.jni.JniTracefile;
 import org.eclipse.linuxtools.lttng.jni.common.JniTime;
+import org.eclipse.linuxtools.lttng.jni.exception.JniException;
 import org.eclipse.linuxtools.lttng.jni.factory.JniTraceFactory;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.trace.ITmfLocation;
-import org.eclipse.linuxtools.tmf.trace.TmfCheckpoint;
 import org.eclipse.linuxtools.tmf.trace.TmfContext;
 import org.eclipse.linuxtools.tmf.trace.TmfTrace;
 
@@ -156,19 +156,19 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
         // Set the currentEvent to the eventContent
         eventContent.setEvent(currentLttngEvent);
         
-        // Bypass indexing if asked
-        if ( bypassIndexing == false ) {
-            indexTrace(true);
-        }
-        else {
+//        // Bypass indexing if asked
+//        if ( bypassIndexing == false ) {
+//            indexTrace(true);
+//        }
+//        else {
                // Even if we don't have any index, set ONE checkpoint
-               fCheckpoints.add(new TmfCheckpoint(new LttngTimestamp(0L) , new LttngLocation() ) );
+//             fCheckpoints.add(new TmfCheckpoint(new LttngTimestamp(0L) , new LttngLocation() ) );
                
                // Set the start time of the trace
                setTimeRange( new TmfTimeRange( new LttngTimestamp(currentJniTrace.getStartTime().getTime()), 
                                                                        new LttngTimestamp(currentJniTrace.getEndTime().getTime())
                                          ) );
-        }
+//        }
     }
     
     /*
@@ -210,6 +210,51 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
        return returnedTrace;
     }
     
+    @Override
+    public LTTngTrace clone() {
+       LTTngTrace clone = null;
+       try {
+               clone = (LTTngTrace) super.clone();
+                       try {
+                               clone.currentJniTrace = JniTraceFactory.getJniTrace(getPath(), SHOW_LTT_DEBUG_DEFAULT);
+                       } catch (JniException e) {
+                               e.printStackTrace();
+                       }
+            
+            // Export all the event types from the JNI side 
+                       clone.traceTypes      = new HashMap<String, LttngEventType>();
+                       clone.traceTypeNames  = new Vector<String>();
+                       clone.initialiseEventTypes(clone.currentJniTrace);
+            
+            // Verify that all those "default constructor" are safe to use
+                       clone.eventTimestamp  = new LttngTimestamp();
+                       clone.eventSource     = new LttngEventSource();
+                       clone.eventType       = new LttngEventType();
+                       clone.eventContent    = new LttngEventContent(clone.currentLttngEvent);
+                       clone.eventReference  = new LttngEventReference(this.getName());
+            
+            // Create the skeleton event
+                       clone.currentLttngEvent = new LttngEvent(this, clone.eventTimestamp, clone.eventSource, clone.eventType, clone.eventContent, clone.eventReference, null);
+            
+            // Create a new current location
+                       clone.previousLocation = new LttngLocation();
+            
+            // Set the currentEvent to the eventContent
+                       clone.eventContent.setEvent(clone.currentLttngEvent);
+            
+               // Set the start time of the trace
+               setTimeRange(new TmfTimeRange(
+                               new LttngTimestamp(clone.currentJniTrace.getStartTime().getTime()), 
+                               new LttngTimestamp(clone.currentJniTrace.getEndTime().getTime())
+                    ));
+       }
+       catch (CloneNotSupportedException e) {
+       }
+
+       return clone;
+    }
+    
+    
     /*
      * Fill out the HashMap with "Type" (Tracefile/Marker)
      * 
@@ -260,65 +305,65 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
         this.traceTypeNames.add(newTypeKey);
     }
     
-    /**
-     * Index the current trace.
-     * 
-     * @param useless  This boolean is only to comply to the interface and will be ignored.
-     */
-    @Override
-    public synchronized void indexTrace(boolean useless) {
-       
-       long nbEvents=0L;
-       
-       // Start time need to be null to detect none have been set 
-        // LastTime need to exist so we can ajust it as we go
-        LttngTimestamp startTime = null;
-        LttngTimestamp lastTime  = new LttngTimestamp();
-       
-        // Position the trace at the beginning
-        TmfContext context = seekEvent( new LttngTimestamp(0L) );
-        
-        // Read the first event and extract the location
-        LttngEvent tmpEvent = (LttngEvent)getNextEvent(context);
-        
-        // If we read the first event, define the start time.
-        if ( tmpEvent != null ) {
-               startTime = new LttngTimestamp( tmpEvent.getTimestamp() );
-               lastTime.setValue(tmpEvent.getTimestamp().getValue());
-        }
-        
-        // Now, we read each event until we hit the end of the trace
-        // We will create a new checkpoint every "getCacheSize()" event
-        while ( tmpEvent != null) {
-               // Update the last time each time we read a new event
-            lastTime.setValue(tmpEvent.getTimestamp().getValue());
-            
-            // Save a check point if needed
-            if ((nbEvents++ % getCacheSize()) == 0) {
-               // *** IMPORTANT
-               // We need to NEW each stuff we put in checkpoint
-               //      Otherwise everything will be the same!
-                LttngTimestamp tmpTimestamp = new LttngTimestamp( (LttngTimestamp)tmpEvent.getTimestamp() );
-                LttngLocation  newLocation  = new LttngLocation(  (LttngTimestamp)tmpEvent.getTimestamp() );
-                
-                fCheckpoints.add(new TmfCheckpoint(tmpTimestamp, newLocation ) );
-            }
-            // Read the next event
-            tmpEvent = (LttngEvent)getNextEvent(context);
-        }
-        
-        // If we have a start time, we should have an end time as well
-        // Issue the new range
-        if (startTime != null) {
-            setTimeRange( new TmfTimeRange(startTime, lastTime) );
-            notifyListeners(getTimeRange() );
-        }
-        
-        // Ajust the total number of event in the trace
-        fNbEvents = nbEvents;
-        //printCheckpointsVector();
-        //printDebug = true;
-    }
+//    /**
+//     * Index the current trace.
+//     * 
+//     * @param useless  This boolean is only to comply to the interface and will be ignored.
+//     */
+//    @Override
+//    public synchronized void indexTrace(boolean useless) {
+//     
+//     long nbEvents=0L;
+//     
+//     // Start time need to be null to detect none have been set 
+//        // LastTime need to exist so we can ajust it as we go
+//        LttngTimestamp startTime = null;
+//        LttngTimestamp lastTime  = new LttngTimestamp();
+//     
+//        // Position the trace at the beginning
+//        TmfContext context = seekEvent( new LttngTimestamp(0L) );
+//        
+//        // Read the first event and extract the location
+//        LttngEvent tmpEvent = (LttngEvent)getNextEvent(context);
+//        
+//        // If we read the first event, define the start time.
+//        if ( tmpEvent != null ) {
+//             startTime = new LttngTimestamp( tmpEvent.getTimestamp() );
+//             lastTime.setValue(tmpEvent.getTimestamp().getValue());
+//        }
+//        
+//        // Now, we read each event until we hit the end of the trace
+//        // We will create a new checkpoint every "getCacheSize()" event
+//        while ( tmpEvent != null) {
+//             // Update the last time each time we read a new event
+//            lastTime.setValue(tmpEvent.getTimestamp().getValue());
+//            
+//            // Save a check point if needed
+//            if ((nbEvents++ % getCacheSize()) == 0) {
+//             // *** IMPORTANT
+//             // We need to NEW each stuff we put in checkpoint
+//             //      Otherwise everything will be the same!
+//                LttngTimestamp tmpTimestamp = new LttngTimestamp( (LttngTimestamp)tmpEvent.getTimestamp() );
+//                LttngLocation  newLocation  = new LttngLocation(  (LttngTimestamp)tmpEvent.getTimestamp() );
+//                
+//                fCheckpoints.add(new TmfCheckpoint(tmpTimestamp, newLocation ) );
+//            }
+//            // Read the next event
+//            tmpEvent = (LttngEvent)getNextEvent(context);
+//        }
+//        
+//        // If we have a start time, we should have an end time as well
+//        // Issue the new range
+//        if (startTime != null) {
+//            setTimeRange( new TmfTimeRange(startTime, lastTime) );
+//            notifyListeners(getTimeRange() );
+//        }
+//        
+//        // Ajust the total number of event in the trace
+//        fNbEvents = nbEvents;
+//        //printCheckpointsVector();
+//        //printDebug = true;
+//    }
     
     /**
      * Return the latest saved location.
@@ -329,7 +374,7 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
      * @see org.eclipse.linuxtools.lttng.event.LttngLocation
      */
     @Override
-       public ITmfLocation<?> getCurrentLocation() {
+       public synchronized ITmfLocation<?> getCurrentLocation() {
         return previousLocation;
     }
     
@@ -489,6 +534,8 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
      * @see org.eclipse.linuxtools.lttng.event.LttngLocation
      * @see org.eclipse.linuxtools.tmf.trace.TmfContext
      */
+
+    public int nbEventsRead = 0;
     @Override
     public synchronized LttngEvent getNextEvent(TmfContext context) {
        
@@ -517,7 +564,7 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
        // To do so, we avoid moving for call to "GetNextEvent()" that follow call to a call to "ParseEvent()".
        // However, calling ParseEvent() -> GetNextEvent() -> GetNextEvent() will only move next by one.
        
-       // *** Positionning trick :
+       // *** Positioning trick :
        // GetNextEvent only read the trace if : 
        // 1- The last operation was NOT a ParseEvent --> A read is required
        //      OR
@@ -533,6 +580,7 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
                        }
                        // Read the next event from the trace. The last one will NO LONGER BE VALID.
                returnedEvent = readEvent(curLocation);
+               nbEventsRead++;
                
                // Set the operation marker as read to both location, to be able to detect we did "read" this event
                previousLocation.setLastOperationReadNext();
@@ -552,6 +600,9 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
        if ( returnedEvent != null ) {
                previousLocation.setOperationTime((LttngTimestamp)returnedEvent.getTimestamp());
                curLocation.setOperationTime((LttngTimestamp)returnedEvent.getTimestamp());
+               
+               updateIndex(context, context.getRank(), returnedEvent.getTimestamp());
+               context.updateRank(1);
        }
        
        return returnedEvent;
@@ -795,7 +846,7 @@ public class LTTngTrace extends TmfTrace<LttngEvent> {
      * 
      * @see org.eclipse.linuxtools.lttng.event.LttngEvent
      */
-    public LttngEvent getCurrentEvent() {
+    public synchronized LttngEvent getCurrentEvent() {
         return currentLttngEvent;
     }
     
index 104fddca7d46c40acc821a9f311ef78b20289bb5..cdb88b1a1ba796c79e6a59b792e08ba7ddeee82d 100644 (file)
@@ -76,7 +76,7 @@ public class TmfExperimentTest extends TestCase {
     private void setupExperiment() {
        if (fExperiment == null) {
             fExperiment = new TmfExperiment<TmfEvent>(TmfEvent.class, EXPERIMENT, fTraces);
-            fExperiment.indexExperiment(true);
+            fExperiment.indexExperiment();
        }
     }
 
@@ -137,7 +137,7 @@ public class TmfExperimentTest extends TestCase {
 
     public void testParseEvent() throws Exception {
 
-       // On lower bound, returns the first event (ts = 0)
+       // On lower bound, returns the first event (ts = 1)
        TmfContext context = fExperiment.seekEvent(new TmfTimestamp(0, SCALE, 0));
 
        TmfEvent event = fExperiment.parseEvent(context);
index 0a64504b50f3d8d937edaa240c62d8cbb1bbb14c..4d62567007d83c9b8ba5876dbfcc4704e00a270f 100644 (file)
@@ -79,7 +79,7 @@ public class TmfMultiTraceExperimentTest extends TestCase {
     private void setupExperiment() {
        if (fExperiment == null) {
             fExperiment = new TmfExperiment<TmfEvent>(TmfEvent.class, EXPERIMENT, fTrace);
-            fExperiment.indexExperiment(true);
+            fExperiment.indexExperiment();
        }
     }
 
index 54550ed484b3b7f0e62e9920814e6531f7dcf694..f5e0d9a13152a7b185c5471ccfa69dd6bd88c87d 100644 (file)
@@ -73,7 +73,7 @@ public class TmfContextTest extends TestCase {
        public void testTmfContextDefault() {
                TmfContext context = new TmfContext();
                assertEquals("getLocation", null, context.getLocation());
-               assertEquals("getRank",        0, context.getRank());
+               assertEquals("getRank", TmfContext.UNKNOWN_RANK, context.getRank());
        }
 
        public void testTmfContextNoRank() {
@@ -85,9 +85,9 @@ public class TmfContextTest extends TestCase {
                assertEquals("getLocation", fLocation2, context2.getLocation());
                assertEquals("getLocation", fLocation3, context3.getLocation());
 
-               assertEquals("getRank", 0, context1.getRank());
-               assertEquals("getRank", 0, context2.getRank());
-               assertEquals("getRank", 0, context3.getRank());
+               assertEquals("getRank", TmfContext.UNKNOWN_RANK, context1.getRank());
+               assertEquals("getRank", TmfContext.UNKNOWN_RANK, context2.getRank());
+               assertEquals("getRank", TmfContext.UNKNOWN_RANK, context3.getRank());
        }
 
        public void testTmfContext() {
index e9a2711c0f8bd0eaff42f3ec593e3927410e6028..265a0b49117847a3c96b4c753b4c583c39092898 100644 (file)
@@ -76,7 +76,7 @@ public class TmfExperimentTest extends TestCase {
     private void setupExperiment() {
        if (fExperiment == null) {
             fExperiment = new TmfExperiment<TmfEvent>(TmfEvent.class, EXPERIMENT, fTraces);
-            fExperiment.indexExperiment(true);
+            fExperiment.indexExperiment();
        }
     }
 
index f5b51aab43323409b7bec1707caff48f87648d4b..43688b7d519a7d04526a5e2032059091df6c213c 100644 (file)
@@ -85,7 +85,7 @@ public class TmfTraceTest extends TestCase {
                URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path), null);
                        File test = new File(FileLocator.toFileURL(location).toURI());
                fTrace = new TmfTraceStub(test.getPath(), BLOCK_SIZE, false);
-               fTrace.indexTrace(true);
+//             fTrace.indexTrace(true);
                } catch (URISyntaxException e) {
                        e.printStackTrace();
                } catch (IOException e) {
index 6f2f65bd3b9167a317749685bab0e6601445c6b5..07665e7a7ed418e8b89885d5107d6419d8ce8460 100644 (file)
@@ -65,7 +65,7 @@ public class TmfSyntheticEventProviderStub extends TmfEventProvider<TmfSynthetic
                        }
                }
                };
-        provider.sendRequest(subRequest); // , false);
+        provider.sendRequest(subRequest);
 
         // Return a dummy context
         return new TmfContext();
@@ -73,8 +73,17 @@ public class TmfSyntheticEventProviderStub extends TmfEventProvider<TmfSynthetic
 
        // Queue 2 synthetic events per base event
        private void handleIncomingData(TmfEvent e) {
-               queueResult(new TmfSyntheticEventStub(e));
-               queueResult(new TmfSyntheticEventStub(e));
+               try {
+                       queueResult(new TmfSyntheticEventStub(e));
+                       queueResult(new TmfSyntheticEventStub(e));
+               } catch (InterruptedException e1) {
+                       e1.printStackTrace();
+               }
+       }
+
+       @Override
+       public void sendRequest(ITmfDataRequest<TmfSyntheticEventStub> request) {
+               super.sendRequest(request);
        }
        
 }
index 99ac6f41b847b4e72c64e0f2a0f9242a80508682..c5901b08f8d511c2afc8e2fc7ab9d515841ce54a 100644 (file)
@@ -18,6 +18,7 @@ import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
+import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
 import org.eclipse.swt.SWT;
@@ -168,6 +169,7 @@ public class TmfEventsView extends TmfView {
                                                        cache = tmpEvent;
                                                        cacheStartIndex = index;
                                                        cacheEndIndex = index + tmpEvent.length;
+//                                                     System.out.println("TmfTableView: entry#" + index);
                                                }
                                        }
                                };
@@ -258,11 +260,9 @@ public class TmfEventsView extends TmfView {
         // Perform the updates on the UI thread
         fTable.getDisplay().asyncExec(new Runnable() {
                public void run() {
-                       // TODO: Potentially long operation. Add some feedback for the user
                                fTable.setSelection(0);
-               fTable.clearAll();
+               fTable.removeAll();
                                cacheStartIndex = cacheEndIndex = 0;    // Clear the cache
-               fTable.setItemCount((int) fExperiment.getNbEvents());        
                }
         });
     }
@@ -273,12 +273,31 @@ public class TmfEventsView extends TmfView {
        fTable.getDisplay().asyncExec(new Runnable() {
                        public void run() {
                                if (!fTable.isDisposed() && fExperiment != null) {
-                               fTable.setItemCount((int) fExperiment.getNbEvents());        
+                                       int nbEvents = (int) fExperiment.getNbEvents();
+                               fTable.setItemCount((nbEvents > 100) ? nbEvents : 100);        
                                }
                        }
         });
     }
 
+       private boolean fRefreshPending = false;
+       @TmfSignalHandler
+    public synchronized void rangeSynched(TmfRangeSynchSignal signal) {
+               if (!fRefreshPending) {
+                       // Perform the refresh on the UI thread
+                       fRefreshPending = true;
+                       fTable.getDisplay().asyncExec(new Runnable() {
+                               public void run() {
+                                       fRefreshPending = false;
+                                       if (!fTable.isDisposed() && fExperiment != null) {
+                                               fTable.setItemCount((int) fExperiment.getNbEvents());
+//                                             if (Tracer.INTERNALS) Tracer.trace("TmfEventsView: itemCount=" + fTable.getItemCount());
+                                       }
+                               }
+                       });
+               }
+    }
+
 //    @TmfSignalHandler
 //    public void currentTimeUpdated(TmfTimeSynchSignal signal) {
 //     if (signal.getSource() != fTable && fExperiment != null) {
index 8b5ba374724c83c85a59e6d780fbed3254f140ed..c6c636cd199aa645c9c5d755bde5655e34043ffd 100644 (file)
@@ -1,2 +1,9 @@
-org.eclipse.linuxtools.tmf/trace=false
+org.eclipse.linuxtools.tmf/error=false
+org.eclipse.linuxtools.tmf/warning=false
+org.eclipse.linuxtools.tmf/info=false
 
+org.eclipse.linuxtools.tmf/component=false
+org.eclipse.linuxtools.tmf/request=false
+org.eclipse.linuxtools.tmf/signals=false
+org.eclipse.linuxtools.tmf/event=false
+org.eclipse.linuxtools.tmf/exceptions=false
index 089e8801b7a192f8c19b62b2c0dfb0b716eeb448..cc49ebe4220482a35bf675e1f603116867f4dde2 100644 (file)
 package org.eclipse.linuxtools.tmf;\r
 \r
+import java.io.BufferedWriter;\r
+import java.io.FileWriter;\r
+import java.io.IOException;\r
+\r
 import org.eclipse.core.runtime.Platform;\r
+import org.eclipse.linuxtools.tmf.component.ITmfComponent;\r
+import org.eclipse.linuxtools.tmf.component.ITmfDataProvider;\r
+import org.eclipse.linuxtools.tmf.event.TmfData;\r
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;\r
 \r
 public class Tracer {\r
 \r
-       static Boolean TRACE = Boolean.FALSE;\r
-\r
        private static String pluginID = TmfCorePlugin.PLUGIN_ID;\r
 \r
+       static Boolean ERROR     = Boolean.FALSE;\r
+       static Boolean WARNING   = Boolean.FALSE;\r
+       static Boolean INFO      = Boolean.FALSE;\r
+\r
+       static Boolean COMPONENT = Boolean.FALSE;\r
+       static Boolean REQUEST   = Boolean.FALSE;\r
+       static Boolean SIGNAL    = Boolean.FALSE;\r
+       static Boolean EVENT     = Boolean.FALSE;\r
+       static Boolean EXCEPTION = Boolean.FALSE;\r
+\r
+       private static BufferedWriter fTraceLog = null;\r
+\r
+       private static BufferedWriter openLogFile(String filename) {\r
+               BufferedWriter outfile = null;\r
+               try {\r
+                       outfile = new BufferedWriter(new FileWriter(filename));\r
+               } catch (IOException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               return outfile;\r
+       }\r
+\r
        public static void init() {\r
-               String traceKey = Platform.getDebugOption(pluginID + "/trace");\r
 \r
+               String traceKey;\r
+               boolean isTracing = false;\r
+               \r
+               traceKey = Platform.getDebugOption(pluginID + "/error");\r
+               if (traceKey != null) {\r
+                       ERROR = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= ERROR;\r
+               }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/warning");\r
                if (traceKey != null) {\r
-                       TRACE = (new Boolean(traceKey)).booleanValue();\r
+                       WARNING = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= WARNING;\r
                }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/info");\r
+               if (traceKey != null) {\r
+                       INFO = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= INFO;\r
+               }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/component");\r
+               if (traceKey != null) {\r
+                       COMPONENT = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= COMPONENT;\r
+               }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/request");\r
+               if (traceKey != null) {\r
+                       REQUEST = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= REQUEST;\r
+               }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/signal");\r
+               if (traceKey != null) {\r
+                       SIGNAL = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= SIGNAL;\r
+               }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/event");\r
+               if (traceKey != null) {\r
+                       EVENT = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= EVENT;\r
+               }\r
+\r
+               traceKey = Platform.getDebugOption(pluginID + "/exception");\r
+               if (traceKey != null) {\r
+                       EXCEPTION = (Boolean.valueOf(traceKey)).booleanValue();\r
+                       isTracing |= EXCEPTION;\r
+               }\r
+\r
+               // Create trace log file if needed\r
+               if (isTracing) {\r
+                       fTraceLog = openLogFile("trace.log");\r
+               }\r
+       }\r
+\r
+       // Predicates\r
+       public static boolean isErrorTraced() {\r
+               return ERROR;\r
+       }\r
+\r
+       public static boolean isComponentTraced() {\r
+               return COMPONENT;\r
+       }\r
+       \r
+       public static boolean isRequestTraced() {\r
+               return REQUEST;\r
+       }\r
+       \r
+       public static boolean isEventTraced() {\r
+               return EVENT;\r
+       }\r
+       \r
+       public static boolean isExceptionTraced() {\r
+               return EXCEPTION;\r
        }\r
 \r
-       public static void trace(String message) {\r
-               if (TRACE) {\r
-                       System.out.println(Thread.currentThread() + ": " + message);\r
+       // Tracers\r
+       public static void trace(String msg) {\r
+               long currentTime = System.currentTimeMillis();\r
+               StringBuilder message = new StringBuilder("[");\r
+               message.append(currentTime / 1000);\r
+               message.append(".");\r
+               message.append(currentTime % 1000);\r
+               message.append("] ");\r
+               message.append(msg);\r
+               System.out.println(message);\r
+               try {\r
+                       if (fTraceLog != null) {\r
+                               fTraceLog.write(message.toString());\r
+                               fTraceLog.newLine();\r
+                               fTraceLog.flush();\r
+                       }\r
+               } catch (IOException e) {\r
+                       e.printStackTrace();\r
                }\r
        }\r
+\r
+       public static void traceComponent(ITmfComponent component, String msg) {\r
+               String message = ("[CMP] Thread=" + Thread.currentThread().getId() + " Cmp=" + component.getName() + " " + msg);\r
+               trace(message);\r
+       }\r
+\r
+       public static void traceRequest(ITmfDataRequest<?> request, String msg) {\r
+               String message = ("[REQ] Thread=" + Thread.currentThread().getId() + " Req=" + request.getRequestId() + ", Type=" + request.getDataType().getSimpleName() + " " + msg);\r
+               trace(message);\r
+       }\r
+\r
+       public static void traceEvent(ITmfDataProvider<?> provider, ITmfDataRequest<?> request, TmfData data) {\r
+               String message = ("[EVT] Provider=" + provider.toString() + ", Req=" + request.getRequestId() + ", Event=" + data.toString());\r
+               trace(message);\r
+       }\r
+\r
+       public static void traceException(Exception e) {\r
+       }\r
+\r
+       public static void traceError(String msg) {\r
+               String message = ("[ERR] Thread=" + Thread.currentThread().getId() + " " + msg);\r
+               trace(message);\r
+       }\r
+\r
 }\r
index 8d50d905f452ff484a3e19e931323337b6a17f4d..73a306cbd4236b2815999415afad8505686c6731 100644 (file)
@@ -1,8 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Ericsson
+ * 
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
 package org.eclipse.linuxtools.tmf.component;
 
 import org.eclipse.linuxtools.tmf.event.TmfData;
 import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
 
+/**
+ * <b><u>ITmfDataRequest</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
 public interface ITmfDataProvider<T extends TmfData> {
 
     /**
@@ -13,5 +30,6 @@ public interface ITmfDataProvider<T extends TmfData> {
         * @param request The request to process
         */
        public void sendRequest(ITmfDataRequest<T> request);
+       public void fireRequests();
 
 }
index 276045842dd90da550802f0aa06bd3eb2d8a5e9f..4a6082bff81302e26882bd1affb00a27e2ebf780 100644 (file)
@@ -12,6 +12,7 @@
 
 package org.eclipse.linuxtools.tmf.component;
 
+import org.eclipse.linuxtools.tmf.Tracer;
 import org.eclipse.linuxtools.tmf.signal.TmfSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
 
@@ -32,6 +33,7 @@ public abstract class TmfComponent implements ITmfComponent {
 
        public TmfComponent(String name) {
                fName = name;
+               if (Tracer.isComponentTraced()) Tracer.traceComponent(this, "created");
                TmfSignalManager.register(this);
        }
        
@@ -65,6 +67,7 @@ public abstract class TmfComponent implements ITmfComponent {
         */
        public void dispose() {
                TmfSignalManager.deregister(this);
+               if (Tracer.isComponentTraced()) Tracer.traceComponent(this, "terminated");
        }
 
        /* (non-Javadoc)
index d93a6b6f741e6e0b767948f3d8dc72571c1154ac..805cd1e7dcb09a9b092e17a6834d9fba0817b20b 100644 (file)
@@ -17,6 +17,7 @@ import java.util.Vector;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.TimeUnit;
 
 import org.eclipse.linuxtools.tmf.Tracer;
 import org.eclipse.linuxtools.tmf.event.TmfData;
@@ -44,14 +45,27 @@ import org.eclipse.linuxtools.tmf.trace.ITmfContext;
  */
 public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent implements ITmfDataProvider<T> {
 
+       // ------------------------------------------------------------------------
+       // Constants
+       // ------------------------------------------------------------------------
+
+       private static final ITmfDataRequest.ExecutionType SHORT = ITmfDataRequest.ExecutionType.SHORT;
+//     private static final ITmfDataRequest.ExecutionType LONG  = ITmfDataRequest.ExecutionType.LONG;
+       
+       // ------------------------------------------------------------------------
+       // 
+       // ------------------------------------------------------------------------
+
        final protected Class<T> fType;
+       final protected boolean  fLogData;
+       final protected boolean  fLogException;
 
        public static final int DEFAULT_QUEUE_SIZE = 1000;
        protected final int fQueueSize;
        protected final BlockingQueue<T> fDataQueue;
        protected final TmfRequestExecutor fExecutor;
 
-       private int fCoalescingLevel = 0;
+       private int fSignalDepth = 0;
 
        // ------------------------------------------------------------------------
        // Constructors
@@ -67,13 +81,16 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
                fQueueSize = queueSize;
                fDataQueue = (queueSize > 1) ? new LinkedBlockingQueue<T>(fQueueSize) : new SynchronousQueue<T>();
 
-        Tracer.trace(getName() + " created");
+        if (Tracer.isComponentTraced()) Tracer.traceComponent(this, "created");
 
         fExecutor = new TmfRequestExecutor();
-               fCoalescingLevel = 0;
+               fSignalDepth = 0;
+
+               fLogData = Tracer.isEventTraced();
+               fLogException = Tracer.isEventTraced();
 
                TmfProviderManager.register(fType, this);
-        Tracer.trace(getName() + " started");
+               if (Tracer.isComponentTraced()) Tracer.traceComponent(this, "started");
 }
        
        public TmfDataProvider(TmfDataProvider<T> other) {
@@ -83,14 +100,20 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
         fDataQueue = (fQueueSize > 1) ? new LinkedBlockingQueue<T>(fQueueSize) : new SynchronousQueue<T>();
 
         fExecutor = new TmfRequestExecutor();
-        fCoalescingLevel = 0;
+        fSignalDepth = 0;
+
+        fLogData = Tracer.isEventTraced();
+               fLogException = Tracer.isEventTraced();
        }
        
        @Override
        public void dispose() {
                TmfProviderManager.deregister(fType, this);
                fExecutor.stop();
-        Tracer.trace(getName() + " stopped");
+
+               if (Tracer.isComponentTraced()) Tracer.traceComponent(this, "stopped");
+               
+               if (fClone != null) fClone.dispose();
                super.dispose();
        }
 
@@ -106,15 +129,19 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
        // ITmfRequestHandler
        // ------------------------------------------------------------------------
 
-       public synchronized void sendRequest(final ITmfDataRequest<T> request) {
-
-               if (fCoalescingLevel > 0) {
-                       // We are in coalescing mode: client should NEVER wait
-                       // (otherwise we will have deadlock...)
-                       coalesceDataRequest(request);
-               } else {
-                       // Process the request immediately 
-                       queueRequest(request);
+       protected TmfDataProvider<T> fClone;
+       public void sendRequest(final ITmfDataRequest<T> request) {
+               synchronized(this) {
+                       if (fClone == null || request.getExecType() == SHORT) {
+                               if (fSignalDepth > 0) {
+                                       coalesceDataRequest(request);
+                               } else {
+                                       queueRequest(request);
+                               }
+                       }
+                       else {
+                               fClone.sendRequest(request);
+                       }
                }
        }
 
@@ -123,11 +150,16 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
         * 
         * @param thread
         */
-       private synchronized void fireRequests() {
-               for (TmfDataRequest<T> request : fPendingCoalescedRequests) {
-                       queueRequest(request);
+       public void fireRequests() {
+               synchronized(this) {
+                       for (TmfDataRequest<T> request : fPendingCoalescedRequests) {
+                               queueRequest(request);
+                       }
+                       fPendingCoalescedRequests.clear();
+
+                       if (fClone != null)
+                               fClone.fireRequests();
                }
-               fPendingCoalescedRequests.clear();
        }
 
        // ------------------------------------------------------------------------
@@ -136,21 +168,25 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
 
        protected Vector<TmfCoalescedDataRequest<T>> fPendingCoalescedRequests = new Vector<TmfCoalescedDataRequest<T>>();
 
-       protected synchronized void newCoalescedDataRequest(ITmfDataRequest<T> request) {
-               TmfCoalescedDataRequest<T> coalescedRequest =
-                       new TmfCoalescedDataRequest<T>(fType, request.getIndex(), request.getNbRequested(), request.getBlockize());
-               coalescedRequest.addRequest(request);
-               fPendingCoalescedRequests.add(coalescedRequest);
+       protected void newCoalescedDataRequest(ITmfDataRequest<T> request) {
+               synchronized(this) {
+                       TmfCoalescedDataRequest<T> coalescedRequest =
+                               new TmfCoalescedDataRequest<T>(fType, request.getIndex(), request.getNbRequested(), request.getBlockize());
+                       coalescedRequest.addRequest(request);
+                       fPendingCoalescedRequests.add(coalescedRequest);
+               }
        }
 
        protected synchronized void coalesceDataRequest(ITmfDataRequest<T> request) {
-               for (TmfCoalescedDataRequest<T> req : fPendingCoalescedRequests) {
-                       if (req.isCompatible(request)) {
-                               req.addRequest(request);
-                               return;
+               synchronized(this) {
+                       for (TmfCoalescedDataRequest<T> req : fPendingCoalescedRequests) {
+                               if (req.isCompatible(request)) {
+                                       req.addRequest(request);
+                                       return;
+                               }
                        }
+                       newCoalescedDataRequest(request);
                }
-               newCoalescedDataRequest(request);
        }
 
        // ------------------------------------------------------------------------
@@ -159,8 +195,9 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
 
        protected void queueRequest(final ITmfDataRequest<T> request) {
 
-               final String provider = getName();
-               
+               final ITmfDataProvider<T> provider  = this;
+               final ITmfComponent    component = this;
+
                // Process the request
                Thread thread = new Thread() {
 
@@ -168,6 +205,7 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
                        public void run() {
 
                                // Extract the generic information
+                               request.start();
                                int blockSize   = request.getBlockize();
                                int nbRequested = request.getNbRequested();
                         
@@ -178,33 +216,44 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
                                // Initialize the execution
                                ITmfContext context = armRequest(request);
                                if (context == null) {
-                                       request.fail();
+                                       request.cancel();
                                        return;
                                }
 
-                               // Get the ordered events
-                               Tracer.trace("Request #" + request.getRequestId() + " is serviced by " + provider);
-                               T data = getNext(context);
-                               Tracer.trace("Request #" + request.getRequestId() + " read first event");
-                               while (data != null && !isCompleted(request, data, nbRead))
-                               {
-                                       result.add(data);
-                                       if (++nbRead % blockSize == 0) {
-                                               pushData(request, result);
-                                       }
-                                       // To avoid an unnecessary read passed the last data requested
-                                       if (nbRead < nbRequested) {
-                                               data = getNext(context);
-                                               if (data == null || data.isNullRef()) {
-                                                       Tracer.trace("Request #" + request.getRequestId() + " end of data");
+                               try {
+                                       // Get the ordered events
+                                       if (Tracer.isRequestTraced()) Tracer.trace("Request #" + request.getRequestId() + " is being serviced by " + component.getName());
+                                       T data = getNext(context);
+                                       if (Tracer.isRequestTraced()) Tracer.trace("Request #" + request.getRequestId() + " read first event");
+                                       while (data != null && !isCompleted(request, data, nbRead))
+                                       {
+                                               if (fLogData) Tracer.traceEvent(provider, request, data);
+                                               result.add(data);
+                                               if (++nbRead % blockSize == 0) {
+                                                       pushData(request, result);
                                                }
+                                               // To avoid an unnecessary read passed the last data requested
+                                               if (nbRead < nbRequested) {
+                                                       data = getNext(context);
+                                                       if (data == null || data.isNullRef()) {
+                                                               if (Tracer.isRequestTraced()) Tracer.trace("Request #" + request.getRequestId() + " end of data");
+                                                       }
+                                               }
+                                       }
+                                       if (result.size() > 0) {
+                                               pushData(request, result);
                                        }
+                                       request.done();
+                               }
+                               catch (Exception e) {
+                                       e.printStackTrace();
+                                       if (fLogException) Tracer.traceException(e);
+                                       request.fail();
                                }
-                               pushData(request, result);
-                               request.done();
                        }
                };
                fExecutor.execute(thread);
+        if (Tracer.isRequestTraced()) Tracer.traceRequest(request, "queued");
        }
 
        /**
@@ -243,14 +292,15 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
         * @param context
         * @return
         */
-       public T getNext(ITmfContext context) {
-               try {
-                       T event = fDataQueue.take();
-                       return event;
-               } catch (InterruptedException e) {
-                       e.printStackTrace();
+       private static final int TIMEOUT = 1000;
+       public T getNext(ITmfContext context) throws InterruptedException {
+               T event = fDataQueue.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+               if (event == null) {
+                       if (Tracer.isErrorTraced()) Tracer.traceError("Request timeout on read");
+                       System.out.println(getName() + ": Request timeout on read");
+                       throw new InterruptedException();
                }
-               return null;
+               return event;
        }
 
        /**
@@ -258,11 +308,12 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
         * 
         * @param data
         */
-       public void queueResult(T data) {
-               try {
-                       fDataQueue.put(data);
-               } catch (InterruptedException e1) {
-                       e1.printStackTrace();
+       public void queueResult(T data) throws InterruptedException {
+               boolean ok = fDataQueue.offer(data, TIMEOUT, TimeUnit.MILLISECONDS);
+               if (!ok) {
+                       if (Tracer.isErrorTraced()) Tracer.traceError("Request timeout on write");
+                       System.out.println(getName() + ": Request timeout on write");
+                       throw new InterruptedException();
                }
        }
 
@@ -282,19 +333,15 @@ public abstract class TmfDataProvider<T extends TmfData> extends TmfComponent im
        // ------------------------------------------------------------------------
 
        @TmfSignalHandler
-       public void startSynch(TmfStartSynchSignal signal) {
-               synchronized(this) {
-                       fCoalescingLevel++;
-               }
+       public synchronized void startSynch(TmfStartSynchSignal signal) {
+               fSignalDepth++;
        }
 
        @TmfSignalHandler
-       public void endSynch(TmfEndSynchSignal signal) {
-               synchronized(this) {
-                       fCoalescingLevel--;
-                       if (fCoalescingLevel == 0) {
-                               fireRequests();
-                       }
+       public synchronized void endSynch(TmfEndSynchSignal signal) {
+               fSignalDepth--;
+               if (fSignalDepth == 0) {
+                       fireRequests();
                }
        }
 
index 014bd828e661b4cf822d626fb9ba8d23dec20200..4f0c6c8d50025ebb88f9e8a485f37c08cbb2b81a 100644 (file)
@@ -97,6 +97,18 @@ public class TmfTimeRange {
                return (fStartTime.compareTo(ts, true) <= 0) && (fEndTime.compareTo(ts, true) >= 0);
        }
 
+       /**
+        * Check if the time range is within the time range
+        * 
+        * @param range
+        * @return
+        */
+       public boolean contains(TmfTimeRange range) {
+               TmfTimestamp startTime = range.getStartTime();
+               TmfTimestamp endTime   = range.getEndTime();
+               return (fStartTime.compareTo(startTime, true) <= 0) && (fEndTime.compareTo(endTime, true) >= 0);
+       }
+
        // ------------------------------------------------------------------------
     // Object
        // ------------------------------------------------------------------------
index 47a2c7c2df92be37fcdb18f3934f0a5dd2acfd9f..1e627485d6ddddae905c63d9df192f1684050fef 100644 (file)
@@ -15,20 +15,18 @@ package org.eclipse.linuxtools.tmf.experiment;
 import java.util.Collections;
 import java.util.Vector;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.linuxtools.tmf.component.TmfEventProvider;
 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.ITmfEventRequest;
+import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
 import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
-import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
+import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
 import org.eclipse.linuxtools.tmf.signal.TmfTraceUpdatedSignal;
 import org.eclipse.linuxtools.tmf.trace.ITmfContext;
 import org.eclipse.linuxtools.tmf.trace.ITmfLocation;
@@ -52,7 +50,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
        // The currently selected experiment
     private static TmfExperiment<?> fCurrentExperiment = null;
 
-    // The set of traces that constitute the experiment
+       // The set of traces that constitute the experiment
     private ITmfTrace[] fTraces;
 
     // The total number of events
@@ -84,10 +82,11 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
        fTraces = traces;
        fEpoch = epoch;
        fIndexPageSize = indexPageSize;
+       fClone = createTraceCopy();
 
                updateNbEvents();
                updateTimeRange();
-    }
+       }
 
     /**
      * @param type
@@ -108,9 +107,8 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
         this(type, id, traces, TmfTimestamp.Zero, indexPageSize);
     }
     
-    
     public TmfExperiment(TmfExperiment<T> other) {
-       super(other.getName(), other.fType);
+       super(other.getName() + "(clone)", other.fType);
        
        fEpoch         = other.fEpoch;
        fIndexPageSize = other.fIndexPageSize;
@@ -122,10 +120,13 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
        
        fNbEvents  = other.fNbEvents;
        fTimeRange = other.fTimeRange;
+       fClone = null;
     }
     
        public TmfExperiment<T> createTraceCopy() {
-               return new TmfExperiment<T>(this);
+               TmfExperiment<T> experiment = new TmfExperiment<T>(this);
+               TmfSignalManager.deregister(experiment);
+               return experiment;
        }
     
     /**
@@ -133,11 +134,15 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
      */
     @Override
        public void dispose() {
-       for (ITmfTrace trace : fTraces) {
-               trace.dispose();
+       if (fTraces != null) {
+               for (ITmfTrace trace : fTraces) {
+                       trace.dispose();
+               }
+               fTraces = null;
+       }
+       if (fCheckpoints != null) {
+               fCheckpoints.clear();
        }
-       fTraces = null;
-       fCheckpoints.clear();
         super.dispose();
     }
 
@@ -241,15 +246,12 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                TmfTimestamp endTime   = fTimeRange != null ? fTimeRange.getEndTime()   : TmfTimestamp.BigBang;
 
                for (ITmfTrace trace : fTraces) {
-                       if (trace.getNbEvents() > 0) {
-                       TmfTimestamp traceStartTime = trace.getStartTime();
-                       if (traceStartTime.compareTo(startTime, true) < 0)
-                               startTime = traceStartTime;
-
-                       TmfTimestamp traceEndTime = trace.getEndTime();
-                       if (traceEndTime.compareTo(endTime, true) > 0)
-                               endTime = traceEndTime;
-                       }
+               TmfTimestamp traceStartTime = trace.getStartTime();
+               if (traceStartTime.compareTo(startTime, true) < 0)
+                       startTime = traceStartTime;
+               TmfTimestamp traceEndTime = trace.getEndTime();
+               if (traceEndTime.compareTo(endTime, true) > 0)
+                       endTime = traceEndTime;
        }
                fTimeRange = new TmfTimeRange(startTime, endTime);
     }
@@ -276,7 +278,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                return null;
        }
 
-    // ------------------------------------------------------------------------
+       // ------------------------------------------------------------------------
     // ITmfTrace trace positioning
     // ------------------------------------------------------------------------
 
@@ -444,6 +446,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                // Update the experiment context and set the "next" event
                TmfEvent event = null;
                if (trace >= 0) {
+                       long savedRank = expContext.getRank();
                        expContext.setLastTrace(trace);
                        expContext.updateRank(1);
                        TmfExperimentLocation expLocation = (TmfExperimentLocation) expContext.getLocation();
@@ -451,11 +454,26 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                        expLocation.getLocation()[trace] = traceContext.getLocation().clone();
                        expLocation.getRanks()[trace] = traceContext.getRank();
                        event = expContext.getEvents()[trace];
+                       updateIndex(expContext, savedRank, timestamp);
                }
 
                return event;
        }
 
+       public synchronized void updateIndex(ITmfContext context, long rank, TmfTimestamp timestamp) {
+               // Build the index as we go along
+               if (context.isValidRank() && (rank % fIndexPageSize) == 0) {
+                       // Determine the table position
+                       long position = context.getRank() / fIndexPageSize;
+                       // Add new entry at proper location (if empty) 
+                       if (fCheckpoints.size() == position) {
+                               ITmfLocation<?> location = context.getLocation().clone();
+                               fCheckpoints.add(new TmfCheckpoint(timestamp, location));
+//                             System.out.println(this + "[" + (fCheckpoints.size() - 1) + "] " + timestamp + ", " + location.toString());
+                       }
+               }
+       }
+
        /* (non-Javadoc)
         * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#parseEvent(org.eclipse.linuxtools.tmf.trace.TmfContext)
         */
@@ -518,132 +536,78 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
 
        // The index page size
        private static final int DEFAULT_INDEX_PAGE_SIZE = 1000;
-       private final int fIndexPageSize;
-
-       // Indicates that an indexing job is already running
-       private Boolean fIndexing = false;
-       private Boolean fIndexed  = false;
-
-       // The indexing job
-       private IndexingJob job;
+       private        final int fIndexPageSize;
 
-       /**
-        * indexExperiment
-        * 
-        * Creates the experiment index.
-        */
-       public void indexExperiment(boolean waitForCompletion) {
-
-               synchronized(this) {
-                       if (fIndexed || fIndexing) {
-                               // An indexing job is already running but a new request came
-                               // in (probably due to a change in the trace set). The index
-                               // being currently built is therefore already invalid.
-                               // TODO: Cancel and restart the job
-                               // TODO: Add support for dynamically adding/removing traces
-                               return;
+       @SuppressWarnings("unchecked")
+       public void indexExperiment() {
+
+               final TmfExperiment<?> experiment = getCurrentExperiment();
+               fCheckpoints.clear();
+
+               ITmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, TmfTimeRange.Eternity, TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.LONG) {
+
+                       // long indexingStart = System.nanoTime();
+                       
+                       TmfTimestamp startTime =  null;
+                       TmfTimestamp lastTime  =  null;
+                       int nbEvents = 0;
+
+                       @Override
+                       public void handleData() {
+                               TmfEvent[] events = getData();
+                               if (events.length > 0) {
+                                       nbEvents++;
+                                       TmfTimestamp ts = events[0].getTimestamp();
+                                       if (startTime == null)
+                                               startTime = new TmfTimestamp(ts);
+                                       lastTime = new TmfTimestamp(ts);
+
+                                       if ((nbEvents % DEFAULT_INDEX_PAGE_SIZE) == 0) {
+                                               updateExperiment();
+                                       }
+                               }
                        }
-                       fIndexing = true;
-               }
-
-               job = new IndexingJob(new TmfExperiment<T>(this));
-               job.schedule();
-
-       if (waitForCompletion) {
-               try {
-                       job.join();
-               } catch (InterruptedException e) {
-                       e.printStackTrace();
-               }
-       }
-       }
-
-       private class IndexingJob extends Job {
 
-               private final String          experimentId;
-               private final ITmfTrace[]     traces;
-               private Vector<TmfCheckpoint> checkpoints;
-
-               public IndexingJob(TmfExperiment<T> experiment) {
-                       super(experiment.getName());
-                       experimentId = experiment.getName();
-                       traces = experiment.getTraces();
-               }
-
-               /* (non-Javadoc)
-                * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-                */
-               @Override
-               protected IStatus run(IProgressMonitor monitor) {
-
-                       // Minimal check
-                       if (traces.length == 0) {
-                   fIndexing = false;
-                               return Status.OK_STATUS;
+                       @Override
+                       public void handleSuccess() {
+                               // long indexingEnd = System.nanoTime();
+
+                               updateExperiment();
+//                                     experiment.fCheckpoints = new Vector<TmfCheckpoint>();
+//                     for (int i = 0; i < fCheckpoints.size(); i++) {
+//                             TmfCheckpoint checkpoint = fCheckpoints.get(i).clone();
+//                             experiment.fCheckpoints.add(checkpoint);
+//                             System.out.println("fCheckpoints[" + i + "] " + checkpoint.getTimestamp() + ", " + checkpoint.getLocation().toString());
+//                     }
+
+//                     clone.dispose();
+//                     if (Tracer.INTERNALS) Tracer.trace(getName() + ": nbEvents=" + nbEvents + " (" + ((indexingEnd-indexingStart)/nbEvents)+ " ns/evt), start=" + startTime + ", end=" + lastTime);
+
+                               // System.out.println(getName() + ": start=" + startTime +
+                               // ", end=" + lastTime + ", elapsed=" + (indexingEnd*1.0 -
+                               // indexingStart) / 1000000000);
+                               // System.out.println(getName() + ": nbEvents=" + fNbEvents +
+                               // " (" + ((indexingEnd-indexingStart)/nbEvents)+ " ns/evt)");
+//             for (int i = 0; i < experiment.fCheckpoints.size(); i++) {
+//                     TmfCheckpoint checkpoint = experiment.fCheckpoints.get(i);
+//                     System.out.println("fCheckpoints[" + i + "] " + checkpoint.getTimestamp() + ", " + checkpoint.getLocation().toString());
+//             }
                        }
 
-                       monitor.beginTask("Indexing " + experimentId, IProgressMonitor.UNKNOWN);
-
-            int nbEvents = 0;
-            TmfTimestamp startTime = null;
-            TmfTimestamp lastTime  = null;
-
-            // Reset the index
-            checkpoints = new Vector<TmfCheckpoint>();
-            
-            try {
-               // Position the trace at the beginning
-               TmfExperimentContext context = seekLocation(null);
-               TmfExperimentLocation location = (TmfExperimentLocation) context.getLocation().clone();
-
-                // Get the first event
-                       TmfEvent event = getNextEvent(context);
-                       if (event != null) {
-                    startTime = new TmfTimestamp(event.getTimestamp());
-                       }
-
-                       // Index the experiment
-                       while (event != null) {
-                       lastTime = event.getTimestamp();
-                               if ((nbEvents++ % fIndexPageSize) == 0) {
-                                       checkpoints.add(new TmfCheckpoint(lastTime, location));
-
-                        monitor.worked(1);
-
-                        // Check monitor *after* fCheckpoints has been updated
-                        if (monitor.isCanceled()) {
-                            monitor.done();
-                               return Status.CANCEL_STATUS;
-                        }
-                    }
-
-                    // We will need the contexts at the next iteration
-                    if ((nbEvents % fIndexPageSize) == 0) {
-                        location = (TmfExperimentLocation) context.getLocation().clone();
-                               }
-
-                               event = getNextEvent(context);
-                }
-
-            }
-            finally {
-                synchronized(this) {
-                       fCheckpoints = checkpoints;
-                       fNbEvents    = nbEvents;
-                       fTimeRange   = new TmfTimeRange(startTime, lastTime);
-                       fIndexing    = false;
-                       fIndexed     = true;
-                }
-//                         notifyListeners(fTimeRange);
-                monitor.done();
-            }
-
-                       return Status.OK_STATUS;
-               }
-    }
+                       private void updateExperiment() {
+                               if (experiment == fCurrentExperiment)
+                                       experiment.fTimeRange   = new TmfTimeRange(startTime, new TmfTimestamp(lastTime));
+                                       experiment.fNbEvents    = nbEvents;
+                                       experiment.fCheckpoints = ((TmfExperiment<T>) fClone).fCheckpoints;
+                                       notifyListeners();
+                       }
+               };
 
-    protected void notifyListeners(TmfTimeRange range) {
-       broadcast(new TmfRangeSynchSignal(this, range, range.getStartTime()));
+               sendRequest((ITmfDataRequest<T>) request);
+       }
+       
+       protected void notifyListeners() {
+       broadcast(new TmfExperimentUpdatedSignal(this, this, null));
        }
    
     // ------------------------------------------------------------------------
@@ -655,18 +619,15 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
        TmfExperiment<?> experiment = signal.getExperiment();
        if (experiment == this) {
                setCurrentExperiment(experiment);
+               indexExperiment();
        }
        else {
                dispose();
        }
-//     if (signal.getExperiment() == this) {
-//             indexExperiment(true);
-//     }
     }
 
     @TmfSignalHandler
     public void experimentUpdated(TmfExperimentUpdatedSignal signal) {
-//     indexExperiment(true);
     }
 
     @TmfSignalHandler
index 6814225db83ad67e776585cd09924c38c3be9b7d..d43fa6a7e5dcdb1a0057b62497fadd834327bb75 100644 (file)
@@ -117,4 +117,33 @@ public class TmfExperimentContext extends TmfContext {
                lastTrace = newIndex;
        }
 
+       // ------------------------------------------------------------------------
+       // Object
+       // ------------------------------------------------------------------------
+
+    @Override
+    public int hashCode() {
+               int result = 17;
+       for (int i = 0; i < fTraces.length; i++) {
+               result = 37 * result + fTraces[i].hashCode();
+               result = 37 * result + fContexts[i].hashCode();
+       }
+       return result;
+    }
+    @Override
+    public boolean equals(Object other) {
+       if (!(other instanceof TmfExperimentContext)) {
+               return false;
+       }
+       TmfExperimentContext o = (TmfExperimentContext) other;
+       boolean isEqual = true;
+       int i = 0;
+       while (isEqual && i < fTraces.length) {
+               isEqual &= fTraces[i].equals(o.fTraces[i]);
+               isEqual &= fContexts[i].equals(o.fContexts[i]);
+       }
+       return isEqual;
+    }
 }
index 7beecac7c6df375b4714fddadcdc284b9a2badc8..84c1625354455c00d6e76cf883a7fd8b7f9c269e 100644 (file)
@@ -21,6 +21,12 @@ import org.eclipse.linuxtools.tmf.event.TmfData;
  */
 public interface ITmfDataRequest<T extends TmfData> {
 
+       // ------------------------------------------------------------------------
+       // Constants
+       // ------------------------------------------------------------------------
+
+    public enum ExecutionType { SHORT, LONG };
+    
        // ------------------------------------------------------------------------
        // Accessors
        // ------------------------------------------------------------------------
@@ -35,6 +41,11 @@ public interface ITmfDataRequest<T extends TmfData> {
      */
     public int getRequestId();
 
+    /**
+     * @return request ID
+     */
+    public ExecutionType getExecType();
+
     /**
         * @return the index of the first event requested
      */
@@ -59,6 +70,7 @@ public interface ITmfDataRequest<T extends TmfData> {
        // Request state
        // ------------------------------------------------------------------------
 
+    public boolean isRunning();
     public boolean isCompleted();
     public boolean isFailed();
     public boolean isCancelled();
@@ -75,6 +87,7 @@ public interface ITmfDataRequest<T extends TmfData> {
        // Request handling
        // ------------------------------------------------------------------------
 
+    public void handleStarted();
     public void handleCompleted();
     public void handleSuccess();
     public void handleFailure();
@@ -90,6 +103,7 @@ public interface ITmfDataRequest<T extends TmfData> {
        // Request state modifiers
        // ------------------------------------------------------------------------
 
+    public void start();
     public void done();
     public void fail();
     public void cancel();
index 0bcd53037caabef03fa6919f3ca75187fd928b9e..570f48dc14054b51c18412ea47988f58e825ba7a 100644 (file)
@@ -14,6 +14,7 @@ package org.eclipse.linuxtools.tmf.request;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
+import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 
 /**
  * <b><u>TmfCoalescedEventRequest</u></b>
@@ -26,7 +27,7 @@ public class TmfCoalescedEventRequest<T extends TmfEvent> extends TmfCoalescedDa
     // Attributes
     // ------------------------------------------------------------------------
 
-       private final TmfTimeRange fRange;      // The requested events time range
+       private TmfTimeRange fRange;    // The requested events time range
 
     // ------------------------------------------------------------------------
     // Constructor
@@ -73,12 +74,40 @@ public class TmfCoalescedEventRequest<T extends TmfEvent> extends TmfCoalescedDa
                if (request instanceof ITmfEventRequest<?>) {
                        boolean ok = getNbRequested() == request.getNbRequested();
                        ok &= getBlockize() == request.getBlockize();
-                       ok &= fRange.equals(((ITmfEventRequest<T>) request).getRange());
+                       if (ok) {
+                               TmfTimestamp startTime = ((ITmfEventRequest<T>) request).getRange().getStartTime();
+                               TmfTimestamp endTime   = ((ITmfEventRequest<T>) request).getRange().getEndTime();
+                               if (!fRange.contains(startTime))
+                                       fRange = new TmfTimeRange(startTime, fRange.getEndTime());
+                               if (!fRange.contains(endTime))
+                                       fRange = new TmfTimeRange(fRange.getStartTime(), endTime);
+                       }
                        return ok;
                }
                return false;
        }
 
+    // ------------------------------------------------------------------------
+    // ITmfDataRequest
+    // ------------------------------------------------------------------------
+
+    @Override
+       public void handleData() {
+       for (ITmfDataRequest<T> request : fRequests) {
+                       if (request instanceof TmfEventRequest<?>) {
+                       TmfEventRequest<T> req = (TmfEventRequest<T>) request;
+                       T[] data = getData();
+                       if (data.length > 0 && req.getRange().contains(data[0].getTimestamp())) {
+                       req.setData(data);
+                       req.handleData();
+                       }
+               }
+               else {
+                       super.handleData();
+               }
+       }
+    }
+
     // ------------------------------------------------------------------------
     // ITmfEventRequest
     // ------------------------------------------------------------------------
index 8b2ce9b7c0a1eb1aba1965717c8b009d90448280..8ad88e75d0d9c8a1a2e8c62d881f75d281524ddf 100644 (file)
@@ -85,17 +85,19 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
     // Attributes
     // ------------------------------------------------------------------------
 
-    private final Class<T> fDataType;
-    private final int fRequestId;                      // A unique request ID
-    private final int fIndex;                          // The index (rank) of the requested event
-    private final int fNbRequested;            // The number of requested events (ALL_DATA for all)
-    private final int fBlockSize;              // The maximum number of events per chunk
-    private       int fNbRead;                 // The number of reads so far
+    private final Class<T>      fDataType;
+    private final ExecutionType fExecType;
+    private final int                  fRequestId;     // A unique request ID
+    private final int                  fIndex;         // The index (rank) of the requested event
+    private final int                  fNbRequested;   // The number of requested events (ALL_DATA for all)
+    private final int                  fBlockSize;     // The maximum number of events per chunk
+    private       int                  fNbRead;        // The number of reads so far
 
     private final Object lock;
-    private boolean fRequestCompleted;
-    private boolean fRequestFailed;
-    private boolean fRequestCanceled;
+    private boolean fRequestRunning   = false;
+    private boolean fRequestCompleted = false;
+    private boolean fRequestFailed    = false;
+    private boolean fRequestCanceled  = false;
 
     private T[] fData; // Data object
     
@@ -116,7 +118,11 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      * @param dataType the requested data type
      */
     public TmfDataRequest(Class<T> dataType) {
-        this(dataType, 0, ALL_DATA, DEFAULT_BLOCK_SIZE);
+        this(dataType, 0, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
+    }
+
+    public TmfDataRequest(Class<T> dataType, ExecutionType execType) {
+        this(dataType, 0, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
     }
 
     /**
@@ -124,7 +130,11 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      * @param nbRequested the number of data items requested
      */
     public TmfDataRequest(Class<T> dataType, int index) {
-        this(dataType, index, ALL_DATA, DEFAULT_BLOCK_SIZE);
+        this(dataType, index, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
+    }
+
+    public TmfDataRequest(Class<T> dataType, int index, ExecutionType execType) {
+        this(dataType, index, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
     }
 
     /**
@@ -133,7 +143,11 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      * @param blockSize the number of data items per block
      */
     public TmfDataRequest(Class<T> dataType, int index, int nbRequested) {
-        this(dataType, index, nbRequested, DEFAULT_BLOCK_SIZE);
+        this(dataType, index, nbRequested, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
+    }
+
+    public TmfDataRequest(Class<T> dataType, int index, int nbRequested, ExecutionType execType) {
+        this(dataType, index, nbRequested, DEFAULT_BLOCK_SIZE, execType);
     }
 
     /**
@@ -143,15 +157,19 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      * @param blockSize the number of data items per block
      */
     public TmfDataRequest(Class<T> dataType, int index, int nbRequested, int blockSize) {
+        this(dataType, index, nbRequested, blockSize, ExecutionType.SHORT);
+    }
+
+    public TmfDataRequest(Class<T> dataType, int index, int nbRequested, int blockSize, ExecutionType execType) {
        fRequestId   = fRequestNumber++;
        fDataType    = dataType;
        fIndex       = index;
        fNbRequested = nbRequested;
        fBlockSize   = blockSize;
+       fExecType    = execType;
        fNbRead      = 0;
         lock         = new Object();
-
-        Tracer.trace("Request #" + fRequestId + " (" + getClass().getName() + ", " + fDataType.getName() + ") created");
+        if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "created");
     }
 
     /**
@@ -159,13 +177,7 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      */
     @SuppressWarnings("unused")
        private TmfDataRequest(TmfDataRequest<T> other) {
-       fRequestId   = 0;
-       fDataType    = null;
-       fIndex       = 0;
-       fNbRequested = 0;
-       fBlockSize   = 0;
-       fNbRead      = 0;
-        lock         = new Object();
+       this(null, 0, ALL_DATA, DEFAULT_BLOCK_SIZE);
     }
 
     // ------------------------------------------------------------------------
@@ -186,6 +198,13 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
                return fIndex;
        }
 
+       /**
+        * @return the index of the first event requested
+        */
+       public ExecutionType getExecType() {
+               return fExecType;
+       }
+
     /**
      * @return the number of requested events (ALL_DATA = all)
      */
@@ -207,6 +226,13 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
         return fNbRead;
     }
 
+    /**
+     * @return indicates if the request is completed
+     */
+    public boolean isRunning() {
+        return fRequestRunning;
+    }
+
     /**
      * @return indicates if the request is completed
      */
@@ -273,6 +299,9 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      */
     public abstract void handleData();
 
+    public void handleStarted() {
+    }
+
     /**
      * Handle the completion of the request. It is called when there is no more
      * data available either because:
@@ -285,15 +314,15 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
      */
     public void handleCompleted() {
        if (fRequestFailed) { 
-            Tracer.trace("Request #" + fRequestId + " failed, completed");
+            if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "failed");
                handleFailure();
        }
        else if (fRequestCanceled) {
-            Tracer.trace("Request #" + fRequestId + " cancelled, completed");
+            if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "cancelled");
                handleCancel();
        }
        else {
-                       Tracer.trace("Request #" + fRequestId + " succeeded, completed");
+            if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "succeeded");
                        handleSuccess();
        }
     }
@@ -320,11 +349,26 @@ public abstract class TmfDataRequest<T extends TmfData> implements ITmfDataReque
         }
     }
 
+    /**
+     * Called by the request processor upon starting to service the request.
+     */
+    public void start() {
+        if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "starting");
+        synchronized(lock) {
+            fRequestRunning = true;
+            lock.notify();
+        }
+        handleStarted();
+       if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "started");
+    }
+
     /**
      * Called by the request processor upon completion.
      */
     public void done() {
+        if (Tracer.isRequestTraced()) Tracer.traceRequest(this, "completing");
         synchronized(lock) {
+               fRequestRunning   = false;
             fRequestCompleted = true;
             lock.notify();
         }
index 9a83500908ba6f46f280f4f8a196431e7dbb43c3..0838fffc707cf68d06cc1143963658c60e2b7ee6 100644 (file)
@@ -36,14 +36,22 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
      * @param range
      */
     public TmfEventRequest(Class<T> dataType) {
-        this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE);
+        this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
+    }
+
+    public TmfEventRequest(Class<T> dataType, ExecutionType execType) {
+        this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
     }
 
     /**
      * @param range
      */
     public TmfEventRequest(Class<T> dataType, TmfTimeRange range) {
-        this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE);
+        this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
+    }
+
+    public TmfEventRequest(Class<T> dataType, TmfTimeRange range, ExecutionType execType) {
+        this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
     }
 
     /**
@@ -51,7 +59,11 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
      * @param nbRequested
      */
     public TmfEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested) {
-        this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE);
+        this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
+    }
+    
+    public TmfEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, ExecutionType execType) {
+        this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE, execType);
     }
     
     /**
@@ -60,7 +72,12 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
      * @param blockSize Size of the largest blocks expected
      */
     public TmfEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, int blockSize) {
-       super(dataType, 0, nbRequested, blockSize);
+       super(dataType, 0, nbRequested, blockSize, ExecutionType.SHORT);
+       fRange = range;
+    }
+
+    public TmfEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, int blockSize, ExecutionType execType) {
+       super(dataType, 0, nbRequested, blockSize, execType);
        fRange = range;
     }
 
index 3b1d3d14b484f0e546ebe897da88a429b7a0f39c..3dc7aa595cf2412a92b7e0c04bdd7055feac5140 100644 (file)
@@ -18,8 +18,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import org.eclipse.linuxtools.tmf.Tracer;
-
 /**
  * <b><u>TmfRequestExecutor</u></b>
  *
@@ -44,7 +42,7 @@ public class TmfRequestExecutor implements Executor {
                fExecutor = executor;
                String canonicalName = fExecutor.getClass().getCanonicalName();
                fExecutorName = canonicalName.substring(canonicalName.lastIndexOf('.') + 1);
-               Tracer.trace(fExecutor + " created");
+//             if (Tracer.COMPONENTS) Tracer.trace(fExecutor + " created");
        }
 
        /**
@@ -73,7 +71,7 @@ public class TmfRequestExecutor implements Executor {
         */
        public void stop() {
                fExecutor.shutdown();
-               Tracer.trace(fExecutor + " terminated");
+//             if (Tracer.COMPONENTS) Tracer.trace(fExecutor + " terminated");
        }
        
        // ------------------------------------------------------------------------
@@ -84,13 +82,10 @@ public class TmfRequestExecutor implements Executor {
         * @see java.util.concurrent.Executor#execute(java.lang.Runnable)
         */
        public synchronized void execute(final Runnable request) {
-               Tracer.trace("Queueing request " + request);
                fRequestQueue.offer(new Runnable() {
                        public void run() {
                                try {
-                                       Tracer.trace("Processing request " + request);
                                        request.run();
-                                       Tracer.trace("Finishing request " + request);
                                } finally {
                                        scheduleNext();
                                }
index 61f0b15be9f42347ca6b840bce6285aa5c613d6b..41496dcf0a38246b9eabad7436dfd6e62de78009 100644 (file)
@@ -93,6 +93,7 @@ public class TmfSignalManager {
                signal.setReference(fSynchId);
                sendSignal(signal);
                sendSignal(new TmfEndSynchSignal(fSynchId));
+//             Tracer.traceSignal(signal);
        }
 
        static private void sendSignal(TmfSignal signal) {
index e0e9567fa8ad9b5f5419194d1afc3b0c44189b62..76a2fd3264db97f1ff1c99f2f2357c472034176d 100644 (file)
@@ -28,4 +28,5 @@ public interface ITmfContext {
        public long getRank();
        public void updateRank(int rank);
 
+       public boolean isValidRank();
 }
index 0fcd9d0f946fc5c9ca18ff7814adc8beac62a852..5b349515a2a98cfefb64f961bf03fa0933fdc653 100644 (file)
@@ -25,7 +25,6 @@ public interface ITmfTrace extends ITmfComponent {
        
        public ITmfTrace createTraceCopy();
        
-       
        /**
         * @return the trace path 
         */
index 6f19adf79c341609c132a0b717f46d20ee5071d2..b630f78fcefaa7615a79df17e5cc43434d061309 100644 (file)
@@ -19,14 +19,14 @@ import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
  * <p>
  * This class maps an event timestamp to a generic location.
  */
-public class TmfCheckpoint implements Comparable<TmfCheckpoint> {
+public class TmfCheckpoint implements Comparable<TmfCheckpoint>, Cloneable {
 
     // ------------------------------------------------------------------------
     // Attributes
     // ------------------------------------------------------------------------
     
-    private final TmfTimestamp fTimestamp;
-    private final ITmfLocation<?> fLocation;
+    private TmfTimestamp fTimestamp;
+    private ITmfLocation<?> fLocation;
 
     // ------------------------------------------------------------------------
     // Constructors
@@ -80,6 +80,20 @@ public class TmfCheckpoint implements Comparable<TmfCheckpoint> {
     // Object
     // ------------------------------------------------------------------------
 
+    @Override
+    public TmfCheckpoint clone() {
+       TmfCheckpoint result = null;
+               try {
+                       result = (TmfCheckpoint) super.clone();
+               result.fTimestamp = new TmfTimestamp(fTimestamp);
+               result.fLocation  = fLocation.clone();
+               return result;
+               } catch (CloneNotSupportedException e) {
+                       e.printStackTrace();
+               }
+               return result;
+    }
     @Override
     public int hashCode() {
        return fTimestamp.hashCode();
index 89ca3239b9cce1044836c5550807e27f048f0e24..042c1ef35feb8019950191b2693fbd278b0370d4 100644 (file)
@@ -35,7 +35,7 @@ public class TmfContext implements ITmfContext, Cloneable {
        }
 
        public TmfContext(ITmfLocation<?> location) {
-               this(location, 0);
+               this(location, UNKNOWN_RANK);
        }
 
        public TmfContext(TmfContext other) {
@@ -43,7 +43,7 @@ public class TmfContext implements ITmfContext, Cloneable {
        }
 
        public TmfContext() {
-               this(null, 0);
+               this(null, UNKNOWN_RANK);
        }
 
        // ------------------------------------------------------------------------
@@ -67,10 +67,14 @@ public class TmfContext implements ITmfContext, Cloneable {
        }
 
        public void updateRank(int delta) {
-               if (fRank != UNKNOWN_RANK)
+               if (isValidRank())
                        fRank += delta;
        }
 
+       public boolean isValidRank() {
+               return fRank != UNKNOWN_RANK;
+       }
+
        // ------------------------------------------------------------------------
        // Object
        // ------------------------------------------------------------------------
index 06b9716c8022a1dac634e6aa1ae35553cd6c5369..8ca8def31d0404333fdb929eecfb4e34e074c7eb 100644 (file)
@@ -17,17 +17,12 @@ import java.io.FileNotFoundException;
 import java.util.Collections;
 import java.util.Vector;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.linuxtools.tmf.component.TmfEventProvider;
 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.ITmfEventRequest;
-import org.eclipse.linuxtools.tmf.signal.TmfTraceUpdatedSignal;
 
 /**
  * <b><u>TmfTrace</u></b>
@@ -102,6 +97,12 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
        setName(simpleName);
        fPath = path;
         fIndexPageSize = (cacheSize > 0) ? cacheSize : DEFAULT_CACHE_SIZE;
+
+        try {
+                       fClone = clone();
+               } catch (CloneNotSupportedException e) {
+                       e.printStackTrace();
+               }
     }
 
     /* (non-Javadoc)
@@ -127,14 +128,6 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
         return fPath;
     }
 
-//    /**
-//     * @return the trace name
-//     */
-//    @Override
-//     public String getName() {
-//        return fName;
-//    }
-
     /* (non-Javadoc)
      * @see org.eclipse.linuxtools.tmf.stream.ITmfEventStream#getNbEvents()
      */
@@ -312,12 +305,27 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
                TmfEvent event = parseEvent(context);
                if (event != null) {
                        context.setLocation(getCurrentLocation());
+                       updateIndex(context, context.getRank(), event.getTimestamp());
                        context.updateRank(1);
                        processEvent(event);
                }
        return event;
        }
 
+       public synchronized void updateIndex(ITmfContext context, long rank, TmfTimestamp timestamp) {
+               // Build the index as we go along
+               if (context.isValidRank() && (rank % fIndexPageSize) == 0) {
+                       // Determine the table position
+                       long position = rank / fIndexPageSize;
+                       // Add new entry at proper location (if empty) 
+                       if (fCheckpoints.size() == position) {
+                               ITmfLocation<?> location = getCurrentLocation().clone();
+                               fCheckpoints.add(new TmfCheckpoint(timestamp, location));
+//                             System.out.println(getName() + "[" + (fCheckpoints.size() - 1) + "] " + timestamp + ", " + location.toString());
+                       }
+               }
+       }
+
     /**
         * Hook for "special" processing by the concrete class
         * (called by getNextEvent())
@@ -346,122 +354,5 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
        public String toString() {
                return "[TmfTrace (" + getName() + ")]";
        }
-
-    // ------------------------------------------------------------------------
-    // Indexing
-    // ------------------------------------------------------------------------
-
-       /*
-        * The purpose of the index is to perform a pass over the trace and collect
-        * basic information that can be later used to rapidly access a trace events.
-        * 
-        * The information collected:
-        * - fCheckpoints, the list of evenly separated checkpoints (timestamp + location)
-        * - fTimeRange, the trace time span
-        * - fNbEvents, the number of events in the trace
-        * 
-        * NOTE: Doesn't work for streaming traces.
-        */
-
-       private IndexingJob job;
-
-       // Indicates that an indexing job is already running
-       private boolean fIndexing = false;
-       private Boolean fIndexed  = false;
-
-       public void indexTrace(boolean waitForCompletion) {
-       synchronized (this) {
-                       if (fIndexed || fIndexing) {
-                       return;
-               }
-               fIndexing = true;
-       }
-
-       job = new IndexingJob("Indexing " + getName());
-       job.schedule();
-
-       if (waitForCompletion) {
-               try {
-                       job.join();
-               } catch (InterruptedException e) {
-                       e.printStackTrace();
-               }
-       }
-    }
-
-    private class IndexingJob extends Job {
-
-               public IndexingJob(String name) {
-                       super(name);
-               }
-
-               /* (non-Javadoc)
-                * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-                */
-               @Override
-               protected IStatus run(IProgressMonitor monitor) {
-
-            monitor.beginTask("Indexing " + getName(), IProgressMonitor.UNKNOWN);
-
-            int nbEvents = 0;
-            TmfTimestamp startTime = null;
-            TmfTimestamp lastTime  = null;
-
-            // Reset the index
-            fCheckpoints = new Vector<TmfCheckpoint>();
-            
-            try {
-               // Position the trace at the beginning
-                TmfContext context = seekLocation(null);
-                ITmfLocation<?> location = context.getLocation().clone();
-
-                // Get the first event
-                       TmfEvent event = getNextEvent(context);
-                       if (event != null) {
-                    startTime = new TmfTimestamp(event.getTimestamp());
-                       }
-
-                       // Index the trace
-                       while (event != null) {
-                       lastTime = event.getTimestamp();
-                               if ((nbEvents++ % fIndexPageSize) == 0) {
-                                       lastTime = new TmfTimestamp(event.getTimestamp());
-                               fCheckpoints.add(new TmfCheckpoint(lastTime, location));
-
-                        monitor.worked(1);
-
-                        // Check monitor *after* fCheckpoints has been updated
-                        if (monitor.isCanceled()) {
-                            monitor.done();
-                               return Status.CANCEL_STATUS;
-                        }
-                    }
-
-                    // We will need this location at the next iteration
-                    if ((nbEvents % fIndexPageSize) == 0) {
-                        location = context.getLocation().clone();
-                               }
-
-                    event = getNextEvent(context);
-                }
-            }
-            finally {
-                synchronized(this) {
-                       fNbEvents = nbEvents;
-                       fTimeRange = new TmfTimeRange(startTime, lastTime);
-                       fIndexing = false;
-                       fIndexed = true;
-                }
-                notifyListeners(fTimeRange);
-                monitor.done();
-            }
-
-            return Status.OK_STATUS;
-               }
-    }
-
-    protected void notifyListeners(TmfTimeRange range) {
-       broadcast(new TmfTraceUpdatedSignal(this, this, range));
-       }
    
 }
This page took 0.11454 seconds and 5 git commands to generate.