diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 8f3616bea5ee3..cd99061bb3221 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -2844,7 +2844,11 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { } private void updateDozingState() { - Trace.traceCounter(Trace.TRACE_TAG_APP, "dozing", mDozing ? 1 : 0); + if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { + Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, "Dozing", 0); + Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, "Dozing", String.valueOf(mDozing), + 0); + } Trace.beginSection("CentralSurfaces#updateDozingState"); boolean keyguardVisible = mKeyguardStateController.isVisible(); @@ -3198,6 +3202,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { @Override public void onStartedWakingUp() { + // Between onStartedWakingUp() and onFinishedWakingUp(), the system is changing the + // display power mode. To avoid jank, animations should NOT run during these power + // mode transitions, which means that whenever possible, animations should + // start running during the onFinishedWakingUp() callback instead of this callback. String tag = "CentralSurfaces#onStartedWakingUp"; DejankUtils.startDetectingBlockingIpcs(tag); mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> { @@ -3242,6 +3250,14 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { updateVisibleToUser(); updateIsKeyguard(); + }); + DejankUtils.stopDetectingBlockingIpcs(tag); + } + + @Override + public void onFinishedWakingUp() { + mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> { + // stopDozing() starts the LOCKSCREEN_TRANSITION_FROM_AOD animation. mDozeServiceHost.stopDozing(); // This is intentionally below the stopDozing call above, since it avoids that we're // unnecessarily animating the wakeUp transition. Animations should only be enabled @@ -3255,13 +3271,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { if (mScreenOffAnimationController.shouldHideLightRevealScrimOnWakeUp()) { mShadeController.makeExpandedInvisible(); } - }); - DejankUtils.stopDetectingBlockingIpcs(tag); - } - - @Override - public void onFinishedWakingUp() { mWakeUpCoordinator.setFullyAwake(true); mWakeUpCoordinator.setWakingUp(false, false); if (mKeyguardStateController.isOccluded() diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index fd9f6a73aee4b..7512d757057fa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -1103,8 +1103,10 @@ public class CentralSurfacesImplTest extends SysuiTestCase { clearInvocations(mNotificationPanelViewController); mCentralSurfaces.mWakefulnessObserver.onStartedWakingUp(); - verify(mDozeServiceHost).stopDozing(); + verify(mDozeServiceHost, never()).stopDozing(); verify(mNotificationPanelViewController).expand(eq(false)); + mCentralSurfaces.mWakefulnessObserver.onFinishedWakingUp(); + verify(mDozeServiceHost).stopDozing(); } @Test @@ -1118,6 +1120,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.setBouncerShowing(true); mCentralSurfaces.mWakefulnessObserver.onStartedWakingUp(); verify(mNotificationPanelViewController, never()).expand(anyBoolean()); + mCentralSurfaces.mWakefulnessObserver.onFinishedWakingUp(); + verify(mDozeServiceHost).stopDozing(); } @Test