diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 6df3bf474197..c8353f2ae65f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -617,8 +617,8 @@ public class WindowManagerService extends IWindowManager.Stub static final long WALLPAPER_TIMEOUT_RECOVERY = 10000; boolean mAnimateWallpaperWithTarget; - // We give a wallpaper up to 1000ms to finish drawing before playing app transitions. - static final long WALLPAPER_DRAW_PENDING_TIMEOUT_DURATION = 1000; + // We give a wallpaper up to 500ms to finish drawing before playing app transitions. + static final long WALLPAPER_DRAW_PENDING_TIMEOUT_DURATION = 500; static final int WALLPAPER_DRAW_NORMAL = 0; static final int WALLPAPER_DRAW_PENDING = 1; static final int WALLPAPER_DRAW_TIMEOUT = 2; @@ -9064,41 +9064,40 @@ public class WindowManagerService extends IWindowManager.Stub goodToGo = false; } } -// Stuck in a state with mWallpaperDrawState == WALLPAPER_DRAW_PENDING without a timeout. Leave -// commented out until that is understood. -// if (goodToGo && isWallpaperVisible(mWallpaperTarget)) { -// boolean wallpaperGoodToGo = true; -// for (int curTokenIndex = mWallpaperTokens.size() - 1; -// curTokenIndex >= 0 && wallpaperGoodToGo; curTokenIndex--) { -// WindowToken token = mWallpaperTokens.get(curTokenIndex); -// for (int curWallpaperIndex = token.windows.size() - 1; curWallpaperIndex >= 0; -// curWallpaperIndex--) { -// WindowState wallpaper = token.windows.get(curWallpaperIndex); -// if (wallpaper.mWallpaperVisible && !wallpaper.isDrawnLw()) { -// // We've told this wallpaper to be visible, but it is not drawn yet -// wallpaperGoodToGo = false; -// if (mWallpaperDrawState != WALLPAPER_DRAW_TIMEOUT) { -// // wait for this wallpaper until it is drawn or timeout -// goodToGo = false; -// } -// if (mWallpaperDrawState == WALLPAPER_DRAW_NORMAL) { -// mWallpaperDrawState = WALLPAPER_DRAW_PENDING; -// mH.removeMessages(H.WALLPAPER_DRAW_PENDING_TIMEOUT); -// mH.sendEmptyMessageDelayed(H.WALLPAPER_DRAW_PENDING_TIMEOUT, -// WALLPAPER_DRAW_PENDING_TIMEOUT_DURATION); -// } -// if (DEBUG_APP_TRANSITIONS || DEBUG_WALLPAPER) Slog.v(TAG, -// "Wallpaper should be visible but has not been drawn yet. " + -// "mWallpaperDrawState=" + mWallpaperDrawState); -// break; -// } -// } -// } -// if (wallpaperGoodToGo) { -// mWallpaperDrawState = WALLPAPER_DRAW_NORMAL; -// mH.removeMessages(H.WALLPAPER_DRAW_PENDING_TIMEOUT); -// } -// } + + if (goodToGo && isWallpaperVisible(mWallpaperTarget)) { + boolean wallpaperGoodToGo = true; + for (int curTokenIndex = mWallpaperTokens.size() - 1; + curTokenIndex >= 0 && wallpaperGoodToGo; curTokenIndex--) { + WindowToken token = mWallpaperTokens.get(curTokenIndex); + for (int curWallpaperIndex = token.windows.size() - 1; curWallpaperIndex >= 0; + curWallpaperIndex--) { + WindowState wallpaper = token.windows.get(curWallpaperIndex); + if (wallpaper.mWallpaperVisible && !wallpaper.isDrawnLw()) { + // We've told this wallpaper to be visible, but it is not drawn yet + wallpaperGoodToGo = false; + if (mWallpaperDrawState != WALLPAPER_DRAW_TIMEOUT) { + // wait for this wallpaper until it is drawn or timeout + goodToGo = false; + } + if (mWallpaperDrawState == WALLPAPER_DRAW_NORMAL) { + mWallpaperDrawState = WALLPAPER_DRAW_PENDING; + mH.removeMessages(H.WALLPAPER_DRAW_PENDING_TIMEOUT); + mH.sendEmptyMessageDelayed(H.WALLPAPER_DRAW_PENDING_TIMEOUT, + WALLPAPER_DRAW_PENDING_TIMEOUT_DURATION); + } + if (DEBUG_APP_TRANSITIONS || DEBUG_WALLPAPER) Slog.v(TAG, + "Wallpaper should be visible but has not been drawn yet. " + + "mWallpaperDrawState=" + mWallpaperDrawState); + break; + } + } + } + if (wallpaperGoodToGo) { + mWallpaperDrawState = WALLPAPER_DRAW_NORMAL; + mH.removeMessages(H.WALLPAPER_DRAW_PENDING_TIMEOUT); + } + } } if (goodToGo) { if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO"); |