Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraradermache2013-06-07 12:26:08 +0000
committeraradermache2013-06-07 12:26:08 +0000
commitf00f311c4e2995187092bcf8bce5bf552dc5ab74 (patch)
treefc241861bccb02c84b01b479fd8393d2e3f97d51
parent9a664b0bf7fa243562236f6732ed0d9a88de335d (diff)
downloadorg.eclipse.papyrus-f00f311c4e2995187092bcf8bce5bf552dc5ab74.tar.gz
org.eclipse.papyrus-f00f311c4e2995187092bcf8bce5bf552dc5ab74.tar.xz
org.eclipse.papyrus-f00f311c4e2995187092bcf8bce5bf552dc5ab74.zip
Bug 409381 - [Validation] Performance issues in the validation update
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java31
1 files changed, 30 insertions, 1 deletions
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java
index d6b03eecdc0..9098bab1502 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java
@@ -34,6 +34,7 @@ import org.eclipse.papyrus.infra.services.decoration.util.IPapyrusDecoration;
import org.eclipse.papyrus.views.modelexplorer.core.ui.pagebookview.ModelExplorerDecorationAdapter;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.internal.navigator.NavigatorDecoratingLabelProvider;
/**
@@ -66,8 +67,31 @@ public class DecoratingLabelProviderWTooltips extends NavigatorDecoratingLabelPr
public void update(Observable o, Object arg) {
if((decorationService != null) && (o == decorationService)) {
- fireLabelProviderChanged(new LabelProviderChangedEvent(this));
+
+ // fix for bug 409381 - [Validation] Performance issues. Make updates asynchronously so that
+ // most updates are ignored.
+ // TODO: check whether the decoration service should offer a service for listeners that want to
+ // be notified in this lazy way.
+ if (!asyncUpdateRunning) {
+ asyncUpdateRunning = true;
+
+ Display.getDefault().asyncExec(new Runnable () {
+ public void run() {
+ fireLabelProviderChanged(new LabelProviderChangedEvent(DecoratingLabelProviderWTooltips.this));
+ while (updatePending) {
+ updatePending = false;
+ fireLabelProviderChanged(new LabelProviderChangedEvent(DecoratingLabelProviderWTooltips.this));
+ }
+ asyncUpdateRunning = false;
+
+ }
+ });
+ }
+ else {
+ updatePending = true;
+ }
}
+
}
@Override
@@ -120,4 +144,9 @@ public class DecoratingLabelProviderWTooltips extends NavigatorDecoratingLabelPr
public int getToolTipTimeDisplayed(Object object) {
return 10000;
}
+
+ protected boolean asyncUpdateRunning;
+
+ protected boolean updatePending;
+
}

Back to the top