Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathalie Lepine2020-10-19 08:43:59 +0000
committerMaxime Porhel2020-10-23 13:59:32 +0000
commit3fab1d6c50ce90b9019b8c8cdbbb91c1ccd2881b (patch)
tree73a666f50966f676d90e5062c2483014201c8ab6 /plugins
parent80f2c8e41c5bf681c79f993424d3e1812954ab9a (diff)
downloadorg.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')
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/AbstractFrame.java4
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/elements/Execution.java4
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/refresh/RefreshLayoutCommand.java15
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/CacheHelper.java50
-rw-r--r--plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/util/SubEventsHelper.java2
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;

Back to the top