Loading services/core/java/com/android/server/wm/WindowState.java +12 −1 Original line number Diff line number Diff line Loading @@ -334,6 +334,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP private boolean mDragResizing; private boolean mDragResizingChangeReported = true; private int mResizeMode; private boolean mResizeForBlastSyncReported; /** * Special mode that is intended only for the rounded corner overlay: during rotation * transition, we un-rotate the window token such that the window appears as it did before the Loading Loading @@ -1370,11 +1372,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // variables, because mFrameSizeChanged only tracks the width and height changing. updateLastFrames(); // Add a window that is using blastSync to the resizing list if it hasn't been reported // already. This because the window is waiting on a finishDrawing from the client. if (didFrameInsetsChange || winAnimator.mSurfaceResized || configChanged || dragResizingChanged || mReportOrientationChanged) { || mReportOrientationChanged || requestResizeForBlastSync()) { ProtoLog.v(WM_DEBUG_RESIZE, "Resize reasons for w=%s: %s surfaceResized=%b configChanged=%b " + "dragResizingChanged=%b reportOrientationChanged=%b", Loading Loading @@ -3483,6 +3488,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mReportOrientationChanged = false; mDragResizingChangeReported = true; mWinAnimator.mSurfaceResized = false; mResizeForBlastSyncReported = true; mWindowFrames.resetInsetsChanged(); final Rect frame = mWindowFrames.mCompatFrame; Loading Loading @@ -5733,6 +5739,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (!willSync) { return false; } mResizeForBlastSyncReported = false; mLocalSyncId = mBLASTSyncEngine.startSyncSet(this); addChildrenToSyncSet(mLocalSyncId); Loading Loading @@ -5777,4 +5784,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWaitingListener = null; return mWinAnimator.finishDrawingLocked(null); } private boolean requestResizeForBlastSync() { return useBLASTSync() && !mResizeForBlastSyncReported; } } services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +23 −0 Original line number Diff line number Diff line Loading @@ -602,6 +602,29 @@ public class WindowStateTests extends WindowTestsBase { assertFalse(win.getOrientationChanging()); } @Test public void testRequestResizeForBlastSync() { final WindowState win = mChildAppWindowAbove; makeWindowVisible(win, win.getParentWindow()); win.mLayoutSeq = win.getDisplayContent().mLayoutSeq; win.reportResized(); win.updateResizingWindowIfNeeded(); assertThat(mWm.mResizingWindows).doesNotContain(win); // Check that the window is in resizing if using blast sync. win.reportResized(); win.prepareForSync(mock(BLASTSyncEngine.TransactionReadyListener.class), 1); win.updateResizingWindowIfNeeded(); assertThat(mWm.mResizingWindows).contains(win); // Don't re-add the window again if it's been reported to the client and still waiting on // the client draw for blast sync. win.reportResized(); mWm.mResizingWindows.remove(win); win.updateResizingWindowIfNeeded(); assertThat(mWm.mResizingWindows).doesNotContain(win); } @Test public void testGetTransformationMatrix() { final int PARENT_WINDOW_OFFSET = 1; Loading Loading
services/core/java/com/android/server/wm/WindowState.java +12 −1 Original line number Diff line number Diff line Loading @@ -334,6 +334,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP private boolean mDragResizing; private boolean mDragResizingChangeReported = true; private int mResizeMode; private boolean mResizeForBlastSyncReported; /** * Special mode that is intended only for the rounded corner overlay: during rotation * transition, we un-rotate the window token such that the window appears as it did before the Loading Loading @@ -1370,11 +1372,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // variables, because mFrameSizeChanged only tracks the width and height changing. updateLastFrames(); // Add a window that is using blastSync to the resizing list if it hasn't been reported // already. This because the window is waiting on a finishDrawing from the client. if (didFrameInsetsChange || winAnimator.mSurfaceResized || configChanged || dragResizingChanged || mReportOrientationChanged) { || mReportOrientationChanged || requestResizeForBlastSync()) { ProtoLog.v(WM_DEBUG_RESIZE, "Resize reasons for w=%s: %s surfaceResized=%b configChanged=%b " + "dragResizingChanged=%b reportOrientationChanged=%b", Loading Loading @@ -3483,6 +3488,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mReportOrientationChanged = false; mDragResizingChangeReported = true; mWinAnimator.mSurfaceResized = false; mResizeForBlastSyncReported = true; mWindowFrames.resetInsetsChanged(); final Rect frame = mWindowFrames.mCompatFrame; Loading Loading @@ -5733,6 +5739,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (!willSync) { return false; } mResizeForBlastSyncReported = false; mLocalSyncId = mBLASTSyncEngine.startSyncSet(this); addChildrenToSyncSet(mLocalSyncId); Loading Loading @@ -5777,4 +5784,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWaitingListener = null; return mWinAnimator.finishDrawingLocked(null); } private boolean requestResizeForBlastSync() { return useBLASTSync() && !mResizeForBlastSyncReported; } }
services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +23 −0 Original line number Diff line number Diff line Loading @@ -602,6 +602,29 @@ public class WindowStateTests extends WindowTestsBase { assertFalse(win.getOrientationChanging()); } @Test public void testRequestResizeForBlastSync() { final WindowState win = mChildAppWindowAbove; makeWindowVisible(win, win.getParentWindow()); win.mLayoutSeq = win.getDisplayContent().mLayoutSeq; win.reportResized(); win.updateResizingWindowIfNeeded(); assertThat(mWm.mResizingWindows).doesNotContain(win); // Check that the window is in resizing if using blast sync. win.reportResized(); win.prepareForSync(mock(BLASTSyncEngine.TransactionReadyListener.class), 1); win.updateResizingWindowIfNeeded(); assertThat(mWm.mResizingWindows).contains(win); // Don't re-add the window again if it's been reported to the client and still waiting on // the client draw for blast sync. win.reportResized(); mWm.mResizingWindows.remove(win); win.updateResizingWindowIfNeeded(); assertThat(mWm.mResizingWindows).doesNotContain(win); } @Test public void testGetTransformationMatrix() { final int PARENT_WINDOW_OFFSET = 1; Loading