Loading services/core/java/com/android/server/wm/WindowContainer.java +2 −3 Original line number Diff line number Diff line Loading @@ -3759,7 +3759,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< if (mSyncState == SYNC_STATE_NONE) return false; mSyncState = SYNC_STATE_READY; mSyncMethodOverride = BLASTSyncEngine.METHOD_UNDEFINED; mWmService.mWindowPlacerLocked.requestTraversal(); ProtoLog.v(WM_DEBUG_SYNC_ENGINE, "onSyncFinishedDrawing %s", this); return true; } Loading Loading @@ -3829,8 +3828,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< /** * Checks if the subtree rooted at this container is finished syncing (everything is ready or * not visible). NOTE, this is not const: it will cancel/prepare itself depending on its state * in the hierarchy. * not visible). NOTE, this is not const: it may cancel/prepare/complete itself depending on * its state in the hierarchy. * * @return {@code true} if this subtree is finished waiting for sync participants. */ Loading services/core/java/com/android/server/wm/WindowManagerService.java +0 −6 Original line number Diff line number Diff line Loading @@ -2587,12 +2587,6 @@ public class WindowManagerService extends IWindowManager.Stub && 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; } Loading services/core/java/com/android/server/wm/WindowState.java +10 −5 Original line number Diff line number Diff line Loading @@ -6004,12 +6004,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override boolean isSyncFinished() { if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mViewVisibility != View.VISIBLE && !isVisibleRequested()) { if (!isVisibleRequested()) { // Don't wait for invisible windows. However, we don't alter the state in case the // 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)) { // Complete the sync state immediately for a drawn window that doesn't need to redraw. onSyncFinishedDrawing(); } return super.isSyncFinished(); } Loading Loading @@ -6060,6 +6064,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final boolean hasSyncHandlers = executeDrawHandlers(postDrawTransaction, syncSeqId); boolean skipLayout = false; boolean layoutNeeded = false; // Control the timing to switch the appearance of window with different rotations. final AsyncRotationController asyncRotationController = mDisplayContent.getAsyncRotationController(); Loading @@ -6072,7 +6077,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } else if (syncActive) { // Currently in a Sync that is using BLAST. if (!syncStillPending) { onSyncFinishedDrawing(); layoutNeeded = onSyncFinishedDrawing(); } if (postDrawTransaction != null) { mSyncTransaction.merge(postDrawTransaction); Loading @@ -6081,10 +6086,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } else if (useBLASTSync()) { // Sync that is not using BLAST onSyncFinishedDrawing(); layoutNeeded = onSyncFinishedDrawing(); } final boolean layoutNeeded = layoutNeeded |= mWinAnimator.finishDrawingLocked(postDrawTransaction, mClientWasDrawingForSync); mClientWasDrawingForSync = false; // We always want to force a traversal after a finish draw for blast sync. Loading services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java +2 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static com.android.server.wm.WindowState.BLAST_TIMEOUT_DURATION; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -108,9 +109,7 @@ public class SyncEngineTests extends WindowTestsBase { bse.onSurfacePlacement(); verify(listener, times(0)).onTransactionReady(anyInt(), any()); mockWC.onSyncFinishedDrawing(); // Make sure the second traversal is requested. verify(mWm.mWindowPlacerLocked, times(2)).requestTraversal(); assertTrue(mockWC.onSyncFinishedDrawing()); bse.onSurfacePlacement(); verify(listener, times(1)).onTransactionReady(eq(id), notNull()); } Loading services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +2 −1 Original line number Diff line number Diff line Loading @@ -1240,7 +1240,8 @@ public class WindowOrganizerTests extends WindowTestsBase { assertTrue(w1.useBLASTSync()); assertTrue(w2.useBLASTSync()); w1.immediatelyNotifyBlastSync(); // A drawn window can complete the sync state automatically. w1.mWinAnimator.mDrawState = WindowStateAnimator.HAS_DRAWN; mWm.mSyncEngine.onSurfacePlacement(); verify(mockCallback).onTransactionReady(anyInt(), any()); assertFalse(w1.useBLASTSync()); Loading Loading
services/core/java/com/android/server/wm/WindowContainer.java +2 −3 Original line number Diff line number Diff line Loading @@ -3759,7 +3759,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< if (mSyncState == SYNC_STATE_NONE) return false; mSyncState = SYNC_STATE_READY; mSyncMethodOverride = BLASTSyncEngine.METHOD_UNDEFINED; mWmService.mWindowPlacerLocked.requestTraversal(); ProtoLog.v(WM_DEBUG_SYNC_ENGINE, "onSyncFinishedDrawing %s", this); return true; } Loading Loading @@ -3829,8 +3828,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< /** * Checks if the subtree rooted at this container is finished syncing (everything is ready or * not visible). NOTE, this is not const: it will cancel/prepare itself depending on its state * in the hierarchy. * not visible). NOTE, this is not const: it may cancel/prepare/complete itself depending on * its state in the hierarchy. * * @return {@code true} if this subtree is finished waiting for sync participants. */ Loading
services/core/java/com/android/server/wm/WindowManagerService.java +0 −6 Original line number Diff line number Diff line Loading @@ -2587,12 +2587,6 @@ public class WindowManagerService extends IWindowManager.Stub && 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; } Loading
services/core/java/com/android/server/wm/WindowState.java +10 −5 Original line number Diff line number Diff line Loading @@ -6004,12 +6004,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override boolean isSyncFinished() { if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mViewVisibility != View.VISIBLE && !isVisibleRequested()) { if (!isVisibleRequested()) { // Don't wait for invisible windows. However, we don't alter the state in case the // 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)) { // Complete the sync state immediately for a drawn window that doesn't need to redraw. onSyncFinishedDrawing(); } return super.isSyncFinished(); } Loading Loading @@ -6060,6 +6064,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final boolean hasSyncHandlers = executeDrawHandlers(postDrawTransaction, syncSeqId); boolean skipLayout = false; boolean layoutNeeded = false; // Control the timing to switch the appearance of window with different rotations. final AsyncRotationController asyncRotationController = mDisplayContent.getAsyncRotationController(); Loading @@ -6072,7 +6077,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } else if (syncActive) { // Currently in a Sync that is using BLAST. if (!syncStillPending) { onSyncFinishedDrawing(); layoutNeeded = onSyncFinishedDrawing(); } if (postDrawTransaction != null) { mSyncTransaction.merge(postDrawTransaction); Loading @@ -6081,10 +6086,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } else if (useBLASTSync()) { // Sync that is not using BLAST onSyncFinishedDrawing(); layoutNeeded = onSyncFinishedDrawing(); } final boolean layoutNeeded = layoutNeeded |= mWinAnimator.finishDrawingLocked(postDrawTransaction, mClientWasDrawingForSync); mClientWasDrawingForSync = false; // We always want to force a traversal after a finish draw for blast sync. Loading
services/tests/wmtests/src/com/android/server/wm/SyncEngineTests.java +2 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static com.android.server.wm.WindowState.BLAST_TIMEOUT_DURATION; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -108,9 +109,7 @@ public class SyncEngineTests extends WindowTestsBase { bse.onSurfacePlacement(); verify(listener, times(0)).onTransactionReady(anyInt(), any()); mockWC.onSyncFinishedDrawing(); // Make sure the second traversal is requested. verify(mWm.mWindowPlacerLocked, times(2)).requestTraversal(); assertTrue(mockWC.onSyncFinishedDrawing()); bse.onSurfacePlacement(); verify(listener, times(1)).onTransactionReady(eq(id), notNull()); } Loading
services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +2 −1 Original line number Diff line number Diff line Loading @@ -1240,7 +1240,8 @@ public class WindowOrganizerTests extends WindowTestsBase { assertTrue(w1.useBLASTSync()); assertTrue(w2.useBLASTSync()); w1.immediatelyNotifyBlastSync(); // A drawn window can complete the sync state automatically. w1.mWinAnimator.mDrawState = WindowStateAnimator.HAS_DRAWN; mWm.mSyncEngine.onSurfacePlacement(); verify(mockCallback).onTransactionReady(anyInt(), any()); assertFalse(w1.useBLASTSync()); Loading