X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2FdiagramEditor%2FDisposingPolicy.java;h=db7e2571dde5b8e8bd0cc28e5b55e2be11a8d04a;hb=8ded56d0a440f78cbf649b1e59b8a464e8650fdc;hp=9e9b7418bce5cbf069e6d512fa2c9c0a1402e481;hpb=27d76db8786149c91b2e5a97d79c774e8c163eb0;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DisposingPolicy.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DisposingPolicy.java index 9e9b7418b..db7e2571d 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DisposingPolicy.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DisposingPolicy.java @@ -15,10 +15,9 @@ public class DisposingPolicy { public static final long DISPOSE_TIME = 30000L; // ms public static final long MIN_DELAY = 200L; // ms - private final int maxQueueLength; - private ArrayDeque disposerQueue = new ArrayDeque(MAX_QUEUE_LENGTH); - private TObjectLongHashMap disposeTime = - new TObjectLongHashMap(MAX_QUEUE_LENGTH); + private volatile int maxQueueLength; + private ArrayDeque disposerQueue; + private TObjectLongHashMap disposeTime; private Runnable currentlyScheduled = null; private Runnable disposeOne = () -> { @@ -28,18 +27,24 @@ public class DisposingPolicy { currentlyScheduled = null; runnable.run(); if(DEBUG) - System.out.println("Executed disposer " + runnable); + System.out.println("Executed disposer " + runnable); //$NON-NLS-1$ if(!disposerQueue.isEmpty()) scheduleDispose(); } }; public DisposingPolicy() { - this(MAX_QUEUE_LENGTH); + this(MAX_QUEUE_LENGTH); } public DisposingPolicy(int maxQueueLength) { this.maxQueueLength = maxQueueLength; + this.disposerQueue = new ArrayDeque<>(maxQueueLength); + this.disposeTime = new TObjectLongHashMap<>(maxQueueLength); + } + + public void setMaxQueueLength(int maxQueueLength) { + this.maxQueueLength = maxQueueLength; } private void scheduleDispose() { @@ -49,7 +54,7 @@ public class DisposingPolicy { MIN_DELAY); Display.getCurrent().timerExec((int)delay, disposeOne); if(DEBUG) - System.out.println("Scheduled disposer " + currentlyScheduled + " in " + delay + " ms"); + System.out.println("Scheduled disposer " + currentlyScheduled + " in " + delay + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } /** @@ -60,7 +65,7 @@ public class DisposingPolicy { */ public void addDisposer(Runnable disposer) { if(DEBUG) - System.out.println("Added disposer " + disposer); + System.out.println("Added disposer " + disposer); //$NON-NLS-1$ if(disposeTime.contains(disposer)) return; if(disposerQueue.size() >= maxQueueLength) @@ -77,7 +82,7 @@ public class DisposingPolicy { */ public void removeDisposer(Runnable disposer) { if(DEBUG) - System.out.println("Removed disposer " + disposer); + System.out.println("Removed disposer " + disposer); //$NON-NLS-1$ disposerQueue.remove(disposer); disposeTime.remove(disposer); if(disposer == currentlyScheduled) {