diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 31 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/flags.aconfig | 10 |
2 files changed, 30 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index cd929c1883d0..a184e905d0fa 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -4799,9 +4799,6 @@ public class ActivityManagerService extends IActivityManager.Stub updateLruProcessLocked(app, false, null); checkTime(startTime, "attachApplicationLocked: after updateLruProcessLocked"); - updateOomAdjLocked(app, OOM_ADJ_REASON_PROCESS_BEGIN); - checkTime(startTime, "attachApplicationLocked: after updateOomAdjLocked"); - final long now = SystemClock.uptimeMillis(); synchronized (mAppProfiler.mProfilerLock) { app.mProfile.setLastRequestedGc(now); @@ -4815,6 +4812,15 @@ public class ActivityManagerService extends IActivityManager.Stub } mProcessesOnHold.remove(app); + // See if the top visible activity is waiting to run in this process... + if (com.android.server.am.Flags.expediteActivityLaunchOnColdStart()) { + if (normalMode) { + mAtmInternal.attachApplication(app.getWindowProcessController()); + } + } + updateOomAdjLocked(app, OOM_ADJ_REASON_PROCESS_BEGIN); + checkTime(startTime, "attachApplicationLocked: after updateOomAdjLocked"); + if (!mConstants.mEnableWaitForFinishAttachApplication) { finishAttachApplicationInner(startSeq, callingUid, pid); } @@ -4880,18 +4886,21 @@ public class ActivityManagerService extends IActivityManager.Stub // Mark the finish attach application phase as completed mProcessStateController.setPendingFinishAttach(app, false); - final boolean normalMode = mProcessesReady || isAllowedWhileBooting(app.info); final String processName = app.processName; boolean badApp = false; boolean didSomething = false; - // See if the top visible activity is waiting to run in this process... - if (normalMode) { - try { - didSomething = mAtmInternal.attachApplication(app.getWindowProcessController()); - } catch (Exception e) { - Slog.wtf(TAG, "Exception thrown launching activities in " + app, e); - badApp = true; + if (!com.android.server.am.Flags.expediteActivityLaunchOnColdStart()) { + final boolean normalMode = mProcessesReady || isAllowedWhileBooting(app.info); + + if (normalMode) { + try { + didSomething |= mAtmInternal.attachApplication( + app.getWindowProcessController()); + } catch (Exception e) { + Slog.wtf(TAG, "Exception thrown launching activities in " + app, e); + badApp = true; + } } } diff --git a/services/core/java/com/android/server/am/flags.aconfig b/services/core/java/com/android/server/am/flags.aconfig index 89e4a8d82676..cfcede8ee40d 100644 --- a/services/core/java/com/android/server/am/flags.aconfig +++ b/services/core/java/com/android/server/am/flags.aconfig @@ -288,3 +288,13 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "expedite_activity_launch_on_cold_start" + namespace: "system_performance" + description: "Notify ActivityTaskManager of cold starts early to fix app launch behavior." + bug: "319519089" + metadata { + purpose: PURPOSE_BUGFIX + } +} |