From 90846f6e613fba21644510433490a2c6897e2439 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Thu, 23 Feb 2017 17:07:47 -0500 Subject: [PATCH] datastore: Rewrite some stream and list manipulations MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch rewrites some list and stream manipulations to plain java. It has a non-negligeable impact on performance. Change-Id: I11881780d30f27592765140edda1af04b1a2c1e5 Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/91757 Reviewed-by: Hudson CI Reviewed-by: Loic Prieur-Drevon --- .../core/historytree/AbstractHistoryTree.java | 9 ++++----- .../datastore/core/historytree/HTNode.java | 14 +++++++------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/AbstractHistoryTree.java b/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/AbstractHistoryTree.java index b61152059e..b606d55a5d 100644 --- a/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/AbstractHistoryTree.java +++ b/statesystem/org.eclipse.tracecompass.datastore.core/src/org/eclipse/tracecompass/internal/provisional/datastore/core/historytree/AbstractHistoryTree.java @@ -38,7 +38,6 @@ import org.eclipse.tracecompass.internal.provisional.datastore.core.interval.IHT import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; /** * Base class for history trees that encapsulates the logic to read from/write @@ -888,7 +887,7 @@ public abstract class AbstractHistoryTree> intervalsOfNodes = new LinkedList<>(); + List intervalsOfNodes = new ArrayList<>(); /* Queue is a stack of nodes containing nodes intersecting t */ Deque queue = new LinkedList<>(); @@ -911,12 +910,12 @@ public abstract class AbstractHistoryTree nodeIntervals = currentNode.getMatchingIntervals(nodeCondition, extraPredicate); - intervalsOfNodes.add(nodeIntervals); + Collection nodeIntervals = currentNode.getMatchingIntervals(nodeCondition, extraPredicate); + intervalsOfNodes.addAll(nodeIntervals); } } catch (ClosedChannelException e) { } - return Iterables.concat(intervalsOfNodes); + return intervalsOfNodes; } @Override 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 3c3794b489..7a29d64a22 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 @@ -23,7 +23,6 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.Predicate; -import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -312,9 +311,11 @@ public class HTNode implements IHTNode { public final Collection selectNextChildren(TimeRangeCondition timeCondition) { fNode.takeReadLock(); try { - return selectNextIndices(timeCondition).stream() - .map(i -> fChildren[i]) - .collect(Collectors.toList()); + List list = new ArrayList<>(); + for (int index : selectNextIndices(timeCondition)) { + list.add(fChildren[index]); + } + return list; } finally { fNode.releaseReadLock(); } @@ -688,11 +689,10 @@ public class HTNode implements IHTNode { } @Override - public Iterable getMatchingIntervals(TimeRangeCondition timeCondition, + public Collection getMatchingIntervals(TimeRangeCondition timeCondition, Predicate extraPredicate) { // TODO Benchmark using/returning streams instead of iterables - if (isOnDisk()) { return doGetMatchingIntervals(timeCondition, extraPredicate); } @@ -721,7 +721,7 @@ public class HTNode implements IHTNode { } } - private Iterable doGetMatchingIntervals(TimeRangeCondition timeCondition, + private Collection doGetMatchingIntervals(TimeRangeCondition timeCondition, Predicate extraPredicate) { List list = new ArrayList<>(); for (int i = getStartIndexFor(timeCondition, extraPredicate); i < fIntervals.size(); i++) { -- 2.34.1