From 1b974dc979c32f87f41d77ae000a5c94faa2d0f8 Mon Sep 17 00:00:00 2001 From: "skuhne@google.com" Date: Fri, 9 Dec 2016 13:41:29 -0800 Subject: [PATCH] Fixing timeout caused by non executed animation The problem became apparent after a springboard activity called another activity and a moveTaskToFront got requested. This issue is similar to ag/1647538 where an ExecuteAppTransision was missing and a timeout occured. Bug: 33307856 Test: Start PlayStore on ARC++ several times to see that it shows up immediately and not after a considerable delay. Change-Id: I25b63bd65385a4ad45bbb1803ae92fb48fe5fe4d (cherry picked from commit 06f78e83d1010fa5420c7fe88a0b27eb3651bdc3) --- .../com/android/server/am/ActivityStack.java | 18 +++++++++--------- .../server/am/ActivityStackSupervisor.java | 3 +++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 436eaf6049f2c..671c84e579681 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2150,9 +2150,7 @@ final class ActivityStack extends ConfigurationContainer { mStackSupervisor.allResumedActivitiesComplete()) { // Make sure we have executed any pending transitions, since there // should be nothing left to do at this point. - mWindowManager.executeAppTransition(); - mNoAnimActivities.clear(); - ActivityOptions.abort(options); + executeAppTransition(options); if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Top activity resumed " + next); if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked(); @@ -2187,9 +2185,7 @@ final class ActivityStack extends ConfigurationContainer { && mStackSupervisor.allPausedActivitiesComplete()) { // Make sure we have executed any pending transitions, since there // should be nothing left to do at this point. - mWindowManager.executeAppTransition(); - mNoAnimActivities.clear(); - ActivityOptions.abort(options); + executeAppTransition(options); if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Going to sleep and all paused"); if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked(); @@ -2252,9 +2248,7 @@ final class ActivityStack extends ConfigurationContainer { // So, nothing else to-do except: // Make sure we have executed any pending transitions, since there // should be nothing left to do at this point. - mWindowManager.executeAppTransition(); - mNoAnimActivities.clear(); - ActivityOptions.abort(options); + executeAppTransition(options); if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Top activity resumed (dontWaitForPause) " + next); if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked(); @@ -5056,4 +5050,10 @@ final class ActivityStack extends ConfigurationContainer { mTaskHistory.get(taskNdx).setLockTaskAuth(); } } + + void executeAppTransition(ActivityOptions options) { + mWindowManager.executeAppTransition(); + mNoAnimActivities.clear(); + ActivityOptions.abort(options); + } } diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index db9e0f608efe3..fe261f10885b5 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1844,6 +1844,9 @@ public class ActivityStackSupervisor extends ConfigurationContainer final ActivityRecord r = mFocusedStack.topRunningActivityLocked(); if (r == null || r.state != RESUMED) { mFocusedStack.resumeTopActivityUncheckedLocked(null, null); + } else if (r.state == RESUMED) { + // Kick off any lingering app transitions form the MoveTaskToFront operation. + mFocusedStack.executeAppTransition(targetOptions); } return false; }