From c058b8aa5b41aca47d18d19d49ff81a1ebbd2ba3 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Fri, 31 Mar 2023 06:51:14 +0000 Subject: [PATCH] Fix transition timeout when launching activity in TaskFragment Transition timeout due to the sync group was not ready. It was set to false when an activity was started while a transition was already collecting. Somehow, the activity was resumed already because there was no need to pause the previous top activity. So, the transition won't be set to ready afterwards. Bug: 274540105 Test: verified both on sample app and Settings Change-Id: Ib18652f610b448beb12eeb98a473399832d71dc5 --- data/etc/services.core.protolog.json | 12 ++++++------ .../java/com/android/server/wm/ActivityStarter.java | 2 ++ .../java/com/android/server/wm/BLASTSyncEngine.java | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index 2afd54b984a4a..a4ec85f11ba70 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -1297,6 +1297,12 @@ "group": "WM_DEBUG_BOOT", "at": "com\/android\/server\/wm\/WindowManagerService.java" }, + "-874087484": { + "message": "SyncGroup %d: Set ready %b", + "level": "VERBOSE", + "group": "WM_DEBUG_SYNC_ENGINE", + "at": "com\/android\/server\/wm\/BLASTSyncEngine.java" + }, "-869242375": { "message": "Content Recording: Unable to start recording due to invalid region for display %d", "level": "VERBOSE", @@ -4003,12 +4009,6 @@ "group": "WM_DEBUG_CONFIGURATION", "at": "com\/android\/server\/wm\/ActivityRecord.java" }, - "1689989893": { - "message": "SyncGroup %d: Set ready", - "level": "VERBOSE", - "group": "WM_DEBUG_SYNC_ENGINE", - "at": "com\/android\/server\/wm\/BLASTSyncEngine.java" - }, "1699269281": { "message": "Don't organize or trigger events for untrusted displayId=%d", "level": "WARN", diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index d4f151f5c66d8..38f13ec159870 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1606,6 +1606,8 @@ class ActivityStarter { transitionController.requestStartTransition(newTransition, mTargetTask == null ? started.getTask() : mTargetTask, remoteTransition, null /* displayChange */); + } else if (result == START_SUCCESS && mStartActivity.isState(RESUMED)) { + // Do nothing if the activity is started and is resumed directly. } else if (isStarted) { // Make the collecting transition wait until this request is ready. transitionController.setReady(started, false); diff --git a/services/core/java/com/android/server/wm/BLASTSyncEngine.java b/services/core/java/com/android/server/wm/BLASTSyncEngine.java index 48cf567ba9bed..85974c7ecf17c 100644 --- a/services/core/java/com/android/server/wm/BLASTSyncEngine.java +++ b/services/core/java/com/android/server/wm/BLASTSyncEngine.java @@ -228,7 +228,7 @@ class BLASTSyncEngine { if (mReady == ready) { return; } - ProtoLog.v(WM_DEBUG_SYNC_ENGINE, "SyncGroup %d: Set ready", mSyncId); + ProtoLog.v(WM_DEBUG_SYNC_ENGINE, "SyncGroup %d: Set ready %b", mSyncId, ready); mReady = ready; if (!ready) return; mWm.mWindowPlacerLocked.requestTraversal();