From 0fbc5aa62a28ea0c3ccc7dbafce80e587e67b605 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Fri, 24 Mar 2023 18:10:42 +0800 Subject: [PATCH] Do not wait for transient hide transition targets This avoids the latency to start transient transition when the activities in the hiding tasks are slow to report drawn. Fix: 275031340 Test: atest TransitionTests#testTransientLaunch Change-Id: Iaaf2221150d956f509d6f9365e29da12f3243e5e --- services/core/java/com/android/server/wm/ActivityRecord.java | 5 +++++ .../wmtests/src/com/android/server/wm/TransitionTests.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index f5bc8ff02e688..8373b9fb110f0 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -10421,6 +10421,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A @Override boolean isSyncFinished() { + if (task != null && mTransitionController.isTransientHide(task)) { + // The activity keeps visibleRequested but may be hidden later, so no need to wait for + // it to be drawn. + return true; + } if (!super.isSyncFinished()) return false; if (mDisplayContent != null && mDisplayContent.mUnknownAppVisibilityController .isVisibilityUnknown(this)) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index 582d7d81cd4a6..d7bf4b0e02b2f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -1415,6 +1415,8 @@ public class TransitionTests extends WindowTestsBase { final Transition.ChangeInfo activity1ChangeInfo = closeTransition.mChanges.get(activity1); assertNotNull(activity1ChangeInfo); assertTrue(activity1ChangeInfo.hasChanged()); + // No need to wait for the activity in transient hide task. + assertTrue(activity1.isSyncFinished()); activity1.setVisibleRequested(false); activity2.setVisibleRequested(true);