Loading services/core/java/com/android/server/wm/WindowState.java +4 −0 Original line number Diff line number Diff line Loading @@ -3584,6 +3584,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // Clear animating flags now, since the surface is now gone. (Note this is true even // if the surface is saved, to outside world the surface is still NO_SURFACE.) mAnimatingExit = false; if (useBLASTSync()) { immediatelyNotifyBlastSync(); } } void onSurfaceShownChanged(boolean shown) { Loading services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +21 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; Loading Loading @@ -491,6 +492,26 @@ public class WindowStateTests extends WindowTestsBase { assertThat(app.getDisplayId(), is(mDisplayContent.getDisplayId())); } @Test public void testApplyWithNextDraw() { final WindowState win = createWindow(null, TYPE_APPLICATION_OVERLAY, "app"); final SurfaceControl.Transaction[] handledT = { null }; // The normal case that the draw transaction is applied with finishing drawing. win.applyWithNextDraw(t -> handledT[0] = t); assertTrue(win.useBLASTSync()); final SurfaceControl.Transaction drawT = new StubTransaction(); win.prepareDrawHandlers(); assertTrue(win.finishDrawing(drawT)); assertEquals(drawT, handledT[0]); assertFalse(win.useBLASTSync()); // If the window is gone before reporting drawn, the sync state should be cleared. win.applyWithNextDraw(t -> handledT[0] = t); win.destroySurfaceUnchecked(); assertFalse(win.useBLASTSync()); assertNotEquals(drawT, handledT[0]); } @Test public void testSeamlesslyRotateWindow() { final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); Loading Loading
services/core/java/com/android/server/wm/WindowState.java +4 −0 Original line number Diff line number Diff line Loading @@ -3584,6 +3584,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // Clear animating flags now, since the surface is now gone. (Note this is true even // if the surface is saved, to outside world the surface is still NO_SURFACE.) mAnimatingExit = false; if (useBLASTSync()) { immediatelyNotifyBlastSync(); } } void onSurfaceShownChanged(boolean shown) { Loading
services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +21 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; Loading Loading @@ -491,6 +492,26 @@ public class WindowStateTests extends WindowTestsBase { assertThat(app.getDisplayId(), is(mDisplayContent.getDisplayId())); } @Test public void testApplyWithNextDraw() { final WindowState win = createWindow(null, TYPE_APPLICATION_OVERLAY, "app"); final SurfaceControl.Transaction[] handledT = { null }; // The normal case that the draw transaction is applied with finishing drawing. win.applyWithNextDraw(t -> handledT[0] = t); assertTrue(win.useBLASTSync()); final SurfaceControl.Transaction drawT = new StubTransaction(); win.prepareDrawHandlers(); assertTrue(win.finishDrawing(drawT)); assertEquals(drawT, handledT[0]); assertFalse(win.useBLASTSync()); // If the window is gone before reporting drawn, the sync state should be cleared. win.applyWithNextDraw(t -> handledT[0] = t); win.destroySurfaceUnchecked(); assertFalse(win.useBLASTSync()); assertNotEquals(drawT, handledT[0]); } @Test public void testSeamlesslyRotateWindow() { final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); Loading