diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c4a518395eeae..92a14b5fb4828 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2515,9 +2515,11 @@ public class WindowManagerService extends IWindowManager.Stub } win.mInRelayout = false; - if (mUseBLASTSync && win.useBLASTSync() && viewVisibility != View.GONE) { + if (mUseBLASTSync && win.useBLASTSync() && viewVisibility != View.GONE + && win.mNextRelayoutUseSync) { win.prepareDrawHandlers(); win.markRedrawForSyncReported(); + win.mNextRelayoutUseSync = false; result |= RELAYOUT_RES_BLAST_SYNC; } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index a5f812f15ad54..f177e138f0a5f 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -367,6 +367,7 @@ class WindowState extends WindowContainer implements WindowManagerP private boolean mDragResizingChangeReported = true; private int mResizeMode; private boolean mRedrawForSyncReported; + boolean mNextRelayoutUseSync; /** * {@code true} when the client was still drawing for sync when the sync-set was finished or @@ -5914,6 +5915,7 @@ class WindowState extends WindowContainer implements WindowManagerP // to draw even if the children draw first or don't need to sync, so we start // in WAITING state rather than READY. mSyncState = SYNC_STATE_WAITING_FOR_DRAW; + mNextRelayoutUseSync = true; requestRedrawForSync(); return true; } @@ -6095,6 +6097,7 @@ class WindowState extends WindowContainer implements WindowManagerP */ void applyWithNextDraw(Consumer consumer) { mPendingDrawHandlers.add(consumer); + mNextRelayoutUseSync = true; requestRedrawForSync(); mWmService.mH.sendNewMessageDelayed(WINDOW_STATE_BLAST_SYNC_TIMEOUT, this,