import org.eclipse.linuxtools.tmf.core.exceptions.StateValueTypeException;\r
import org.eclipse.linuxtools.tmf.core.exceptions.TimeRangeException;\r
import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;\r
+import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentDisposedSignal;\r
import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;\r
import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;\r
import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;\r
public void run() {\r
ArrayList<TraceEntry> entryList = null;\r
synchronized (fEntryListSyncObj) {\r
- entryList = fEntryList;\r
+ entryList = (ArrayList<TraceEntry>) fEntryList.clone();\r
}\r
if (entryList == null) {\r
return;\r
*/\r
@Override\r
public void setFocus() {\r
+ refresh(INITIAL_WINDOW_OFFSET);\r
fTimeGraphViewer.setFocus();\r
}\r
\r
thread.start();\r
}\r
\r
+ /**\r
+ * Experiment is disposed: clear the data structures and the view\r
+ *\r
+ * @param signal the signal received\r
+ */\r
+ @TmfSignalHandler\r
+ public void experimentDisposed(final TmfExperimentDisposedSignal signal) {\r
+ if (signal.getExperiment().equals(fSelectedExperiment)) {\r
+ fSelectedExperiment = null;\r
+ fStartTime = 0;\r
+ fEndTime = 0;\r
+ fZoomThread.cancel();\r
+ synchronized(fEntryListSyncObj) {\r
+ fEntryList.clear();\r
+ }\r
+ refresh(INITIAL_WINDOW_OFFSET);\r
+ }\r
+ }\r
+\r
/**\r
* Handler for the TimeSynch signal\r
*\r
}\r
ITimeGraphEntry[] entries = null;\r
synchronized (fEntryListSyncObj) {\r
- entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+ if (fEntryList != null) {\r
+ entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+ }\r
}\r
- Arrays.sort(entries, new TraceEntryComparator());\r
- fTimeGraphViewer.setInput(entries);\r
- fTimeGraphViewer.setTimeBounds(fStartTime, fEndTime);\r
+ if (entries != null) {\r
+ Arrays.sort(entries, new TraceEntryComparator());\r
+ fTimeGraphViewer.setInput(entries);\r
+ fTimeGraphViewer.setTimeBounds(fStartTime, fEndTime);\r
\r
- long endTime = fStartTime + windowRange;\r
+ long endTime = fStartTime + windowRange;\r
\r
- if (fEndTime < endTime) {\r
- endTime = fEndTime;\r
- }\r
- fTimeGraphViewer.setStartFinishTime(fStartTime, endTime);\r
+ if (fEndTime < endTime) {\r
+ endTime = fEndTime;\r
+ }\r
+ fTimeGraphViewer.setStartFinishTime(fStartTime, endTime);\r
\r
- startZoomThread(fStartTime, endTime);\r
+ startZoomThread(fStartTime, endTime);\r
+ }\r
}\r
});\r
}\r
\r
-\r
private void redraw() {\r
synchronized (fSyncObj) {\r
if (fRedrawState == State.IDLE) {\r