IDEA-171160 [macos] progress indicator in AppIcon consumes CPU

This commit is contained in:
Anton Tarasov
2017-04-07 18:44:41 +03:00
parent 982bae514c
commit a728f7e878
@@ -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<Object, AppImage> 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);