diff options
author | Craig Mautner <cmautner@google.com> | 2014-07-16 16:07:26 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2014-07-16 17:03:36 -0700 |
commit | 0a589b929e18d05d1345d97283c3025058ddca18 (patch) | |
tree | 1d17bd275b3ca6acc72604878746e726c8edaf8e /services | |
parent | 575537759222e0277c3979e33342407aa7ca1a78 (diff) | |
download | frameworks_base-0a589b929e18d05d1345d97283c3025058ddca18.zip frameworks_base-0a589b929e18d05d1345d97283c3025058ddca18.tar.gz frameworks_base-0a589b929e18d05d1345d97283c3025058ddca18.tar.bz2 |
Wait for all windows to draw before turning screen on
Was previously only waiting for windows on the primary display to
draw which meant that windows on ActivityViews had not yet drawn.
This fix checks redraws all outstanding Surfaces before unblanking
the screen.
Fixes bug 15092354.
Change-Id: Id550db003a5f56931eb68464085596e47d25481d
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 5626c7a..e3e79f0 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -10930,14 +10930,19 @@ public class WindowManagerService extends IWindowManager.Stub public void waitForAllWindowsDrawn(IRemoteCallback callback, long timeout) { synchronized (mWindowMap) { mWaitingForDrawnCallback = callback; - final WindowList windows = getDefaultWindowListLocked(); - for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) { - final WindowState win = windows.get(winNdx); - if (win.mHasSurface) { - win.mWinAnimator.mDrawState = WindowStateAnimator.DRAW_PENDING; - // Force add to mResizingWindows. - win.mLastContentInsets.set(-1, -1, -1, -1); - mWaitingForDrawn.add(win); + for (int displayNdx = mDisplayContents.size() - 1; displayNdx >= 0; --displayNdx) { + final WindowList windows = + mDisplayContents.valueAt(displayNdx).getWindowList(); + for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) { + final WindowState win = windows.get(winNdx); + if (win.mHasSurface) { + win.mWinAnimator.mDrawState = WindowStateAnimator.DRAW_PENDING; + // Force add to mResizingWindows. + win.mLastContentInsets.set(-1, -1, -1, -1); + if (DEBUG_SCREEN_ON) Slog.d(TAG, "waitForAllWindowsDrawn: adding " + + win); + mWaitingForDrawn.add(win); + } } } requestTraversalLocked(); |