Finish sync for relayout a drawn window
An activity may change visibility in a short time as visible
-> invisible -> visible without reset drawn state. E.g. scene
transition convert to translucent. Then if its window relayout
to clear mRedrawForSyncReported, the window will stuck by
SYNC_STATE_WAITING_FOR_DRAW until it becomes invisible or timeout.
This also relates to non-sync blast so maybeSyncSeqId is -1 then
the window won't report drawn.
Bug: 260093427
Test: Enable shell transition.
Launch Messages and click its search bar.
There should be fade out/in animation for activity switch.
Change-Id: I49746b56e7dda76c530366663000b0d11ae779f3
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 9db5170..63344a0 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2587,6 +2587,12 @@
&& win.mSyncSeqId > lastSyncSeqId) {
maybeSyncSeqId = win.shouldSyncWithBuffers() ? win.mSyncSeqId : -1;
win.markRedrawForSyncReported();
+ if (win.mSyncState == WindowContainer.SYNC_STATE_WAITING_FOR_DRAW
+ && winAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN
+ && maybeSyncSeqId < 0) {
+ // Do not wait for a drawn window which won't report draw.
+ win.onSyncFinishedDrawing();
+ }
} else {
maybeSyncSeqId = -1;
}