diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 0d4c2d631b2ce..d4ebc89b0d876 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5702,8 +5702,7 @@ class WindowState extends WindowContainer implements WindowManagerP // window becomes visible while the sync group is still active. return true; } - if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mWinAnimator.mDrawState == HAS_DRAWN - && !mRedrawForSyncReported && !mWmService.mResizingWindows.contains(this)) { + if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mLastConfigReportedToClient && isDrawn()) { // Complete the sync state immediately for a drawn window that doesn't need to redraw. onSyncFinishedDrawing(); } diff --git a/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java b/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java index fc5e9cab5447d..810cbe8f80801 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java @@ -40,9 +40,7 @@ import static org.mockito.ArgumentMatchers.notNull; import static org.mockito.Mockito.spy; import android.platform.test.annotations.Presubmit; -import android.util.MergedConfiguration; import android.view.SurfaceControl; -import android.window.ClientWindowFrames; import androidx.test.filters.SmallTest; @@ -333,8 +331,7 @@ public class SyncEngineTests extends WindowTestsBase { w.reparent(botChildWC, POSITION_TOP); parentWC.prepareSync(); // Assume the window has drawn with the latest configuration. - w.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), - new MergedConfiguration(), true /* useLatestConfig */, true /* relayoutVisible */); + makeLastConfigReportedToClient(w, true /* visible */); assertTrue(w.onSyncFinishedDrawing()); assertEquals(SYNC_STATE_READY, w.mSyncState); w.reparent(topChildWC, POSITION_TOP); diff --git a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java index 4afcd0539b94a..e3d1b9c669f9c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java @@ -52,7 +52,6 @@ import android.graphics.Rect; import android.os.IBinder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; -import android.util.MergedConfiguration; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.DisplayShape; @@ -63,7 +62,6 @@ import android.view.RoundedCorners; import android.view.Surface; import android.view.SurfaceControl; import android.view.WindowManager; -import android.window.ClientWindowFrames; import androidx.test.filters.SmallTest; @@ -380,8 +378,7 @@ public class WallpaperControllerTests extends WindowTestsBase { wallpaperWindow.mLayoutSeq = mDisplayContent.mLayoutSeq; // Assume the token was invisible and the latest config was reported. wallpaperToken.commitVisibility(false); - wallpaperWindow.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), - new MergedConfiguration(), true /* useLatestConfig */, false /* relayoutVisible */); + makeLastConfigReportedToClient(wallpaperWindow, false /* visible */); assertTrue(wallpaperWindow.isLastConfigReportedToClient()); final Rect bounds = wallpaperToken.getBounds(); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index 600681fb332c7..7168670f96522 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -1247,6 +1247,7 @@ public class WindowOrganizerTests extends WindowTestsBase { // A drawn window can complete the sync state automatically. w1.mWinAnimator.mDrawState = WindowStateAnimator.HAS_DRAWN; + makeLastConfigReportedToClient(w1, true /* visible */); mWm.mSyncEngine.onSurfacePlacement(); verify(mockCallback).onTransactionReady(anyInt(), any()); assertFalse(w1.useBLASTSync()); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index d5547ec692476..873c7f4e0e300 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -85,6 +85,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.service.voice.IVoiceInteractionSession; +import android.util.MergedConfiguration; import android.util.SparseArray; import android.view.Display; import android.view.DisplayInfo; @@ -102,6 +103,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.DisplayImePolicy; import android.view.inputmethod.ImeTracker; +import android.window.ClientWindowFrames; import android.window.ITransitionPlayer; import android.window.ScreenCapture; import android.window.StartingWindowInfo; @@ -624,6 +626,11 @@ class WindowTestsBase extends SystemServiceTestsBase { } } + static void makeLastConfigReportedToClient(WindowState w, boolean visible) { + w.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), + new MergedConfiguration(), true /* useLatestConfig */, visible); + } + /** * Gets the order of the given {@link Task} as its z-order in the hierarchy below this TDA. * The Task can be a direct child of a child TaskDisplayArea. {@code -1} if not found.