mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-171160 [macos] progress indicator in AppIcon consumes CPU
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user