From a6eeea64e2a0ca71099b1e23ded8216c6d23686f Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 24 Oct 2018 10:36:57 +0200 Subject: [PATCH] added caches for before/after fix determination Change-Id: Iaf30f4e707b6d08a98996a050a42e41fd293aeef --- .../markpassingcalculation/impl/CandidateFinderImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java index 985be9f0143..88491717019 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java @@ -709,7 +709,8 @@ public class CandidateFinderImpl implements CandidateFinder { Util.Pair, List> result = new Util.Pair, List>( new ArrayList(), new ArrayList()); DynamicGPSFixTrack track = race.getTrack(c); - + final Map lastFixBeforeCache = new LimitedLinkedHashMap<>(10); + final Map firstFixAfterCache = new LimitedLinkedHashMap<>(10); for (GPSFixMoving fix : fixes) { if (timeRangeForValidCandidates.getTimeRangeOrNull() != null && timeRangeForValidCandidates.getTimeRangeOrNull().includes(fix.getTimePoint())) { TimePoint t = fix.getTimePoint(); @@ -720,8 +721,8 @@ public class CandidateFinderImpl implements CandidateFinder { try { fixIsValid = track.isValid(fix); if (fixIsValid) { - fixBefore = track.getLastFixBefore(t); - fixAfter = track.getFirstFixAfter(t); + fixBefore = lastFixBeforeCache.computeIfAbsent(t, timePoint->track.getLastFixBefore(timePoint)); + fixAfter = firstFixAfterCache.computeIfAbsent(t, timePoint->track.getFirstFixAfter(timePoint)); } } finally { track.unlockAfterRead();