diff options
| author | 2022-06-10 16:19:57 -0700 | |
|---|---|---|
| committer | 2022-06-21 15:41:46 -0700 | |
| commit | f0f1fb99fe6b3e83350200cdafb72b9bdec42088 (patch) | |
| tree | ae637c13f4d73b3c5b39122d0c74957281646a7c | |
| parent | 3b84c43c1e29ae4fb3b83259ede3e73aed52687c (diff) | |
Immediately notify VM of TOP process state
The delay was introduced to suppress JIT activity during startup.
However, ART no longer uses the expicit process state signal as an input
to informing JIT activity, so the delay can be removed.
By forwarding the process state immediately, ART can make more informed
decisions about activity based on process state, e.g., suppressing
madvise calls for less important (non-foreground) processes.
Bug: 235390330
Test: m + presubmit + boot tests
Change-Id: Ia95a76f86cf4c38bf89e56f954dbf59e0083ec50
Merged-In: Ia95a76f86cf4c38bf89e56f954dbf59e0083ec50
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 33 |
1 files changed, 1 insertions, 32 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 1d1743f56ff7..ae8809d8ac29 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -274,11 +274,6 @@ public final class ActivityThread extends ClientTransactionHandler public static final boolean DEBUG_ORDER = false; private static final long MIN_TIME_BETWEEN_GCS = 5*1000; /** - * If the activity doesn't become idle in time, the timeout will ensure to apply the pending top - * process state. - */ - private static final long PENDING_TOP_PROCESS_STATE_TIMEOUT = 1000; - /** * The delay to release the provider when it has no more references. It reduces the number of * transactions for acquiring and releasing provider if the client accesses the provider * frequently in a short time. @@ -367,8 +362,6 @@ public final class ActivityThread extends ClientTransactionHandler private final AtomicInteger mNumLaunchingActivities = new AtomicInteger(); @GuardedBy("mAppThread") private int mLastProcessState = PROCESS_STATE_UNKNOWN; - @GuardedBy("mAppThread") - private int mPendingProcessState = PROCESS_STATE_UNKNOWN; ArrayList<WeakReference<AssistStructure>> mLastAssistStructures = new ArrayList<>(); private int mLastSessionId; final ArrayMap<IBinder, CreateServiceData> mServicesData = new ArrayMap<>(); @@ -2384,7 +2377,6 @@ public final class ActivityThread extends ClientTransactionHandler if (stopProfiling) { mProfiler.stopProfiling(); } - applyPendingProcessState(); return false; } } @@ -3452,16 +3444,7 @@ public final class ActivityThread extends ClientTransactionHandler } wasCached = isCachedProcessState(); mLastProcessState = processState; - // Defer the top state for VM to avoid aggressive JIT compilation affecting activity - // launch time. - if (processState == ActivityManager.PROCESS_STATE_TOP - && mNumLaunchingActivities.get() > 0) { - mPendingProcessState = processState; - mH.postDelayed(this::applyPendingProcessState, PENDING_TOP_PROCESS_STATE_TIMEOUT); - } else { - mPendingProcessState = PROCESS_STATE_UNKNOWN; - updateVmProcessState(processState); - } + updateVmProcessState(processState); if (localLOGV) { Slog.i(TAG, "******************* PROCESS STATE CHANGED TO: " + processState + (fromIpc ? " (from ipc" : "")); @@ -3495,20 +3478,6 @@ public final class ActivityThread extends ClientTransactionHandler VMRuntime.getRuntime().updateProcessState(state); } - private void applyPendingProcessState() { - synchronized (mAppThread) { - if (mPendingProcessState == PROCESS_STATE_UNKNOWN) { - return; - } - final int pendingState = mPendingProcessState; - mPendingProcessState = PROCESS_STATE_UNKNOWN; - // Only apply the pending state if the last state doesn't change. - if (pendingState == mLastProcessState) { - updateVmProcessState(pendingState); - } - } - } - @Override public void countLaunchingActivities(int num) { mNumLaunchingActivities.getAndAdd(num); |