diff options
author | Maxime Porhel | 2020-10-22 20:18:57 +0000 |
---|---|---|
committer | Maxime Porhel | 2020-10-23 13:59:43 +0000 |
commit | e17a3820d7ebc8dadf604e1d183fb8c077ad90f1 (patch) | |
tree | 35793c5d32b7687671b6703a03c977db52a9a299 /plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram | |
parent | 5f2e7764eb8f6dd5ebe5670c4be39c40ae541e8f (diff) | |
download | org.eclipse.sirius-e17a3820d7ebc8dadf604e1d183fb8c077ad90f1.tar.gz org.eclipse.sirius-e17a3820d7ebc8dadf604e1d183fb8c077ad90f1.tar.xz org.eclipse.sirius-e17a3820d7ebc8dadf604e1d183fb8c077ad90f1.zip |
[567517] Add a cache for SequenceDiagram.getAllDelimitedEvents()
- Several other SequenceDiagram.getAllXXX methods already use a cache if
the SequenceDiagram cache is enabled some of them use this
getAllDelimitedEvents but it is also used in several other places with a
lot of calls during some user actions like drag, move, resize and also
during layout.
Bug: 567517
Change-Id: Ie57919ae0a906c9c35904f523560c3385b5f7287
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
Diffstat (limited to 'plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram')
-rw-r--r-- | plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java index 252487a045..5bc53301cd 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/SequenceDiagram.java @@ -140,6 +140,8 @@ public class SequenceDiagram extends AbstractSequenceElement { private LinkedHashSet<State> allOrderedStatesCache; + private List<ISequenceEvent> allDelimitedEventsCache; + /** * Constructor. * @@ -703,15 +705,32 @@ public class SequenceDiagram extends AbstractSequenceElement { * @return all sequence events on the given diagram. */ public Iterable<? extends ISequenceEvent> getAllDelimitedSequenceEvents() { - Function<View, ? extends ISequenceEvent> getISE = new Function<View, ISequenceEvent>() { - @Override - public ISequenceEvent apply(View from) { - Option<ISequenceEvent> ise = ISequenceElementAccessor.getISequenceEvent(from); - assert ise.some() : Messages.SequenceDiagram_InternalError; - return ise.get(); + Iterable<? extends ISequenceEvent> allDelimitedEvents = null; + if (useCache) { + // Initialize from cache + allDelimitedEvents = allDelimitedEventsCache; + } + + if (allDelimitedEvents == null) { + Function<View, ? extends ISequenceEvent> getISE = new Function<View, ISequenceEvent>() { + @Override + public ISequenceEvent apply(View from) { + Option<ISequenceEvent> ise = ISequenceElementAccessor.getISequenceEvent(from); + assert ise.some() : Messages.SequenceDiagram_InternalError; + return ise.get(); + } + }; + allDelimitedEvents = Iterables.transform(Iterables.filter(Iterables.filter(AllContents.of(getNotationDiagram()), View.class), ISequenceEvent.ISEQUENCEEVENT_NOTATION_PREDICATE), getISE); + if (useCache) { + // Store the result + List<ISequenceEvent> result = new ArrayList<>(); + Iterables.addAll(result, allDelimitedEvents); + + allDelimitedEventsCache = result; + allDelimitedEvents = allDelimitedEventsCache; } - }; - return Iterables.transform(Iterables.filter(Iterables.filter(AllContents.of(getNotationDiagram()), View.class), ISequenceEvent.ISEQUENCEEVENT_NOTATION_PREDICATE), getISE); + } + return allDelimitedEvents; } /** @@ -772,6 +791,7 @@ public class SequenceDiagram extends AbstractSequenceElement { this.allObservationPointsCache = null; this.allOperandsCache = null; this.allStatesCache = null; + this.allDelimitedEventsCache = null; clearOrderedCaches(); } |