From 6201c2ac418424424573343d61b2b5bda3de77e2 Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Fri, 9 Aug 2013 18:48:48 -0700 Subject: [PATCH] Put animation background behind visible wallpaper The new wallpaper positioning associated with multiple activity stacks put animation backgrounds in front of the wallpaper. This caused hideous jank. Testing for visible wallpaper and moving the background behind it fixes the jank. Fixes bug 10078282. Possibly fixes bug 10247094. Change-Id: I3f4e07accd7276d59725192081904b791f77781f --- .../server/am/ActivityManagerService.java | 2 +- .../server/wm/WindowManagerService.java | 21 +++++++------------ 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 3d8843e7f502b..21493f120ab12 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -210,7 +210,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final boolean DEBUG_BACKGROUND_BROADCAST = DEBUG_BROADCAST || false; static final boolean DEBUG_CLEANUP = localLOGV || false; static final boolean DEBUG_CONFIGURATION = localLOGV || false; - static final boolean DEBUG_FOCUS = true; + static final boolean DEBUG_FOCUS = false; static final boolean DEBUG_IMMERSIVE = localLOGV || false; static final boolean DEBUG_MU = localLOGV || false; static final boolean DEBUG_OOM_ADJ = localLOGV || false; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 364b854c2cd70..07e1e12cf39f4 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -194,9 +194,6 @@ public class WindowManagerService extends IWindowManager.Stub static final boolean PROFILE_ORIENTATION = false; static final boolean localLOGV = DEBUG; - final static boolean REVERSE_ITERATOR = true; - final static boolean FORWARD_ITERATOR = false; - /** How much to multiply the policy's type layer, to reserve room * for multiple windows of the same type and Z-ordering adjustment * with TYPE_LAYER_OFFSET. */ @@ -9574,19 +9571,15 @@ public class WindowManagerService extends IWindowManager.Stub return doRequest; } - /** If a window that has an animation specifying a colored background is the current wallpaper - * target, then the color goes *below* the wallpaper so we don't cause the wallpaper to + /** If a window that has an animation specifying a colored background and the current wallpaper + * is visible, then the color goes *below* the wallpaper so we don't cause the wallpaper to * suddenly disappear. */ int adjustAnimationBackground(WindowStateAnimator winAnimator) { - final WindowState win = winAnimator.mWin; - if (mWallpaperTarget == win || mLowerWallpaperTarget == win - || mUpperWallpaperTarget == win) { - WindowList windows = win.getWindowList(); - for (int i = windows.size() - 1; i >= 0; --i) { - WindowState testWin = windows.get(i); - if (testWin.mIsWallpaper) { - return testWin.mWinAnimator.mAnimLayer; - } + WindowList windows = winAnimator.mWin.getWindowList(); + for (int i = windows.size() - 1; i >= 0; --i) { + WindowState testWin = windows.get(i); + if (testWin.mIsWallpaper && testWin.isVisibleNow()) { + return testWin.mWinAnimator.mAnimLayer; } } return winAnimator.mAnimLayer;