Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 965d1617 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Revert "Defer committing visible until transition ready""

parents 47cde02c 1d28abbc
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -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() {
+3 −14
Original line number Diff line number Diff line
@@ -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;
            }
@@ -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.
+1 −19
Original line number Diff line number Diff line
@@ -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);
        }
@@ -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();
@@ -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) {
+0 −13
Original line number Diff line number Diff line
@@ -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()) {
+3 −6
Original line number Diff line number Diff line
@@ -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());