diff options
author | Wessam Hassanein <wessam@google.com> | 2023-03-13 20:02:10 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-03-13 20:02:10 +0000 |
commit | 832afca2df8f4c09e7b42a7b857aac84c6b2a759 (patch) | |
tree | 542ce79d0fa2df42509a4bab1ef8cef6f98388e5 | |
parent | b00914086642ac29d2b0aa11de75340986e0ad4f (diff) | |
parent | 9c6a8eb60ae3f8c4adef1de14fd83d63fba773a1 (diff) | |
download | base-832afca2df8f4c09e7b42a7b857aac84c6b2a759.tar.gz |
Merge "Improve Transition GC initiation by improving the Frameworks triggering signal" am: 9c6a8eb60a
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2477849
Change-Id: I9b7595bde763a526ebb686045871a01dddcd4274
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | core/java/android/app/ActivityThread.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 6286f7eaaae2..00e55fa260ef 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3430,8 +3430,13 @@ public final class ActivityThread extends ClientTransactionHandler if (mLastProcessState == processState) { return; } + // Do not issue a transitional GC if we are transitioning between 2 cached states. + // Only update if the state flips between cached and uncached or vice versa + if (ActivityManager.isProcStateCached(mLastProcessState) + != ActivityManager.isProcStateCached(processState)) { + updateVmProcessState(processState); + } mLastProcessState = processState; - updateVmProcessState(processState); if (localLOGV) { Slog.i(TAG, "******************* PROCESS STATE CHANGED TO: " + processState + (fromIpc ? " (from ipc" : "")); @@ -3440,12 +3445,16 @@ public final class ActivityThread extends ClientTransactionHandler } /** Update VM state based on ActivityManager.PROCESS_STATE_* constants. */ + // Currently ART VM only uses state updates for Transitional GC, and thus + // this function initiates a Transitional GC for transitions into Cached apps states. private void updateVmProcessState(int processState) { - // TODO: Tune this since things like gmail sync are important background but not jank - // perceptible. - final int state = processState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND - ? VM_PROCESS_STATE_JANK_PERCEPTIBLE - : VM_PROCESS_STATE_JANK_IMPERCEPTIBLE; + // Only a transition into Cached state should result in a Transitional GC request + // to the ART runtime. Update VM state to JANK_IMPERCEPTIBLE in that case. + // Note that there are 4 possible cached states currently, all of which are + // JANK_IMPERCEPTIBLE from GC point of view. + final int state = ActivityManager.isProcStateCached(processState) + ? VM_PROCESS_STATE_JANK_IMPERCEPTIBLE + : VM_PROCESS_STATE_JANK_PERCEPTIBLE; VMRuntime.getRuntime().updateProcessState(state); } |