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

Commit 607c7a19 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Reduce operations in postApplyAnimation for shell transition

This is a partial alternative solution of [1] to avoid black background
(no wallpaper target) when turning on screen with a translucent activity
which is occluding keyguard while AOD is disabled.

[1]: Ifc3ce28424fe87b1e0a0a2af07bdad559575ebec

Now instead of always recomputing wallpaper target after committing
visibility, the update hint only needs to be set when there is a
translucent occluding activity.

Also use usingShellTransitions to skip some legacy animation checks
that shell transition doesn't care.

Bug: 260059642
Test: Enable shell transition. Disable AOD
      KeyguardTests#testDialogShowWhenLockedActivity
      KeyguardTests#testTranslucentShowWhenLockedActivity
Test: Transition latency of OpenAppMicrobenchmark
Change-Id: Ic3c704f0579690c51f7188a26c5256dc3e74e1f7
parent 2a23c2e3
Loading
Loading
Loading
Loading
+11 −16
Original line number Diff line number Diff line
@@ -5435,14 +5435,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     */
    private void postApplyAnimation(boolean visible, boolean fromTransition) {
        final boolean usingShellTransitions = mTransitionController.isShellTransitionsEnabled();
        final boolean delayed = isAnimating(PARENTS | CHILDREN,
        final boolean delayed = !usingShellTransitions && isAnimating(PARENTS | CHILDREN,
                ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION
                        | ANIMATION_TYPE_RECENTS);
        if (!delayed) {
        if (!delayed && !usingShellTransitions) {
            // We aren't delayed anything, but exiting windows rely on the animation finished
            // callback being called in case the ActivityRecord was pretending to be delayed,
            // which we might have done because we were in closing/opening apps list.
            if (!usingShellTransitions) {
            onAnimationFinished(ANIMATION_TYPE_APP_TRANSITION, null /* AnimationAdapter */);
            if (visible) {
                // The token was made immediately visible, there will be no entrance animation.
@@ -5451,10 +5450,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                mWmService.mActivityManagerAppTransitionNotifier.onAppTransitionFinishedLocked(
                        token);
            }
            } else {
                // update wallpaper target
                setAppLayoutChanges(FINISH_LAYOUT_REDO_WALLPAPER, "ActivityRecord");
            }
        }

        // If we're becoming visible, immediately change client visibility as well. there seem
@@ -5462,8 +5457,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // updated.
        // If we're becoming invisible, update the client visibility if we are not running an
        // animation. Otherwise, we'll update client visibility in onAnimationFinished.
        if (visible || !isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)
                || usingShellTransitions) {
        if (visible || usingShellTransitions
                || !isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)) {
            setClientVisible(visible);
        }

+7 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE;
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;

import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS;
@@ -650,6 +651,12 @@ class KeyguardController {
            mRequestDismissKeyguard = lastDismissKeyguardActivity != mDismissingKeyguardActivity
                    && !mOccluded && !mKeyguardGoingAway
                    && mDismissingKeyguardActivity != null;
            if (mOccluded && mKeyguardShowing && !display.isSleeping() && !top.fillsParent()
                    && display.mWallpaperController.getWallpaperTarget() == null) {
                // The occluding activity may be translucent or not fill screen. Then let wallpaper
                // to check whether it should set itself as target to avoid blank background.
                display.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
            }

            if (mTopTurnScreenOnActivity != lastTurnScreenOnActivity
                    && mTopTurnScreenOnActivity != null