summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rachit Jain <jainrachit@google.com> 2024-10-21 20:08:19 +0000
committer Rachit Jain <jainrachit@google.com> 2024-10-23 18:58:30 +0000
commit171d4adb586a04597fea69a30a19e0a6a9499c54 (patch)
tree9018017772efb7b60d36c5df15afa6a2af881c9f
parentab8211ad81f5794d8c26f18c04a9489c7627e72b (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
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java2
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskSupervisor.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java2
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());