Only execute relayout after animation is over
After the keyguard dismissal animation is over, there will be an expensive frame where a relayout is needed. This relayout should only happen after processing the whole animation, otherwise there will be jank. In order to do so, we'll post onKeyguardExitFinished() and related methods to the next frame. Test: atest KeyguardViewMediator Test: perfetto trace Fixes: 210434695 Change-Id: Ic2387474e095189ed2e23b177c243247af2198bf
This commit is contained in:
@@ -100,6 +100,7 @@ import com.android.keyguard.KeyguardViewController;
|
||||
import com.android.keyguard.ViewMediatorCallback;
|
||||
import com.android.keyguard.mediator.ScreenOnCoordinator;
|
||||
import com.android.systemui.CoreStartable;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
@@ -2345,16 +2346,20 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable,
|
||||
// Block the panel from expanding, in case we were doing a swipe to dismiss gesture.
|
||||
mKeyguardViewControllerLazy.get().blockPanelExpansionFromCurrentTouch();
|
||||
final boolean wasShowing = mShowing;
|
||||
onKeyguardExitFinished();
|
||||
|
||||
if (mKeyguardStateController.isDismissingFromSwipe() || wasShowing) {
|
||||
mKeyguardUnlockAnimationControllerLazy.get().hideKeyguardViewAfterRemoteAnimation();
|
||||
}
|
||||
|
||||
finishSurfaceBehindRemoteAnimation(cancelled);
|
||||
mSurfaceBehindRemoteAnimationRequested = false;
|
||||
mKeyguardUnlockAnimationControllerLazy.get().notifyFinishedKeyguardExitAnimation();
|
||||
InteractionJankMonitor.getInstance().end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION);
|
||||
|
||||
// Post layout changes to the next frame, so we don't hang at the end of the animation.
|
||||
DejankUtils.postAfterTraversal(() -> {
|
||||
onKeyguardExitFinished();
|
||||
|
||||
if (mKeyguardStateController.isDismissingFromSwipe() || wasShowing) {
|
||||
mKeyguardUnlockAnimationControllerLazy.get().hideKeyguardViewAfterRemoteAnimation();
|
||||
}
|
||||
|
||||
finishSurfaceBehindRemoteAnimation(cancelled);
|
||||
mSurfaceBehindRemoteAnimationRequested = false;
|
||||
mKeyguardUnlockAnimationControllerLazy.get().notifyFinishedKeyguardExitAnimation();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user