From f3306171de61aac1ccfabf1c58ee41ed972b206f Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Wed, 7 Jun 2023 15:11:09 -0700 Subject: Abort queued-sleep transition if display shouldn't sleep anymore If a SLEEP gets queued due to an ongoing transition, there's a chance that, by the time it is executed, the display won't be sleeping anymore. In that case, we should abort the sleep. Bug: 283461350 Test: Use CtsControls and long-press home-controls on lockscreen Change-Id: I2465e1e98ed459bb7d8a459e175ecf2cbbd16fbc --- .../core/java/com/android/server/wm/RootWindowContainer.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 4995236da1be..bc7fa31125f9 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2357,10 +2357,14 @@ class RootWindowContainer extends WindowContainer final Transition transition = new Transition(TRANSIT_SLEEP, 0 /* flags */, display.mTransitionController, mWmService.mSyncEngine); final TransitionController.OnStartCollect sendSleepTransition = (deferred) -> { - display.mTransitionController.requestStartTransition(transition, - null /* trigger */, null /* remote */, null /* display */); - // Force playing immediately so that unrelated ops can't be collected. - transition.playNow(); + if (deferred && !display.shouldSleep()) { + transition.abort(); + } else { + display.mTransitionController.requestStartTransition(transition, + null /* trigger */, null /* remote */, null /* display */); + // Force playing immediately so that unrelated ops can't be collected. + transition.playNow(); + } }; if (!display.mTransitionController.isCollecting()) { // Since this bypasses sync, submit directly ignoring whether sync-engine -- cgit v1.2.3-59-g8ed1b