// manager.
// Leave the GUI in charge of the updated data.
String traceId = smanager.getEventLog().getName();
- ModelUpdatePrep(traceId);
+
+ // indicate if the data model needs to be cleared e.g. a new
+ // experiment is being selected
+ boolean clearData = request.isclearDataInd();
+ // no new time range for zoom orders
+ TmfTimeRange trange = null;
+ if (clearData) {
+ // Time Range will be used to filter out events which are
+ // not visible in one pixel
+ trange = StateManagerFactory.getExperimentManager()
+ .getExperimentTimeRange();
+ }
+
+ //Indicate if current data needs to be cleared and if so
+ //specify the new experiment time range that applies
+ ModelUpdatePrep(traceId, clearData, trange);
} else {
// clean up any possible pending request
request.cancel();
* given traceId
*
* @param traceId
+ * @param clearAllData
+ * - reset all data e.g when a new experiment is selected
+ * @param timeRange
+ * - new total time range e.g. Experiment level
*/
- public abstract void ModelUpdatePrep(String traceId);
+ public abstract void ModelUpdatePrep(String traceId, boolean clearAllData,
+ TmfTimeRange timeRange);
/**
* Actions taken by the view to refresh its widget(s) with the updated data
return selectedTime;
}
+ /**
+ * Update time range but keep width as is
+ *
+ * @param time0
+ * @param time1
+ * @return
+ */
+ public boolean update(long time0, long time1) {
+ return update(time0, time1, width);
+ }
+
/**
* Only positive attributes are expected
*
TmfTimestamp fTimeEnd = new LttngTimestamp(endTime);
trange = new TmfTimeRange(fTimeStart, fTimeEnd);
+ // make sure the selected time is within the new range or else set
+ // mark it as invalid
+ if (selectedTime != null) {
+ setSelectedTime(selectedTime);
+ }
+
// update succeeded
updated = true;
table.setLinesVisible(true);
}
- // @Override
+ /**
+ * @param items
+ * @param startTime
+ * @param endTime
+ * @param updateTimeBounds - Update needed e.g. a new Experiment or trace selected
+ */
public void flowModelUpdates(final ITmfTimeAnalysisEntry[] items,
- final long startTime, final long endTime) {
+ final long startTime, final long endTime,
+ final boolean updateTimeBounds) {
final Table table = tableViewer.getTable();
Display display = table.getDisplay();
table.update();
tableViewer.refresh();
- tsfviewer.display(items, startTime, endTime);
+ tsfviewer.display(items, startTime, endTime, updateTimeBounds);
tsfviewer.resizeControls();
// Adjust the size of the vertical scroll bar to fit the
/*
* (non-Javadoc)
*
- * @seeorg.eclipse.linuxtools.lttng.ui.views.common.LttngTimeUpdateView#
- * ModelUpdatePrep(java.lang.String)
+ * @seeorg.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView#
+ * ModelUpdatePrep(java.lang.String, boolean)
*/
@Override
- public void ModelUpdatePrep(String traceId) {
- FlowModelFactory.getProcContainer().clearChildren(traceId);
+ public void ModelUpdatePrep(String traceId, boolean clearAllData,
+ TmfTimeRange trange) {
+ if (clearAllData) {
+ FlowModelFactory.getProcContainer().clearProcesses();
+ // Obtain the current process list
+ Vector<TimeRangeEventProcess> processList = FlowModelFactory
+ .getProcContainer().readProcesses();
+ // convert it to an Array as expected by the widget
+ TimeRangeEventProcess[] processArr = processList
+ .toArray(new TimeRangeEventProcess[processList.size()]);
+
+ // initialise to an empty model
+ flowModelUpdates(processArr, -1, -1, false);
+ } else {
+ FlowModelFactory.getProcContainer().clearChildren(traceId);
+ }
+
+ ParamsUpdater updater = FlowModelFactory.getParamsUpdater();
// Start over
- FlowModelFactory.getParamsUpdater().setEventsDiscarded(0);
+ updater.setEventsDiscarded(0);
+
+ // Update new visible time range if available
+ if (trange != null) {
+ updater.update(trange.getStartTime().getValue(), trange
+ .getEndTime().getValue());
+ }
}
/*
Arrays.sort(processArr);
// Update the view part
- flowModelUpdates(processArr, experimentStartTime, experimentEndTime);
+ flowModelUpdates(processArr, experimentStartTime, experimentEndTime,
+ request.isclearDataInd());
- // reselect to original time
+ // get back to user selected time if still within range
ParamsUpdater paramUpdater = FlowModelFactory.getParamsUpdater();
final Long selTime = paramUpdater.getSelectedTime();
if (selTime != null) {
sb.append("\n\t\tRequested Time Range: " + range.getStartTime()
+ "-" + range.getEndTime());
+ sb.append("\n\t\tExperiment Time Range: " + experimentStartTime
+ + "-" + experimentEndTime);
TraceDebug.debug(sb.toString());
}
}
}
}
+ /**
+ * Clear all process items
+ */
+ public void clearProcesses() {
+ processes.clear();
+ }
+
/**
* remove the processes related to a specific trace e.g. during trace
* removal
return strVal.substring(strVal.length() - 9);
}
+ /**
+ * @param items
+ * @param startTime
+ * @param endTime
+ * @param timeUpdate - Time bounds updated needed e.g. if a new Experiment or trace is selected
+ */
public void resourceModelUpdates(final ITmfTimeAnalysisEntry[] items,
- final long startTime, final long endTime) {
+ final long startTime, final long endTime, final boolean timeUpdate) {
tsfviewer.getControl().getDisplay().asyncExec(new Runnable() {
public void run() {
- tsfviewer.display(items, startTime, endTime);
+ tsfviewer.display(items, startTime, endTime, timeUpdate);
tsfviewer.resizeControls();
}
});
/*
* (non-Javadoc)
*
- * @seeorg.eclipse.linuxtools.lttng.ui.views.common.LttngTimeUpdateView#
- * ModelUpdatePrep(java.lang.String)
+ * @seeorg.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView#
+ * ModelUpdatePrep(java.lang.String, boolean)
*/
@Override
- public void ModelUpdatePrep(String traceId) {
- ResourceModelFactory.getResourceContainer().clearChildren(traceId);
+ public void ModelUpdatePrep(String traceId, boolean clearAllData,
+ TmfTimeRange trange) {
+ if (clearAllData) {
+ ResourceModelFactory.getResourceContainer().clearResources();
+ } else {
+ ResourceModelFactory.getResourceContainer().clearChildren(traceId);
+ }
+
+ ParamsUpdater updater = ResourceModelFactory.getParamsUpdater();
// Start over
- ResourceModelFactory.getParamsUpdater().setEventsDiscarded(0);
+ updater.setEventsDiscarded(0);
+
+ // Update new visible time range if available
+ if (trange != null) {
+ updater.update(trange.getStartTime().getValue(), trange
+ .getEndTime().getValue());
+ }
}
/*
// Update the view part
resourceModelUpdates(resourceArr, experimentStartTime,
- experimentEndTime);
+ experimentEndTime, request.isclearDataInd());
// reselect to original time
ParamsUpdater paramUpdater = ResourceModelFactory.getParamsUpdater();
}
}
}
-
+
+ /**
+ * Clear all resources items e.g. when a new experiment is selected
+ */
+ public void clearResources() {
+ resources.clear();
+ }
+
/**
* remove the resources related to a specific trace e.g. during trace
* removal
private StateManager manager = null;
private long numOfEvents = 0;
private boolean broadcast = false;
-
+ private boolean clearDataInd = false;
// ========================================================================
// Constructors
// =======================================================================
public long getNumOfEvents() {
return numOfEvents;
}
+
+ /**
+ * @param clearAllData
+ * indicates the need to clear all previous data e.g. a new
+ * experiment selection
+ */
+ public void setclearDataInd(boolean clearAllData) {
+ this.clearDataInd = clearAllData;
+ }
+
+ /**
+ * Returns indication - clearing of all existing data model is required e.g
+ * from the selection of a new experiment
+ *
+ * @return
+ */
+ public boolean isclearDataInd() {
+ return clearDataInd;
+ }
}
// ========================================================================
// Methods
// =======================================================================
- public void setTraceSelection(TmfExperiment experiment) {
+ /**
+ * A new Experiment or trace selected
+ * @param experiment
+ * @param clearPreviousData
+ */
+ public void setTraceSelection(TmfExperiment experiment,
+ boolean clearPreviousData) {
// New log in use, read all events and build state transition stack
if (experiment != null) {
if (fExperiment != null && fExperiment != experiment) {
TmfTimeRange allTraceWindow = fEventLog.getTimeRange();
StateDataRequest request = getDataRequestStateSave(allTraceWindow,
null);
+ request.setclearDataInd(clearPreviousData);
// Wait for completion
request.startRequestInd(fExperiment, true, true);
TmfExperiment newExpt = new TmfExperiment("trace1", testStream);
// This will create all the checkpoint
- stateManagerTest.setTraceSelection(newExpt);
+ stateManagerTest.setTraceSelection(newExpt, false);
System.out.println("JOIE JOIE FIN DE LA CREATION DES CHECKPOINTS");
// *** Restore some checkpoint to test
}
/**
- * A new trace log is opened, notification received from the framework
- * Notify the new log selection to the state handling manager
+ * A new Experiment selected, notification received from the framework
+ * Notify the new log selection to the state handling managers
*
* @param experiment
*/
private void traceSelected(TmfExperiment experiment) {
- // TODO: Re-factor when the experiment provides the list of traces per
+ // TODO: Re-factor when multiple traces are supported
// traceId, as well as when the request can be specified at the trace
// level
// For the moment it does work for only one trace per experiment.
String experimentId = experiment.getExperimentId();
StateManager manager = StateManagerFactory.getManager(experimentId);
- manager.setTraceSelection(experiment);
+ // TODO: clearAllData shall not be applied to all manager calls below
+ // since that would clean all data loaded within previous iterations in
+ // the future loop. i.e. It can be applied to first manager in the loop.
+ boolean clearAllData = true;
+ manager.setTraceSelection(experiment, clearAllData);
}
/**
* displayed\r
* @param end\r
* Specifies a fixed end time to the information to be displayed\r
+ * @param updateTimeBounds\r
+ * If True - Time Range boundaries update is required\r
*/\r
- public abstract void display(ITmfTimeAnalysisEntry[] traceArr, long start, long end);\r
+ public abstract void display(ITmfTimeAnalysisEntry[] traceArr, long start,\r
+ long end, boolean updateTimeBounds);\r
\r
/**\r
* The start and End time are taken from the limits used by the children\r
modelUpdate(traceArr);\r
}\r
\r
- public void display(ITmfTimeAnalysisEntry[] traceArr, long start, long end) {\r
- modelUpdate(traceArr, start, end);\r
+ public void display(ITmfTimeAnalysisEntry[] traceArr, long start, long end,\r
+ boolean updateTimeBounds) {\r
+ modelUpdate(traceArr, start, end, updateTimeBounds);\r
}\r
\r
public void controlMoved(ControlEvent e) {\r
}\r
\r
// called from the display order in the API\r
- public void modelUpdate(ITmfTimeAnalysisEntry[] traces, long start, long end) {\r
+ public void modelUpdate(ITmfTimeAnalysisEntry[] traces, long start,\r
+ long end, boolean updateTimeBounds) {\r
if (null != _stateCtrl) {\r
loadOptions();\r
updateInternalData(traces, start, end);\r
- _stateCtrl.redraw();\r
- _timeScaleCtrl.redraw();\r
+ if (updateTimeBounds) {\r
+ _timeRangeFixed = true;\r
+ // set window to match limits\r
+ setStartFinishTimeExt(_time0_, _time1_);\r
+ } else {\r
+ _stateCtrl.redraw();\r
+ _timeScaleCtrl.redraw();\r
+ }\r
}\r
}\r
\r
}\r
\r
void setTimeBounds() {\r
- _time0_ = _beginTime - (long) ((_endTime - _beginTime) * 0.05);\r
+ _time0_ = _beginTime - (long) ((_endTime - _beginTime) * 0.02);\r
if (_time0_ < 0)\r
_time0_ = 0;\r
// _time1_ = _time0_ + (_endTime - _time0_) * 1.05;\r
if (null == traces)\r
traces = new ITmfTimeAnalysisEntry[0];\r
if (end < 1 || start < 1) {\r
- // End or start time are unspecified\r
+ // End or start time are unspecified and need to be determined from\r
+ // individual processes\r
setTimeRange(traces);\r
} else {\r
_endTime = end;\r