From a728f7e878f083ea0254b2b2bed80668a6d8557e Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Fri, 7 Apr 2017 18:38:29 +0300 Subject: [PATCH] IDEA-171160 [macos] progress indicator in AppIcon consumes CPU --- platform/platform-impl/src/com/intellij/ui/AppIcon.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ui/AppIcon.java b/platform/platform-impl/src/com/intellij/ui/AppIcon.java index 8f2c55088eb9..d80edacb8662 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppIcon.java +++ b/platform/platform-impl/src/com/intellij/ui/AppIcon.java @@ -27,6 +27,7 @@ import com.intellij.openapi.wm.AppIconScheme; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; import com.intellij.util.IconUtil; +import com.intellij.util.containers.HashMap; import com.intellij.util.ui.ImageUtil; import com.intellij.util.ui.UIUtil; import org.apache.sanselan.ImageWriteException; @@ -46,6 +47,7 @@ import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Map; public abstract class AppIcon { private static final Logger LOG = Logger.getInstance(AppIcon.class); @@ -165,6 +167,7 @@ public abstract class AppIcon { @SuppressWarnings("UseJBColor") private static class MacAppIcon extends BaseIcon { private BufferedImage myAppImage; + private Map myProgressImagesCache = new HashMap<>(); private BufferedImage getAppImage() { assertIsDispatchThread(); @@ -240,6 +243,7 @@ public abstract class AppIcon { if (myCurrentProcessId != null && !myCurrentProcessId.equals(processId)) return false; setDockIcon(getAppImage()); + myProgressImagesCache.remove(myCurrentProcessId); myCurrentProcessId = null; myLastValue = 0; @@ -308,7 +312,8 @@ public abstract class AppIcon { progressArea.intersect(borderArea); - AppImage appImg = createAppImage(); + AppImage appImg = myProgressImagesCache.get(myCurrentProcessId); + if (appImg == null) myProgressImagesCache.put(myCurrentProcessId, appImg = createAppImage()); appImg.myG2d.setColor(PROGRESS_BACKGROUND_COLOR); appImg.myG2d.fill(backgroundArea);