diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index ac00520ef02d8..9c81377bac16e 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2500,9 +2500,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 cd4a0de0f4212..6ba21d5c7d239 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -363,6 +363,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 @@ -5659,6 +5660,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; } @@ -5840,6 +5842,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,