From: Geneviève Bastien Date: Thu, 16 Feb 2017 20:56:28 +0000 (-0500) Subject: datastore: Add intervals without check for node read X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=4830649fcebe6acb944a9009e49b49ffc118edd4;p=deliverable%2Ftracecompass.git datastore: Add intervals without check for node read When nodes are read from disk, we know the intervals fit into it, there is no need to go through the code path that checks if the interval can go in the node. This change alone greatly reduces the performance impact of both single and full queries for large state system, when nodes are often read from disk. Change-Id: If653611b00d56b604d23ddd1f6e62bb22f822da0 Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/91756 Reviewed-by: Hudson CI Reviewed-by: Loic Prieur-Drevon --- diff --git a/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/HTNode.java b/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/HTNode.java index 0f214da215..3c3794b489 100644 --- a/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/HTNode.java +++ b/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/HTNode.java @@ -471,7 +471,7 @@ public class HTNode implements IHTNode { ISafeByteBufferReader readBuffer = SafeByteBufferFactory.wrapReader(buffer, res - buffer.position()); for (int i = 0; i < intervalCount; i++) { E interval = objectReader.readInterval(readBuffer); - newNode.add(interval); + newNode.addNoCheck(interval); } /* Assign the node's other information we have read previously */ @@ -679,6 +679,14 @@ public class HTNode implements IHTNode { } } + /** + * Directly add the interval to the node, without check. This method is + * package private because only the read method should make use of it. + */ + void addNoCheck(E newInterval) { + fIntervals.add(newInterval); + } + @Override public Iterable getMatchingIntervals(TimeRangeCondition timeCondition, Predicate extraPredicate) {