diff options
author | Nathalie Lepine | 2020-10-19 08:43:59 +0000 |
---|---|---|
committer | Maxime Porhel | 2020-10-23 13:59:32 +0000 |
commit | 3fab1d6c50ce90b9019b8c8cdbbb91c1ccd2881b (patch) | |
tree | 73a666f50966f676d90e5062c2483014201c8ab6 /plugins | |
parent | 80f2c8e41c5bf681c79f993424d3e1812954ab9a (diff) | |
download | org.eclipse.sirius-3fab1d6c50ce90b9019b8c8cdbbb91c1ccd2881b.tar.gz org.eclipse.sirius-3fab1d6c50ce90b9019b8c8cdbbb91c1ccd2881b.tar.xz org.eclipse.sirius-3fab1d6c50ce90b9019b8c8cdbbb91c1ccd2881b.zip |
[567517] Activate caches for layout refresh
Bug: 567517
Change-Id: Ibe10b77227430102c73a0db36ae4fdd756aec2b9
Signed-off-by: Nathalie Lepine <nathalie.lepine@obeo.fr>
Diffstat (limited to 'plugins')
5 files changed, 63 insertions, 12 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/AbstractFrame.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/AbstractFrame.java index 747364e02d..02d04c317b 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/AbstractFrame.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/AbstractFrame.java @@ -91,7 +91,7 @@ public abstract class AbstractFrame extends AbstractSequenceNode implements ISeq * @return the covered lifelines. */ public Collection<Lifeline> computeCoveredLifelines() { - if (CacheHelper.isDragTrackerCacheEnabled()) { + if (CacheHelper.isCacheEnabled()) { Collection<Lifeline> coverage = CacheHelper.getCoverageCache().get(this); if (coverage != null) { return new ArrayList<Lifeline>(coverage); @@ -132,7 +132,7 @@ public abstract class AbstractFrame extends AbstractSequenceNode implements ISeq DslCommonPlugin.PROFILER.stopWork(COVERAGE); - if (CacheHelper.isDragTrackerCacheEnabled()) { + if (CacheHelper.isCacheEnabled()) { CacheHelper.getCoverageCache().put(this, coveredLifelines); } diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/Execution.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/Execution.java index 49c0b91b68..2716ef96e9 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/Execution.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/Execution.java @@ -199,7 +199,7 @@ public class Execution extends AbstractNodeEvent { private Option<Message> getCompoundMessage(boolean start) { Message result = null; Option<Message> resultOption = Options.newNone(); - if (CacheHelper.isDragTrackerCacheEnabled()) { + if (CacheHelper.isCacheEnabled()) { if (start) { result = CacheHelper.getStartCompoundMessageCache().get(this); } else { @@ -236,7 +236,7 @@ public class Execution extends AbstractNodeEvent { } private void putMessageInCache(boolean start, Message message) { - if (CacheHelper.isDragTrackerCacheEnabled()) { + if (CacheHelper.isCacheEnabled()) { if (start) { CacheHelper.getStartCompoundMessageCache().put(this, message); } else { diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/refresh/RefreshLayoutCommand.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/refresh/RefreshLayoutCommand.java index b133829ace..c323f0466a 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/refresh/RefreshLayoutCommand.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/refresh/RefreshLayoutCommand.java @@ -25,6 +25,7 @@ import org.eclipse.sirius.diagram.sequence.business.internal.operation.RefreshGr import org.eclipse.sirius.diagram.sequence.business.internal.operation.RefreshSemanticOrderingsOperation; import org.eclipse.sirius.diagram.sequence.business.internal.operation.SynchronizeGraphicalOrderingOperation; import org.eclipse.sirius.diagram.sequence.business.internal.ordering.RefreshOrderingHelper; +import org.eclipse.sirius.diagram.sequence.business.internal.util.CacheHelper; import org.eclipse.sirius.diagram.sequence.ordering.EventEnd; import org.eclipse.sirius.diagram.ui.business.internal.operation.AbstractModelChangeOperation; import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority; @@ -49,8 +50,8 @@ public class RefreshLayoutCommand extends RecordingCommand { * Default constructor. * * @param diagram - * {@link Diagram} to refresh, used also to access - * {@link SequenceDDiagram} & {@link SequenceDiagram} to refresh + * {@link Diagram} to refresh, used also to access {@link SequenceDDiagram} & {@link SequenceDiagram} to + * refresh * * @param refreshDiagram * <code>true</code> if we should actually update the GMF model @@ -76,10 +77,11 @@ public class RefreshLayoutCommand extends RecordingCommand { IPermissionAuthority permissionAuthority = PermissionAuthorityRegistry.getDefault().getPermissionAuthority(sequenceDDiagram); if (permissionAuthority != null && permissionAuthority.canEditInstance(sequenceDDiagram)) { sequenceDiagram.useCache(true); + CacheHelper.initRefreshLayoutCaches(); try { /* - * Everything has been committed, so we should be in a stable - * state where it is safe to refresh both orderings. + * Everything has been committed, so we should be in a stable state where it is safe to refresh both + * orderings. */ // Compute only once (and not three times) the event ends. @@ -111,8 +113,8 @@ public class RefreshLayoutCommand extends RecordingCommand { AbstractModelChangeOperation<Boolean> synchronizeGraphicalOrderingOperation = new SynchronizeGraphicalOrderingOperation(diagram, false); synchronizeGraphicalOrderingOperation.execute(); /* - * The layout has probably changed graphical positions: - * re-compute the ordering to make sure it is up-to-date. + * The layout has probably changed graphical positions: re-compute the ordering to make sure it is + * up-to-date. */ if (refreshGraphicalOrderingOperation.execute()) { sequenceDiagram.clearOrderedCaches(); @@ -121,6 +123,7 @@ public class RefreshLayoutCommand extends RecordingCommand { } finally { sequenceDiagram.useCache(false); sequenceDiagram.clearAllCaches(); + CacheHelper.clearCaches(); } } DslCommonPlugin.PROFILER.stopWork(REFRESH_LAYOUT); diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java index 40b0d119dc..b4308daaab 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java @@ -33,6 +33,8 @@ public final class CacheHelper { private static boolean dragTrackercacheEnabled; + private static boolean refreshLayoutcacheEnabled; + private static Map<AbstractFrame, Collection<Lifeline>> coverageCache = new ConcurrentHashMap<>(); private static ConcurrentHashMap<ISequenceEvent, Collection<ISequenceEvent>> subEventsCache = new ConcurrentHashMap<>(); @@ -51,6 +53,15 @@ public final class CacheHelper { } /** + * Return if all caches types are enabled. + * + * @return if all caches are enabled. + */ + public static boolean isCacheEnabled() { + return dragTrackercacheEnabled || refreshLayoutcacheEnabled; + } + + /** * Return if drag tracker cache is enabled. * * @return if drag tracker cache is enabled. @@ -60,6 +71,15 @@ public final class CacheHelper { } /** + * Return if refresh layout cache is enabled. + * + * @return if refresh layout cache is enabled. + */ + public static boolean isRefreshLayoutCacheEnabled() { + return refreshLayoutcacheEnabled; + } + + /** * Set if drag tracker cache is enabled. * * @param enabled @@ -70,12 +90,29 @@ public final class CacheHelper { } /** + * Set if refresh layout cache is enabled. + * + * @param enabled + * boolean + */ + public static void setRefreshLayoutCacheEnabled(boolean enabled) { + CacheHelper.refreshLayoutcacheEnabled = enabled; + } + + /** * Clear drag tracker caches. */ public static void clearDragTrackerCaches() { + viewToRangeCache.clear(); + clearRefreshLayoutCaches(); + } + + /** + * Clear refresh layout caches. + */ + public static void clearRefreshLayoutCaches() { coverageCache.clear(); subEventsCache.clear(); - viewToRangeCache.clear(); startCompoundMessageCache.clear(); endCompoundMessageCache.clear(); } @@ -85,6 +122,7 @@ public final class CacheHelper { */ public static void clearCaches() { CacheHelper.setDragTrackerCacheEnabled(false); + CacheHelper.setRefreshLayoutCacheEnabled(false); CacheHelper.clearDragTrackerCaches(); } @@ -94,6 +132,16 @@ public final class CacheHelper { public static void initCaches() { clearCaches(); CacheHelper.setDragTrackerCacheEnabled(true); + CacheHelper.setRefreshLayoutCacheEnabled(false); + } + + /** + * Init and enable refresh layout caches. + */ + public static void initRefreshLayoutCaches() { + clearCaches(); + CacheHelper.setRefreshLayoutCacheEnabled(true); + CacheHelper.setDragTrackerCacheEnabled(false); } /** diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java index f3abb9a4d5..75fcab6540 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java @@ -97,7 +97,7 @@ public final class SubEventsHelper { List<ISequenceEvent> result = getValidSubEvents(); Collections.sort(result, RangeHelper.lowerBoundOrdering().onResultOf(ISequenceEvent.VERTICAL_RANGE)); - if (CacheHelper.isDragTrackerCacheEnabled()) { + if (CacheHelper.isCacheEnabled()) { CacheHelper.getSubEventsCache().put(parentEvent, new ArrayList<>(result)); } return result; |