[291981] Perform cleanup of previous experiment data when loading a new one
authorFrancois Chouinard <fchouinard@gmail.com>
Tue, 13 Oct 2009 01:40:17 +0000 (01:40 +0000)
committerFrancois Chouinard <fchouinard@gmail.com>
Tue, 13 Oct 2009 01:40:17 +0000 (01:40 +0000)
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/common/ParamsUpdater.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/controlflow/model/FlowProcessContainer.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/model/ResourceContainer.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/StateDataRequest.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/StateManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/experiment/StateExperimentManager.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/timeAnalysis/ITimeAnalysisViewer.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/timeAnalysis/TmfTimeAnalysisViewer.java

index 6d0ff65c2b8ac2468c8d8bc7189fe884c8200109..5b0ddbe472d40ab9eedf790384d78cb9f0b42c8a 100644 (file)
@@ -80,7 +80,22 @@ public abstract class AbsTimeUpdateView extends TmfView implements
                                // 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();
@@ -211,8 +226,13 @@ public abstract class AbsTimeUpdateView extends TmfView implements
         * 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
index e176d30db805ffa86848df2969687f81447fc820..5659066bd0ff6caf2f1dad672fa1a45cb04a663f 100644 (file)
@@ -88,6 +88,17 @@ public class ParamsUpdater {
                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
         * 
@@ -121,6 +132,12 @@ public class ParamsUpdater {
                        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;
 
index 86aadb32e23c6510267d87a6d4de4925b5a02ed0..cbf3df9cfa87d1e85bf4b97d3bc8079b455f8103 100644 (file)
@@ -964,9 +964,15 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                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();
 
@@ -983,7 +989,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                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
@@ -1132,14 +1138,36 @@ public class ControlFlowView extends AbsTimeUpdateView implements
        /*
         * (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());
+               }
        }
 
        /*
@@ -1168,9 +1196,10 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                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) {
@@ -1206,6 +1235,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
 
                        sb.append("\n\t\tRequested Time Range: " + range.getStartTime()
                                        + "-" + range.getEndTime());
+                       sb.append("\n\t\tExperiment Time Range: " + experimentStartTime
+                                       + "-" + experimentEndTime);
                        TraceDebug.debug(sb.toString());
                }
        }
index 18573f77a23adfe09e832dbf5d8bb68fdc2824ac..3b04c8dfa52a0dc3eeb7a307cac06ae063038bba 100644 (file)
@@ -79,6 +79,13 @@ public class FlowProcessContainer {
                }
        }
 
+       /**
+        * Clear all process items
+        */
+       public void clearProcesses() {
+               processes.clear();
+       }
+
        /**
         * remove the processes related to a specific trace e.g. during trace
         * removal
index 951fbbae53f67220c9e7fda05be845af417e2b63..00db51290202c95d85981afbe2687dd103bab256 100644 (file)
@@ -516,12 +516,18 @@ public class ResourcesView extends AbsTimeUpdateView implements
                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();
                        }
                });
@@ -599,14 +605,27 @@ public class ResourcesView extends AbsTimeUpdateView implements
        /*
         * (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());
+               }
        }
 
        /*
@@ -635,7 +654,7 @@ public class ResourcesView extends AbsTimeUpdateView implements
 
                // Update the view part
                resourceModelUpdates(resourceArr, experimentStartTime,
-                               experimentEndTime);
+                               experimentEndTime, request.isclearDataInd());
 
                // reselect to original time
                ParamsUpdater paramUpdater = ResourceModelFactory.getParamsUpdater();
index 16e105253541dd4031a19787df339276b8f65d1d..ff2e6dcc34e66cba2de1c4ea8bd857e9fd025e0c 100644 (file)
@@ -85,7 +85,14 @@ public class ResourceContainer {
             }
         }
        }
-       
+
+       /**
+        * 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
index a9f131c1a8d7deb9932fe80bcb68504026c77a1f..b4318fb107418b2227a1682729a13416c3a98158 100644 (file)
@@ -35,7 +35,7 @@ public class StateDataRequest extends TmfDataRequest<TmfEvent> {
        private StateManager manager = null;
        private long numOfEvents = 0;
        private boolean broadcast = false;
-
+       private boolean clearDataInd = false;
        // ========================================================================
        // Constructors
        // =======================================================================
@@ -165,4 +165,23 @@ public class StateDataRequest extends TmfDataRequest<TmfEvent> {
        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;
+       }
 }
index 62b93d6dbc2eda6e59d445c8a078ac5f7e547fed..0663458a48c0ab58e75a81757b4e69088d0e49af 100644 (file)
@@ -112,7 +112,13 @@ public class StateManager extends Observable {
        // ========================================================================
        // 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) {
@@ -142,6 +148,7 @@ public class StateManager extends Observable {
                        TmfTimeRange allTraceWindow = fEventLog.getTimeRange();
                        StateDataRequest request = getDataRequestStateSave(allTraceWindow,
                                        null);
+                       request.setclearDataInd(clearPreviousData);
 
                        // Wait for completion
                        request.startRequestInd(fExperiment, true, true);
@@ -612,7 +619,7 @@ public class StateManager extends Observable {
                        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
index 8489ac4cda0d7e6b13586073e7961f88433ff7c3..716e22449d672d641d9915d3ae5a04f1f3b32a6f 100644 (file)
@@ -124,19 +124,23 @@ public class StateExperimentManager extends TmfComponent {
        }
 
        /**
-        * 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);
        }
 
        /**
index 3a3fa87e546a958527fe122481ca1bd25d2a0bbc..d0d32d6628f96c9ddf6abceae626ef0628b4e9f2 100644 (file)
@@ -46,8 +46,11 @@ public interface ITimeAnalysisViewer extends ITmfViewer {
         *            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
index 61968535288a9c43128a5c9ebec25b20498d1298..38e3d166be07641317507f3b6e4db994969db17c 100644 (file)
@@ -89,8 +89,9 @@ public class TmfTimeAnalysisViewer implements ITimeAnalysisViewer, ITimeDataProv
         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
@@ -111,12 +112,19 @@ public class TmfTimeAnalysisViewer implements ITimeAnalysisViewer, ITimeDataProv
        }\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
@@ -243,7 +251,7 @@ public class TmfTimeAnalysisViewer implements ITimeAnalysisViewer, ITimeDataProv
        }\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
@@ -275,7 +283,8 @@ public class TmfTimeAnalysisViewer implements ITimeAnalysisViewer, ITimeDataProv
                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
This page took 0.082135 seconds and 5 git commands to generate.