Loading libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt +0 −12 Original line number Diff line number Diff line Loading @@ -68,18 +68,6 @@ open class EnterPipOnUserLeaveHintTest(flicker: FlickerTest) : EnterPipTest(flic transitions { tapl.goHome() } } @Presubmit @Test override fun pipAppWindowAlwaysVisible() { // In gestural nav the pip will first move behind home and then above home. The visual // appearance visible->invisible->visible is asserted by pipAppLayerAlwaysVisible(). // But the internal states of activity don't need to follow that, such as a temporary // visibility state can be changed quickly outside a transaction so the test doesn't // detect that. Hence, skip the case to avoid restricting the internal implementation. Assume.assumeFalse(flicker.scenario.isGesturalNavigation) super.pipAppWindowAlwaysVisible() } @Presubmit @Test override fun pipAppLayerAlwaysVisible() { Loading services/core/java/com/android/server/wm/ActivityRecord.java +3 −14 Original line number Diff line number Diff line Loading @@ -5257,9 +5257,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A transferStartingWindowFromHiddenAboveTokenIfNeeded(); } // Defer committing visibility until transition starts. if (inTransition()) { if (!visible && mTransitionController.inPlayingTransition(this) // If in a transition, defer commits for activities that are going invisible if (!visible && inTransition()) { if (mTransitionController.inPlayingTransition(this) && mTransitionController.isCollecting(this)) { mTransitionChangeFlags |= FLAG_IS_OCCLUDED; } Loading Loading @@ -5509,17 +5509,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } /** Updates draw state and shows drawn windows. */ void commitFinishDrawing(SurfaceControl.Transaction t) { boolean committed = false; for (int i = mChildren.size() - 1; i >= 0; i--) { committed |= mChildren.get(i).commitFinishDrawing(t); } if (committed) { requestUpdateWallpaperIfNeeded(); } } /** * Check if visibility of this {@link ActivityRecord} should be updated as part of an app * transition. Loading services/core/java/com/android/server/wm/Transition.java +1 −19 Original line number Diff line number Diff line Loading @@ -845,7 +845,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord(); if (ar == null || !ar.isVisible() || ar.getParent() == null) continue; if (inputSinkTransaction == null) { inputSinkTransaction = ar.mWmService.mTransactionFactory.get(); inputSinkTransaction = new SurfaceControl.Transaction(); } ar.mActivityRecordInputSink.applyChangesToSurfaceIfChanged(inputSinkTransaction); } Loading Loading @@ -970,11 +970,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { return; } // Commit the visibility of visible activities before calculateTransitionInfo(), so the // TaskInfo can be visible. Also it needs to be done before moveToPlaying(), otherwise // ActivityRecord#canShowWindows() may reject to show its window. commitVisibleActivities(transaction); mState = STATE_PLAYING; mStartTransaction = transaction; mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get(); Loading Loading @@ -1137,19 +1132,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { } } /** The transition is ready to play. Make the start transaction show the surfaces. */ private void commitVisibleActivities(SurfaceControl.Transaction transaction) { for (int i = mParticipants.size() - 1; i >= 0; --i) { final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord(); if (ar == null || !ar.isVisibleRequested()) { continue; } ar.commitVisibility(true /* visible */, false /* performLayout */, true /* fromTransition */); ar.commitFinishDrawing(transaction); } } /** @see RecentsAnimationController#attachNavigationBarToApp */ private void handleLegacyRecentsStartBehavior(DisplayContent dc, TransitionInfo info) { if ((mFlags & TRANSIT_FLAG_IS_RECENTS) == 0) { Loading services/core/java/com/android/server/wm/WindowState.java +0 −13 Original line number Diff line number Diff line Loading @@ -4616,19 +4616,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } /** Makes the surface of drawn window (COMMIT_DRAW_PENDING) to be visible. */ boolean commitFinishDrawing(SurfaceControl.Transaction t) { boolean committed = mWinAnimator.commitFinishDrawingLocked(); if (committed) { // Ensure that the visibility of buffer layer is set. mWinAnimator.prepareSurfaceLocked(t); } for (int i = mChildren.size() - 1; i >= 0; i--) { committed |= mChildren.get(i).commitFinishDrawing(t); } return committed; } // This must be called while inside a transaction. boolean performShowLocked() { if (!showToCurrentUser()) { Loading services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +3 −6 Original line number Diff line number Diff line Loading @@ -564,23 +564,20 @@ public class TransitionTests extends WindowTestsBase { final WindowProcessController delegateProc = mSystemServicesTestRule.addProcess( "pkg.delegate", "proc.delegate", 6000 /* pid */, 6000 /* uid */); doReturn(mock(IBinder.class)).when(delegateProc.getThread()).asBinder(); final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true) .setVisible(false).build(); app.setVisibleRequested(true); final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true).build(); final TransitionController controller = app.mTransitionController; final Transition transition = controller.createTransition(TRANSIT_OPEN); final RemoteTransition remoteTransition = new RemoteTransition( mock(IRemoteTransition.class)); remoteTransition.setAppThread(delegateProc.getThread()); transition.collect(app); controller.requestStartTransition(transition, null /* startTask */, remoteTransition, transition.collectExistenceChange(app.getTask()); controller.requestStartTransition(transition, app.getTask(), remoteTransition, null /* displayChange */); testPlayer.startTransition(); testPlayer.onTransactionReady(app.getSyncTransaction()); assertTrue(playerProc.isRunningRemoteTransition()); assertTrue(delegateProc.isRunningRemoteTransition()); assertTrue(controller.mRemotePlayer.reportRunning(delegateProc.getThread())); assertTrue(app.isVisible()); testPlayer.finish(); assertFalse(playerProc.isRunningRemoteTransition()); Loading Loading
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt +0 −12 Original line number Diff line number Diff line Loading @@ -68,18 +68,6 @@ open class EnterPipOnUserLeaveHintTest(flicker: FlickerTest) : EnterPipTest(flic transitions { tapl.goHome() } } @Presubmit @Test override fun pipAppWindowAlwaysVisible() { // In gestural nav the pip will first move behind home and then above home. The visual // appearance visible->invisible->visible is asserted by pipAppLayerAlwaysVisible(). // But the internal states of activity don't need to follow that, such as a temporary // visibility state can be changed quickly outside a transaction so the test doesn't // detect that. Hence, skip the case to avoid restricting the internal implementation. Assume.assumeFalse(flicker.scenario.isGesturalNavigation) super.pipAppWindowAlwaysVisible() } @Presubmit @Test override fun pipAppLayerAlwaysVisible() { Loading
services/core/java/com/android/server/wm/ActivityRecord.java +3 −14 Original line number Diff line number Diff line Loading @@ -5257,9 +5257,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A transferStartingWindowFromHiddenAboveTokenIfNeeded(); } // Defer committing visibility until transition starts. if (inTransition()) { if (!visible && mTransitionController.inPlayingTransition(this) // If in a transition, defer commits for activities that are going invisible if (!visible && inTransition()) { if (mTransitionController.inPlayingTransition(this) && mTransitionController.isCollecting(this)) { mTransitionChangeFlags |= FLAG_IS_OCCLUDED; } Loading Loading @@ -5509,17 +5509,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } /** Updates draw state and shows drawn windows. */ void commitFinishDrawing(SurfaceControl.Transaction t) { boolean committed = false; for (int i = mChildren.size() - 1; i >= 0; i--) { committed |= mChildren.get(i).commitFinishDrawing(t); } if (committed) { requestUpdateWallpaperIfNeeded(); } } /** * Check if visibility of this {@link ActivityRecord} should be updated as part of an app * transition. Loading
services/core/java/com/android/server/wm/Transition.java +1 −19 Original line number Diff line number Diff line Loading @@ -845,7 +845,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord(); if (ar == null || !ar.isVisible() || ar.getParent() == null) continue; if (inputSinkTransaction == null) { inputSinkTransaction = ar.mWmService.mTransactionFactory.get(); inputSinkTransaction = new SurfaceControl.Transaction(); } ar.mActivityRecordInputSink.applyChangesToSurfaceIfChanged(inputSinkTransaction); } Loading Loading @@ -970,11 +970,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { return; } // Commit the visibility of visible activities before calculateTransitionInfo(), so the // TaskInfo can be visible. Also it needs to be done before moveToPlaying(), otherwise // ActivityRecord#canShowWindows() may reject to show its window. commitVisibleActivities(transaction); mState = STATE_PLAYING; mStartTransaction = transaction; mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get(); Loading Loading @@ -1137,19 +1132,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { } } /** The transition is ready to play. Make the start transaction show the surfaces. */ private void commitVisibleActivities(SurfaceControl.Transaction transaction) { for (int i = mParticipants.size() - 1; i >= 0; --i) { final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord(); if (ar == null || !ar.isVisibleRequested()) { continue; } ar.commitVisibility(true /* visible */, false /* performLayout */, true /* fromTransition */); ar.commitFinishDrawing(transaction); } } /** @see RecentsAnimationController#attachNavigationBarToApp */ private void handleLegacyRecentsStartBehavior(DisplayContent dc, TransitionInfo info) { if ((mFlags & TRANSIT_FLAG_IS_RECENTS) == 0) { Loading
services/core/java/com/android/server/wm/WindowState.java +0 −13 Original line number Diff line number Diff line Loading @@ -4616,19 +4616,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } /** Makes the surface of drawn window (COMMIT_DRAW_PENDING) to be visible. */ boolean commitFinishDrawing(SurfaceControl.Transaction t) { boolean committed = mWinAnimator.commitFinishDrawingLocked(); if (committed) { // Ensure that the visibility of buffer layer is set. mWinAnimator.prepareSurfaceLocked(t); } for (int i = mChildren.size() - 1; i >= 0; i--) { committed |= mChildren.get(i).commitFinishDrawing(t); } return committed; } // This must be called while inside a transaction. boolean performShowLocked() { if (!showToCurrentUser()) { Loading
services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +3 −6 Original line number Diff line number Diff line Loading @@ -564,23 +564,20 @@ public class TransitionTests extends WindowTestsBase { final WindowProcessController delegateProc = mSystemServicesTestRule.addProcess( "pkg.delegate", "proc.delegate", 6000 /* pid */, 6000 /* uid */); doReturn(mock(IBinder.class)).when(delegateProc.getThread()).asBinder(); final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true) .setVisible(false).build(); app.setVisibleRequested(true); final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true).build(); final TransitionController controller = app.mTransitionController; final Transition transition = controller.createTransition(TRANSIT_OPEN); final RemoteTransition remoteTransition = new RemoteTransition( mock(IRemoteTransition.class)); remoteTransition.setAppThread(delegateProc.getThread()); transition.collect(app); controller.requestStartTransition(transition, null /* startTask */, remoteTransition, transition.collectExistenceChange(app.getTask()); controller.requestStartTransition(transition, app.getTask(), remoteTransition, null /* displayChange */); testPlayer.startTransition(); testPlayer.onTransactionReady(app.getSyncTransaction()); assertTrue(playerProc.isRunningRemoteTransition()); assertTrue(delegateProc.isRunningRemoteTransition()); assertTrue(controller.mRemotePlayer.reportRunning(delegateProc.getThread())); assertTrue(app.isVisible()); testPlayer.finish(); assertFalse(playerProc.isRunningRemoteTransition()); Loading