From: Alexandre Montplaisir Date: Mon, 28 Sep 2015 21:27:31 +0000 (-0400) Subject: ss: Speed up TreeMapStore#add() X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=8b246d4512e582d893f20970ad25881c0e459f15;p=deliverable%2Ftracecompass.git ss: Speed up TreeMapStore#add() The add() does not need to call contains(), a O(n) operation, to check if the element was already present. It can simply re-use the return value of TreeMultimap.put(). Change-Id: Iab1971f6310163099906df0a1702d106e3640316 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/56904 Reviewed-by: Matthew Khouzam Tested-by: Matthew Khouzam Reviewed-by: Hudson CI --- diff --git a/statesystem/org.eclipse.tracecompass.segmentstore.core.tests/src/org/eclipse/tracecompass/segmentstore/core/tests/treemap/TreeMapStoreTest.java b/statesystem/org.eclipse.tracecompass.segmentstore.core.tests/src/org/eclipse/tracecompass/segmentstore/core/tests/treemap/TreeMapStoreTest.java index ecd7629fef..41beea22eb 100644 --- a/statesystem/org.eclipse.tracecompass.segmentstore.core.tests/src/org/eclipse/tracecompass/segmentstore/core/tests/treemap/TreeMapStoreTest.java +++ b/statesystem/org.eclipse.tracecompass.segmentstore.core.tests/src/org/eclipse/tracecompass/segmentstore/core/tests/treemap/TreeMapStoreTest.java @@ -129,7 +129,8 @@ public class TreeMapStoreTest { @Test public void testNoDuplicateElements() { for (ISegment segment : SEGMENTS) { - fSegmentStore.add(new BasicSegment(segment.getStart(), segment.getEnd())); + boolean ret = fSegmentStore.add(new BasicSegment(segment.getStart(), segment.getEnd())); + assertFalse(ret); } assertEquals(SEGMENTS.size(), fSegmentStore.size()); } diff --git a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/treemap/TreeMapStore.java b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/treemap/TreeMapStore.java index 1632d91c04..fa5b2b8616 100644 --- a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/treemap/TreeMapStore.java +++ b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/treemap/TreeMapStore.java @@ -117,20 +117,16 @@ public class TreeMapStore implements ISegmentStore { fLock.writeLock().lock(); try { - /* We can take a read lock while holding the write lock. */ - if (contains(val)) { - return false; - } - if (fStartTimesIndex.put(Long.valueOf(val.getStart()), val)) { fEndTimesIndex.put(Long.valueOf(val.getEnd()), val); fSize++; fLastSnapshot = null; + return true; } + return false; } finally { fLock.writeLock().unlock(); } - return true; } @Override