summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWessam Hassanein <wessam@google.com>2023-03-13 20:02:10 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-03-13 20:02:10 +0000
commit832afca2df8f4c09e7b42a7b857aac84c6b2a759 (patch)
tree542ce79d0fa2df42509a4bab1ef8cef6f98388e5
parentb00914086642ac29d2b0aa11de75340986e0ad4f (diff)
parent9c6a8eb60ae3f8c4adef1de14fd83d63fba773a1 (diff)
downloadbase-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.java21
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);
}