diff options
| author | 2024-10-21 20:08:19 +0000 | |
|---|---|---|
| committer | 2024-10-23 18:58:30 +0000 | |
| commit | 171d4adb586a04597fea69a30a19e0a6a9499c54 (patch) | |
| tree | 9018017772efb7b60d36c5df15afa6a2af881c9f | |
| parent | ab8211ad81f5794d8c26f18c04a9489c7627e72b (diff) | |
Reland^2 "Revert "Defer resume of activity while applying wct""
- When the hierarchy is changing, defer resuming the activity until it is ready to let it finish processing the wct.
- If the activity does not wait, there will be extra lifecycle states even if they are applied in the same wct. Update test to not defer resume at the start.
- Only send wct if the activity is in the resumed state since the activity could have been removed already.
Change-Id: I1e2a8d9a26eecee1286967157923b5b3b4fb2ecb
Flag: EXEMPT (bug fix)
Bug: 369186876
Test: atest CtsWindowManagerDeviceActivity com.android.server.wm.ActivityTaskManagerServiceTests
3 files changed, 5 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 0b36c7eb5fdf..15a289ec3519 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1452,7 +1452,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } boolean scheduleTopResumedActivityChanged(boolean onTop) { - if (!attachedToProcess()) { + if (!attachedToProcess() || isState(DESTROYING, DESTROYED)) { ProtoLog.w(WM_DEBUG_STATES, "Can't report activity position update - client not running, " + "activityRecord=%s", this); diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 4f71719006f5..cd71ec3b534c 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -2280,6 +2280,9 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { * sent to the new top resumed activity. */ ActivityRecord updateTopResumedActivityIfNeeded(String reason) { + if (!readyToResume()) { + return mTopResumedActivity; + } final ActivityRecord prevTopActivity = mTopResumedActivity; final Task topRootTask = mRootWindowContainer.getTopDisplayFocusedRootTask(); if (topRootTask == null || topRootTask.getTopResumedActivity() == prevTopActivity) { @@ -2340,8 +2343,8 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { && mTopResumedActivity.scheduleTopResumedActivityChanged(false /* onTop */)) { scheduleTopResumedStateLossTimeout(mTopResumedActivity); mTopResumedActivityWaitingForPrev = true; - mTopResumedActivity = null; } + mTopResumedActivity = null; } /** Schedule top resumed state change if previous top activity already reported back. */ diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java index c176658da847..e0b29c937381 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java @@ -382,13 +382,11 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase { @Test public void testResumeNextActivityOnCrashedAppDied() { - mSupervisor.beginDeferResume(); final ActivityRecord homeActivity = new ActivityBuilder(mAtm) .setTask(mRootWindowContainer.getDefaultTaskDisplayArea().getOrCreateRootHomeTask()) .build(); final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build(); activity.setState(RESUMED, "test"); - mSupervisor.endDeferResume(); assertEquals(activity.app, mAtm.mInternal.getTopApp()); |