diff options
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 6d3d5d6daa60..68d6de4e1b01 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -11982,6 +11982,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void waitForAllWindowsDrawn(Runnable callback, long timeout) { + boolean allWindowsDrawn = false; synchronized (mWindowMap) { mWaitingForDrawnCallback = callback; final WindowList windows = getDefaultWindowListLocked(); @@ -12002,13 +12003,16 @@ public class WindowManagerService extends IWindowManager.Stub } } requestTraversalLocked(); + mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT); + if (mWaitingForDrawn.isEmpty()) { + allWindowsDrawn = true; + } else { + mH.sendEmptyMessageDelayed(H.WAITING_FOR_DRAWN_TIMEOUT, timeout); + checkDrawnWindowsLocked(); + } } - mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT); - if (mWaitingForDrawn.isEmpty()) { + if (allWindowsDrawn) { callback.run(); - } else { - mH.sendEmptyMessageDelayed(H.WAITING_FOR_DRAWN_TIMEOUT, timeout); - checkDrawnWindowsLocked(); } } |