TMF: speed up XML view entry start and end time queries
authorFrançois Rajotte <francois.rajotte@polymtl.ca>
Fri, 25 Apr 2014 21:56:22 +0000 (17:56 -0400)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Wed, 30 Apr 2014 14:07:47 +0000 (10:07 -0400)
Change-Id: I6ad6a2484cd569fe0d1ce8a6f7449aba924f4578
Signed-off-by: François Rajotte <francois.rajotte@polymtl.ca>
Signed-off-by: Florian Wininger <florian.wininger@polymtl.ca>
Reviewed-on: https://git.eclipse.org/r/25598
Tested-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
org.eclipse.linuxtools.tmf.analysis.xml.ui/src/org/eclipse/linuxtools/tmf/analysis/xml/ui/views/timegraph/XmlTimeGraphView.java

index 067a4dba05274192e103f6574e6943ebf397e91d..185d75209a39a2c69f435c4876b2c933a85ce2ed 100644 (file)
@@ -432,20 +432,32 @@ public class XmlTimeGraphView extends AbstractTimeGraphView {
 
         long entryStart = ss.getStartTime();
         long entryEnd = ss.getCurrentEndTime();
+
         try {
-            boolean first = true;
-            List<ITmfStateInterval> execNameIntervals = ss.queryHistoryRange(displayQuark, ss.getStartTime(), ss.getCurrentEndTime());
 
-            for (ITmfStateInterval execNameInterval : execNameIntervals) {
+            ITmfStateInterval oneInterval = ss.querySingleState(entryStart, displayQuark);
 
-                if (!execNameInterval.getStateValue().isNull()) {
-                    if (first) {
-                        entryStart = execNameInterval.getStartTime();
-                        first = false;
-                    }
-                    entryEnd = execNameInterval.getEndTime();
+            /* The entry start is the first non-null interval */
+            while (oneInterval.getStateValue().isNull()) {
+                long ts = oneInterval.getEndTime() + 1;
+                if (ts > ss.getCurrentEndTime()) {
+                    break;
                 }
+                oneInterval = ss.querySingleState(ts, displayQuark);
             }
+            entryStart = oneInterval.getStartTime();
+
+            /* The entry end is the last non-null interval */
+            oneInterval = ss.querySingleState(entryEnd, displayQuark);
+            while (oneInterval.getStateValue().isNull()) {
+                long ts = oneInterval.getStartTime() - 1;
+                if (ts < ss.getStartTime()) {
+                    break;
+                }
+                oneInterval = ss.querySingleState(ts, displayQuark);
+            }
+            entryEnd = oneInterval.getEndTime();
+
         } catch (AttributeNotFoundException | StateSystemDisposedException e) {
         }
 
This page took 0.02638 seconds and 5 git commands to generate.