From a38bfd3e8cbbdfb4c2486225809ee6e995734f2a Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 15 May 2014 15:47:40 +0200 Subject: [PATCH] calculate editor notifications in a single background thread --- .../com/intellij/ui/EditorNotificationsImpl.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java b/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java index 3af507954631..24660c6674ab 100644 --- a/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/EditorNotificationsImpl.java @@ -30,6 +30,7 @@ import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ConcurrencyUtil; import com.intellij.util.containers.ConcurrentWeakHashMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBusConnection; @@ -42,6 +43,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadPoolExecutor; /** * @author peter @@ -49,6 +51,7 @@ import java.util.Map; public class EditorNotificationsImpl extends EditorNotifications { private static final ExtensionPointName EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.editorNotificationProvider"); private final Map myCurrentUpdates = new ConcurrentWeakHashMap(); + private final ThreadPoolExecutor myExecutor = ConcurrencyUtil.newSingleThreadExecutor("EditorNotifications executor"); private final MergingUpdateQueue myUpdateMerger; public EditorNotificationsImpl(Project project) { @@ -86,11 +89,18 @@ public class EditorNotificationsImpl extends EditorNotifications { indicator = new ProgressIndicatorBase(); myCurrentUpdates.put(file, indicator); - ReadTask task = createTask(indicator, file); + final ReadTask task = createTask(indicator, file); if (ApplicationManager.getApplication().isUnitTestMode()) { task.computeInReadAction(indicator); - } else { - ProgressIndicatorUtils.scheduleWithWriteActionPriority(indicator, task); + } + else { + final ProgressIndicator indicator1 = indicator; + myExecutor.execute(new Runnable() { + @Override + public void run() { + ProgressIndicatorUtils.runWithWriteActionPriority(indicator1, task); + } + }); } } });