Fix for empty views that extend TmfView after restart (Bug 409345)
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Wed, 29 May 2013 13:11:59 +0000 (09:11 -0400)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Fri, 31 May 2013 16:54:04 +0000 (12:54 -0400)
All views in Tmf/LTTng are affected by this problem:

- Add Handling of TmfTraceOpenedSignal in all relevant views
- The TmfUml2SDSyncLoader handles now the TmfTraceOpenedSignal
- TmfTrace is now registered as VIP listener for signals

Change-Id: Id0275bb44f72e4a05be8b91699958975c7b108f9
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/13336
Tested-by: Hudson CI
Reviewed-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
IP-Clean: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Tested-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
IP-Clean: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/signal/TmfSignalManager.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/callstack/CallStackView.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/environment/TmfEnvironmentView.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/histogram/HistogramView.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/statesystem/TmfStateSystemExplorer.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/uml2sd/loader/TmfUml2SDSyncLoader.java

index 5d76a6b546c6e5b69f5a6a07b8ed379d8d9457ff..e9181da46b3878450460612b5119be5b95f49457 100644 (file)
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *   Patrick Tasse - Initial API and implementation
+ *   Bernd Hufmann - Updated signal handling
  *******************************************************************************/
 
 package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;
@@ -41,6 +42,7 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.statevalue.ITmfStateValue;
@@ -428,12 +430,23 @@ public class ControlFlowView extends TmfView {
     // ------------------------------------------------------------------------
     // Signal handlers
     // ------------------------------------------------------------------------
+    /**
+     * Handler for the trace opened signal.
+     * @param signal
+     *            The incoming signal
+     * @since 2.0
+     */
+    @TmfSignalHandler
+    public void traceOpened(TmfTraceOpenedSignal signal) {
+        fTrace = signal.getTrace();
+        loadTrace();
+    }
 
     /**
      * Handler for the trace selected signal
      *
      * @param signal
-     *            The signal that's received
+     *            The incoming signal
      */
     @TmfSignalHandler
     public void traceSelected(final TmfTraceSelectedSignal signal) {
@@ -441,21 +454,7 @@ public class ControlFlowView extends TmfView {
             return;
         }
         fTrace = signal.getTrace();
-
-        synchronized (fEntryListMap) {
-            fEntryList = fEntryListMap.get(fTrace);
-            if (fEntryList == null) {
-                synchronized (fBuildThreadMap) {
-                    BuildThread buildThread = new BuildThread(fTrace);
-                    fBuildThreadMap.put(fTrace, buildThread);
-                    buildThread.start();
-                }
-            } else {
-                fStartTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
-                fEndTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
-                refresh();
-            }
-        }
+        loadTrace();
     }
 
     /**
@@ -593,6 +592,23 @@ public class ControlFlowView extends TmfView {
     // Internal
     // ------------------------------------------------------------------------
 
+    private void loadTrace() {
+        synchronized (fEntryListMap) {
+            fEntryList = fEntryListMap.get(fTrace);
+            if (fEntryList == null) {
+                synchronized (fBuildThreadMap) {
+                    BuildThread buildThread = new BuildThread(fTrace);
+                    fBuildThreadMap.put(fTrace, buildThread);
+                    buildThread.start();
+                }
+            } else {
+                fStartTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
+                fEndTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
+                refresh();
+            }
+        }
+    }
+
     private void buildEventList(final ITmfTrace trace, IProgressMonitor monitor) {
         fStartTime = Long.MAX_VALUE;
         fEndTime = Long.MIN_VALUE;
index 2d7bbd58628f2f8ac2955569308f1adb1bac6517..52c225c9e3e061190f3ba9cb62e801551008d7d1 100644 (file)
@@ -38,6 +38,7 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
@@ -356,6 +357,17 @@ public class ResourcesView extends TmfView {
     // Signal handlers
     // ------------------------------------------------------------------------
 
+    /**
+     * Handler for the trace opened signal.
+     * @param signal the trace selected signal
+     * @since 2.0
+     */
+    @TmfSignalHandler
+    public void traceOpened(TmfTraceOpenedSignal signal) {
+        fTrace = signal.getTrace();
+        loadTrace();
+    }
+
     /**
      * Handler for the trace selected signal
      *
@@ -368,21 +380,7 @@ public class ResourcesView extends TmfView {
             return;
         }
         fTrace = signal.getTrace();
-
-        synchronized (fEntryListMap) {
-            fEntryList = fEntryListMap.get(fTrace);
-            if (fEntryList == null) {
-                synchronized (fBuildThreadMap) {
-                    BuildThread buildThread = new BuildThread(fTrace);
-                    fBuildThreadMap.put(fTrace, buildThread);
-                    buildThread.start();
-                }
-            } else {
-                fStartTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
-                fEndTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
-                refresh();
-            }
-        }
+        loadTrace();
     }
 
     /**
@@ -470,6 +468,23 @@ public class ResourcesView extends TmfView {
     // Internal
     // ------------------------------------------------------------------------
 
+    private void loadTrace() {
+        synchronized (fEntryListMap) {
+            fEntryList = fEntryListMap.get(fTrace);
+            if (fEntryList == null) {
+                synchronized (fBuildThreadMap) {
+                    BuildThread buildThread = new BuildThread(fTrace);
+                    fBuildThreadMap.put(fTrace, buildThread);
+                    buildThread.start();
+                }
+            } else {
+                fStartTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
+                fEndTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
+                refresh();
+            }
+        }
+    }
+
     private void buildEventList(final ITmfTrace trace, IProgressMonitor monitor) {
         fStartTime = Long.MAX_VALUE;
         fEndTime = Long.MIN_VALUE;
index cbbf343b53ffe5a5e68bdb320f3a7807f9d7118e..1ad50f745597893ff24c9139fa7874703e73320d 100644 (file)
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *   Francois Chouinard - Initial API and implementation
+ *   Bernd Hufmann - Update register methods
  *******************************************************************************/
 
 package org.eclipse.linuxtools.tmf.core.signal;
@@ -60,6 +61,7 @@ public class TmfSignalManager {
      *            The object that will be notified of new signals
      */
     public static synchronized void register(Object listener) {
+        deregister(listener); // make sure that listener is only registered once
         Method[] methods = getSignalHandlerMethods(listener);
         if (methods.length > 0) {
             fListeners.put(listener, methods);
@@ -75,6 +77,7 @@ public class TmfSignalManager {
      *            The object that will be notified of new signals
      */
     public static synchronized void registerVIP(Object listener) {
+        deregister(listener); // make sure that listener is only registered once
         Method[] methods = getSignalHandlerMethods(listener);
         if (methods.length > 0) {
             fVIPListeners.put(listener, methods);
index 5a9fd53599f835c1e4514e83305a0d45acebe34c..a698f9540a6536a06a53c9684bf9d17372a955c5 100644 (file)
@@ -28,6 +28,7 @@ import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException;
 import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest;
 import org.eclipse.linuxtools.tmf.core.request.ITmfEventRequest;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.linuxtools.tmf.core.signal.TmfSignalManager;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceRangeUpdatedSignal;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
@@ -219,6 +220,8 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
             }
         }
         super.init(traceName, type);
+        // register as VIP after super.init() because TmfComponent registers to signal manager there
+        TmfSignalManager.registerVIP(this);
     }
 
     /**
index 951b3232bb13b992702c595eb5b52a630b35116b..038fd723db753fa2ed2e1cd80706b0ee8d5d4678 100644 (file)
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *   Patrick Tasse - Initial API and implementation
+ *   Bernd Hufmann - Updated signal handling
  *******************************************************************************/
 
 package org.eclipse.linuxtools.tmf.ui.views.callstack;
@@ -47,6 +48,7 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.statevalue.ITmfStateValue;
@@ -582,6 +584,17 @@ public class CallStackView extends TmfView {
     // ------------------------------------------------------------------------
     // Signal handlers
     // ------------------------------------------------------------------------
+    /**
+     * Handler for the trace opened signal.
+     * @param signal
+     *            The incoming signal
+     * @since 2.0
+     */
+    @TmfSignalHandler
+    public void traceOpened(TmfTraceOpenedSignal signal) {
+        fTrace = signal.getTrace();
+        loadTrace();
+    }
 
     /**
      * Handler for the trace selected signal
@@ -595,21 +608,7 @@ public class CallStackView extends TmfView {
             return;
         }
         fTrace = signal.getTrace();
-
-        synchronized (fEntryListMap) {
-            fEntryList = fEntryListMap.get(fTrace);
-            if (fEntryList == null) {
-                synchronized (fBuildThreadMap) {
-                    BuildThread buildThread = new BuildThread(fTrace);
-                    fBuildThreadMap.put(fTrace, buildThread);
-                    buildThread.start();
-                }
-            } else {
-                fStartTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
-                fEndTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
-                refresh();
-            }
-        }
+        loadTrace();
     }
 
     /**
@@ -734,6 +733,22 @@ public class CallStackView extends TmfView {
     // ------------------------------------------------------------------------
     // Internal
     // ------------------------------------------------------------------------
+    private void loadTrace() {
+        synchronized (fEntryListMap) {
+            fEntryList = fEntryListMap.get(fTrace);
+            if (fEntryList == null) {
+                synchronized (fBuildThreadMap) {
+                    BuildThread buildThread = new BuildThread(fTrace);
+                    fBuildThreadMap.put(fTrace, buildThread);
+                    buildThread.start();
+                }
+            } else {
+                fStartTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
+                fEndTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
+                refresh();
+            }
+        }
+    }
 
     private void buildThreadList(final ITmfTrace trace, IProgressMonitor monitor) {
         fStartTime = Long.MAX_VALUE;
index 82f31727bbb61c3faf1d3a1db15a0ac1631adaa1..0a190bcd8d0e09527d0a0a2f6a78ccf2177a1136 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Map;
 
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTraceProperties;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
@@ -111,6 +112,19 @@ public class TmfEnvironmentView extends TmfView {
         fTree.setFocus();
     }
 
+    /**
+     * Handler for the trace opened signal.
+     * @param signal
+     *            The incoming signal
+     * @since 2.0
+     */
+    @TmfSignalHandler
+    public void traceOpened(TmfTraceOpenedSignal signal) {
+        fTrace = signal.getTrace();
+        updateTable();
+    }
+
+
     /**
      * Handler for the trace selected signal.
      *
index 5393cdc49b7adb920225022c2392c0e2c3c7ade6..45cd97e821c838e21822a77be1ed9680aa110481 100644 (file)
@@ -378,7 +378,7 @@ public class HistogramView extends TmfView {
     /**
      * Handles trace opened signal. Loads histogram if new trace time range is not
      * equal <code>TmfTimeRange.NULL_RANGE</code>
-     * @param signal the trace selected signal
+     * @param signal the trace opened signal
      * @since 2.0
      */
     @TmfSignalHandler
index 7d14a6930d8653331dc1d111e695bbe748122e38..126e0fc623735cab08b185cc4cf489f75cd6db66 100644 (file)
@@ -9,6 +9,7 @@
  * Contributors:
  *   Florian Wininger - Initial API and implementation
  *   Alexandre Montplaisir - Refactoring, performance tweaks
+ *   Bernd Hufmann - Updated signal handling
  *******************************************************************************/
 
 package org.eclipse.linuxtools.tmf.ui.views.statesystem;
@@ -25,6 +26,7 @@ import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.statevalue.ITmfStateValue;
@@ -380,6 +382,17 @@ public class TmfStateSystemExplorer extends TmfView {
     // ------------------------------------------------------------------------
     // Signal handlers
     // ------------------------------------------------------------------------
+    /**
+     * Handler for the trace opened signal.
+     * @param signal
+     *            The incoming signal
+     * @since 2.0
+     */
+    @TmfSignalHandler
+    public void traceOpened(TmfTraceOpenedSignal signal) {
+        fTrace = signal.getTrace();
+        loadTrace();
+    }
 
     /**
      * Handler for the trace selected signal. This will make the view display
@@ -393,13 +406,7 @@ public class TmfStateSystemExplorer extends TmfView {
         ITmfTrace trace = signal.getTrace();
         if (trace != fTrace) {
             fTrace = trace;
-            Thread thread = new Thread("State system visualizer construction") { //$NON-NLS-1$
-                @Override
-                public void run() {
-                    createTable();
-                }
-            };
-            thread.start();
+            loadTrace();
         }
     }
 
@@ -437,4 +444,15 @@ public class TmfStateSystemExplorer extends TmfView {
         };
         thread.start();
     }
+
+    private void loadTrace() {
+        Thread thread = new Thread("State system visualizer construction") { //$NON-NLS-1$
+            @Override
+            public void run() {
+                createTable();
+            }
+        };
+        thread.start();
+    }
+
 }
index d514914403b049d248f146928df437509a7a320f..a4f24a557cc4a2b9335ee75cbd02cb673e3d0756 100644 (file)
@@ -38,6 +38,7 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange;
@@ -262,6 +263,18 @@ public class TmfUml2SDSyncLoader extends TmfComponent implements IUml2SDLoader,
         }
     }
 
+    /**
+     * Handler for the trace opened signal.
+     * @param signal The trace opened signal
+     * @since 2.0
+     */
+    @TmfSignalHandler
+    public void traceOpened(TmfTraceOpenedSignal signal) {
+        fTrace = signal.getTrace();
+        loadTrace();
+    }
+
+
     /**
      * Signal handler for the trace selected signal.
      *
@@ -273,81 +286,57 @@ public class TmfUml2SDSyncLoader extends TmfComponent implements IUml2SDLoader,
      */
     @TmfSignalHandler
     public void traceSelected(TmfTraceSelectedSignal signal) {
+        // Update the trace reference
+        ITmfTrace trace = signal.getTrace();
+        if (!trace.equals(fTrace)) {
+            fTrace = trace;
+        }
+        loadTrace();
+    }
 
+    /**
+     * Method for loading the current selected trace into the view.
+     * Sub-class need to override this method to add the view specific implementation.
+     * @since 2.0
+     */
+    protected void loadTrace() {
         ITmfEventRequest indexRequest = null;
         fLock.lock();
-        try {
-            // Update the trace reference
-            ITmfTrace trace = signal.getTrace();
-            if (!trace.equals(fTrace)) {
-                fTrace = trace;
-            } else {
-                return;
-            }
-
-            final Job job = new IndexingJob("Indexing " + getName() + "..."); //$NON-NLS-1$ //$NON-NLS-2$
-            job.setUser(false);
-            job.schedule();
-
-            indexRequest = fIndexRequest;
-
-            cancelOngoingRequests();
-
-            TmfTimeRange window = TmfTimeRange.ETERNITY;
-
-            fIndexRequest = new TmfEventRequest(ITmfEvent.class, window, TmfDataRequest.ALL_DATA, DEFAULT_BLOCK_SIZE, ITmfDataRequest.ExecutionType.BACKGROUND) {
 
-                private ITmfTimestamp fFirstTime = null;
-                private ITmfTimestamp fLastTime = null;
-                private int fNbSeqEvents = 0;
-                private final List<ITmfSyncSequenceDiagramEvent> fSdEvents = new ArrayList<ITmfSyncSequenceDiagramEvent>(MAX_NUM_OF_MSG);
-
-                @Override
-                public void handleData(ITmfEvent event) {
-                    super.handleData(event);
+        try {
+        final Job job = new IndexingJob("Indexing " + getName() + "..."); //$NON-NLS-1$ //$NON-NLS-2$
+        job.setUser(false);
+        job.schedule();
 
-                    ITmfSyncSequenceDiagramEvent sdEvent = getSequenceDiagramEvent(event);
+        indexRequest = fIndexRequest;
 
-                    if (sdEvent != null) {
-                        ++fNbSeqEvents;
+        cancelOngoingRequests();
 
-                        if (fFirstTime == null) {
-                            fFirstTime = event.getTimestamp();
-                        }
+        TmfTimeRange window = TmfTimeRange.ETERNITY;
 
-                        fLastTime = event.getTimestamp();
+        fIndexRequest = new TmfEventRequest(ITmfEvent.class, window, TmfDataRequest.ALL_DATA, DEFAULT_BLOCK_SIZE, ITmfDataRequest.ExecutionType.BACKGROUND) {
 
-                        if ((fNbSeqEvents % MAX_NUM_OF_MSG) == 0) {
-                            fLock.lock();
-                            try {
-                                fCheckPoints.add(new TmfTimeRange(fFirstTime, fLastTime));
-                                if (fView != null) {
-                                    fView.updateCoolBar();
-                                }
-                            } finally {
-                                fLock.unlock();
-                            }
-                            fFirstTime = null;
+            private ITmfTimestamp fFirstTime = null;
+            private ITmfTimestamp fLastTime = null;
+            private int fNbSeqEvents = 0;
+            private final List<ITmfSyncSequenceDiagramEvent> fSdEvents = new ArrayList<ITmfSyncSequenceDiagramEvent>(MAX_NUM_OF_MSG);
 
-                        }
+            @Override
+            public void handleData(ITmfEvent event) {
+                super.handleData(event);
 
-                        if (fNbSeqEvents > MAX_NUM_OF_MSG) {
-                            // page is full
-                            return;
-                        }
+                ITmfSyncSequenceDiagramEvent sdEvent = getSequenceDiagramEvent(event);
 
-                        fSdEvents.add(sdEvent);
+                if (sdEvent != null) {
+                    ++fNbSeqEvents;
 
-                        if (fNbSeqEvents == MAX_NUM_OF_MSG) {
-                            fillCurrentPage(fSdEvents);
-                        }
+                    if (fFirstTime == null) {
+                        fFirstTime = event.getTimestamp();
                     }
-                }
 
-                @Override
-                public void handleSuccess() {
-                    if ((fFirstTime != null) && (fLastTime != null)) {
+                    fLastTime = event.getTimestamp();
 
+                    if ((fNbSeqEvents % MAX_NUM_OF_MSG) == 0) {
                         fLock.lock();
                         try {
                             fCheckPoints.add(new TmfTimeRange(fFirstTime, fLastTime));
@@ -357,34 +346,64 @@ public class TmfUml2SDSyncLoader extends TmfComponent implements IUml2SDLoader,
                         } finally {
                             fLock.unlock();
                         }
+                        fFirstTime = null;
+
                     }
 
-                    if (fNbSeqEvents <= MAX_NUM_OF_MSG) {
-                        fillCurrentPage(fSdEvents);
+                    if (fNbSeqEvents > MAX_NUM_OF_MSG) {
+                        // page is full
+                        return;
                     }
 
-                    super.handleSuccess();
+                    fSdEvents.add(sdEvent);
+
+                    if (fNbSeqEvents == MAX_NUM_OF_MSG) {
+                        fillCurrentPage(fSdEvents);
+                    }
                 }
+            }
+
+            @Override
+            public void handleSuccess() {
+                if ((fFirstTime != null) && (fLastTime != null)) {
 
-                @Override
-                public void handleCompleted() {
-                    if (fEvents.isEmpty()) {
-                        fFrame = new Frame();
-                        fView.setFrameSync(fFrame);
+                    fLock.lock();
+                    try {
+                        fCheckPoints.add(new TmfTimeRange(fFirstTime, fLastTime));
+                        if (fView != null) {
+                            fView.updateCoolBar();
+                        }
+                    } finally {
+                        fLock.unlock();
                     }
-                    super.handleCompleted();
-                    job.cancel();
                 }
-            };
 
-        } finally {
-            fLock.unlock();
-        }
-        if (indexRequest != null && !indexRequest.isCompleted()) {
-            indexRequest.cancel();
-        }
-        resetLoader();
-        fTrace.sendRequest(fIndexRequest);
+                if (fNbSeqEvents <= MAX_NUM_OF_MSG) {
+                    fillCurrentPage(fSdEvents);
+                }
+
+                super.handleSuccess();
+            }
+
+            @Override
+            public void handleCompleted() {
+                if (fEvents.isEmpty()) {
+                    fFrame = new Frame();
+                    fView.setFrameSync(fFrame);
+                }
+                super.handleCompleted();
+                job.cancel();
+            }
+        };
+
+    } finally {
+        fLock.unlock();
+    }
+    if (indexRequest != null && !indexRequest.isCompleted()) {
+        indexRequest.cancel();
+    }
+    resetLoader();
+    fTrace.sendRequest(fIndexRequest);
 
     }
 
@@ -480,7 +499,6 @@ public class TmfUml2SDSyncLoader extends TmfComponent implements IUml2SDLoader,
             fView.setSDFilterProvider(this);
 
             resetLoader();
-
             IEditorPart editor = fView.getSite().getPage().getActiveEditor();
             if (editor instanceof ITmfTraceEditor) {
                 ITmfTrace trace = ((ITmfTraceEditor) editor).getTrace();
This page took 0.034603 seconds and 5 git commands to generate.