From 3f061904cdbcd138887b0b2157e134067e8ad6fa Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Fri, 31 Mar 2023 10:45:06 -0700 Subject: [PATCH] Use an empty transitioninfo for force-sleep This way, if the sleep transition has content, it won't be prematurely free'd by one of the "signal" merges. Bug: 276144574 Test: reduction in reports Change-Id: If1b255b3e55d7de74dd9358499fea98fd61c310e --- .../src/com/android/wm/shell/transition/SleepHandler.java | 2 +- .../Shell/src/com/android/wm/shell/transition/Transitions.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SleepHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SleepHandler.java index 1879bf721fed5..d2795959494a1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SleepHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SleepHandler.java @@ -41,9 +41,9 @@ class SleepHandler implements Transitions.TransitionHandler { @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { + mSleepTransitions.remove(transition); startTransaction.apply(); finishCallback.onTransitionFinished(null, null); - mSleepTransitions.remove(transition); return true; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java index 681fa5177da2a..fa4de16b37f17 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java @@ -986,6 +986,7 @@ public class Transitions implements RemoteCallable { onFinish(forceFinish, null, null); } final SurfaceControl.Transaction dummyT = new SurfaceControl.Transaction(); + final TransitionInfo dummyInfo = new TransitionInfo(TRANSIT_SLEEP, 0 /* flags */); while (!mActiveTransitions.isEmpty() && !mSleepHandler.mSleepTransitions.isEmpty()) { final ActiveTransition playing = mActiveTransitions.get(0); int sleepIdx = findByToken(mReadyTransitions, mSleepHandler.mSleepTransitions.get(0)); @@ -995,7 +996,7 @@ public class Transitions implements RemoteCallable { final ActiveTransition nextSleep = mReadyTransitions.get(sleepIdx); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Attempt to merge SLEEP %s" + " into %s", nextSleep, playing); - playing.mHandler.mergeAnimation(nextSleep.mToken, nextSleep.mInfo, dummyT, + playing.mHandler.mergeAnimation(nextSleep.mToken, dummyInfo, dummyT, playing.mToken, (wct, cb) -> {}); } else { Log.e(TAG, "Couldn't find sleep transition in ready list: "