From 4830649fcebe6acb944a9009e49b49ffc118edd4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Thu, 16 Feb 2017 15:56:28 -0500 Subject: [PATCH] datastore: Add intervals without check for node read MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- .../provisional/datastore/core/historytree/HTNode.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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) { -- 2.34.1