diff options
| author | 2018-09-04 19:49:57 -0700 | |
|---|---|---|
| committer | 2018-09-05 10:27:21 -0700 | |
| commit | 9372683dd2b6ceafee4714770b51e67066e3d8bc (patch) | |
| tree | 81d7d0202c584789031696267e6fd3cd6985039a | |
| parent | 7daaaad74a29eca0e2a56b29fe55e2f615b05415 (diff) | |
DO NOT MERGE: Reset launch start times when removing a process
When removing an exiting process that is running foreground activities, clear the launch times for
the current windowing mode. When an app process is removed, activities from the process may be
relaunched. In the case of forceStopPackageLocked the activities are finished before any window
is drawn, and the launch time is not cleared. This will be incorrectly used to calculate launch time
for the next launched activity launched in the same windowing mode.
Bug: 80084651
Test: adb shell am start -W com.amazon.mShop.android.shopping/com.amazon.mShop.home.HomeActivity && sleep 1 && adb shell am force-stop com.amazon.mShop.android.shopping
Change-Id: I2c4f0716c922baa1ad209b4ea1fa7ce366e0e108
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index c5b8b950d456..2f1021a3dd9b 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5889,6 +5889,7 @@ public class ActivityManagerService extends IActivityManager.Stub private final void handleAppDiedLocked(ProcessRecord app, boolean restarting, boolean allowRestart) { int pid = app.pid; + final boolean clearLaunchStartTime = !restarting && app.removed && app.foregroundActivities; boolean kept = cleanUpApplicationRecordLocked(app, restarting, allowRestart, -1, false /*replacingPid*/); if (!kept && !restarting) { @@ -5929,6 +5930,19 @@ public class ActivityManagerService extends IActivityManager.Stub } finally { mWindowManager.continueSurfaceLayout(); } + + // Hack for pi + // When an app process is removed, activities from the process may be relaunched. In the + // case of forceStopPackageLocked the activities are finished before any window is drawn, + // and the launch time is not cleared. This will be incorrectly used to calculate launch + // time for the next launched activity launched in the same windowing mode. + if (clearLaunchStartTime) { + final LaunchTimeTracker.Entry entry = mStackSupervisor + .getLaunchTimeTracker().getEntry(mStackSupervisor.getWindowingMode()); + if (entry != null) { + entry.mLaunchStartTime = 0; + } + } } private final int getLRURecordIndexForAppLocked(IApplicationThread thread) { |