*
* Contributors:
* Patrick Tasse - Initial API and implementation
+ * Bernd Hufmann - Updated signal handling
*******************************************************************************/
package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;
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;
// ------------------------------------------------------------------------
// 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) {
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();
}
/**
// 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;
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;
// 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
*
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();
}
/**
// 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;
*
* Contributors:
* Francois Chouinard - Initial API and implementation
+ * Bernd Hufmann - Update register methods
*******************************************************************************/
package org.eclipse.linuxtools.tmf.core.signal;
* 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);
* 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);
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;
}
}
super.init(traceName, type);
+ // register as VIP after super.init() because TmfComponent registers to signal manager there
+ TmfSignalManager.registerVIP(this);
}
/**
*
* Contributors:
* Patrick Tasse - Initial API and implementation
+ * Bernd Hufmann - Updated signal handling
*******************************************************************************/
package org.eclipse.linuxtools.tmf.ui.views.callstack;
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;
// ------------------------------------------------------------------------
// 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
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();
}
/**
// ------------------------------------------------------------------------
// 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;
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;
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.
*
/**
* 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
* 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;
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;
// ------------------------------------------------------------------------
// 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
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();
}
}
};
thread.start();
}
+
+ private void loadTrace() {
+ Thread thread = new Thread("State system visualizer construction") { //$NON-NLS-1$
+ @Override
+ public void run() {
+ createTable();
+ }
+ };
+ thread.start();
+ }
+
}
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;
}
}
+ /**
+ * 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.
*
*/
@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));
} 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);
}
fView.setSDFilterProvider(this);
resetLoader();
-
IEditorPart editor = fView.getSite().getPage().getActiveEditor();
if (editor instanceof ITmfTraceEditor) {
ITmfTrace trace = ((ITmfTraceEditor) editor).getTrace();