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

Commit a83ecae7 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Do not sync transient hide activities

This eliminates unnecessary redraw request to the targets of
recents animation.

Bug: 275508603
Test: Capture trace when swiping up, there should only one
      trace "finishDrawing" from the recents activity.

Change-Id: I694590ec619c00ef1b95314aeab045b385e4d124
parent ebba1751
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -10522,11 +10522,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

    @Override
    boolean isSyncFinished() {
        if (task != null && mTransitionController.isTransientHide(task)) {
            // The activity keeps visibleRequested but may be hidden later, so no need to wait for
            // it to be drawn.
            return true;
        }
        if (!super.isSyncFinished()) return false;
        if (mDisplayContent != null && mDisplayContent.mUnknownAppVisibilityController
                .isVisibilityUnknown(this)) {
+4 −2
Original line number Diff line number Diff line
@@ -511,8 +511,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        if (mParticipants.contains(wc)) return;
        // Wallpaper is like in a static drawn state unless display may have changes, so exclude
        // the case to reduce transition latency waiting for the unchanged wallpaper to redraw.
        final boolean needSyncDraw = !isWallpaper(wc) || mParticipants.contains(wc.mDisplayContent);
        if (needSyncDraw) {
        final boolean needSync = (!isWallpaper(wc) || mParticipants.contains(wc.mDisplayContent))
                // Transient-hide may be hidden later, so no need to request redraw.
                && !isInTransientHide(wc);
        if (needSync) {
            mSyncEngine.addToSyncSet(mSyncId, wc);
        }
        ChangeInfo info = mChanges.get(wc);
+1 −3
Original line number Diff line number Diff line
@@ -1404,8 +1404,6 @@ public class TransitionTests extends WindowTestsBase {
        // We are now going to simulate closing task1 to return back to (open) task2.
        final Transition closeTransition = controller.createTransition(TRANSIT_CLOSE);

        closeTransition.collectExistenceChange(task1);
        closeTransition.collectExistenceChange(activity1);
        closeTransition.collectExistenceChange(task2);
        closeTransition.collectExistenceChange(activity2);
        closeTransition.setTransientLaunch(activity2, task1);
@@ -1416,7 +1414,7 @@ public class TransitionTests extends WindowTestsBase {
        assertNotNull(activity1ChangeInfo);
        assertTrue(activity1ChangeInfo.hasChanged());
        // No need to wait for the activity in transient hide task.
        assertTrue(activity1.isSyncFinished());
        assertEquals(WindowContainer.SYNC_STATE_NONE, activity1.mSyncState);

        activity1.setVisibleRequested(false);
        activity2.setVisibleRequested(true);