diff options
| author | 2025-01-22 10:17:11 -0800 | |
|---|---|---|
| committer | 2025-02-12 09:56:10 -0800 | |
| commit | 221b19e9c0ee2763b3594e09fb175df0fc7ae128 (patch) | |
| tree | ce3e0586e801ee1f9be91a7379bfc0860d1c700b | |
| parent | 6c118a5bdf32c987a2264f0952a74536ff422d6e (diff) | |
Lower SMS background importance
The messaging app is currently bound with the BIND_NOT_VISIBLE flag
by the system. This keeps it in the oom score 200 slot, which
competes with higher priority processes like foreground services.
Binding with BIND_ALMOST_PERCEPTIBLE will lower its background
importance to 201, keeping it warm in memory for snappier UX but
allows them to die in favor of process doing more important work.
Flag: com.android.server.am.lower_sms_oom_importance
Fixes: 372511805
Test: manual (`adb shell dumpsys activity lru`, background sms
process should have `prcp+1` oom score.)
Change-Id: Ia4fef6afa57ff822e5122e1716ea05462dd1ed48
| -rw-r--r-- | services/core/java/com/android/server/am/flags.aconfig | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/appbinding/AppBindingConstants.java | 13 |
2 files changed, 21 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/flags.aconfig b/services/core/java/com/android/server/am/flags.aconfig index e89889e794ba..15beeda591d8 100644 --- a/services/core/java/com/android/server/am/flags.aconfig +++ b/services/core/java/com/android/server/am/flags.aconfig @@ -319,3 +319,14 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "lower_sms_oom_importance" + namespace: "backstage_power" + description: "Lower messaging app process oom importance to PERCEPTIBLE_APP_ADJ + 1." + bug: "372511805" + is_fixed_read_only: true + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/services/core/java/com/android/server/appbinding/AppBindingConstants.java b/services/core/java/com/android/server/appbinding/AppBindingConstants.java index 71847694b1d8..561cc0ef0a3b 100644 --- a/services/core/java/com/android/server/appbinding/AppBindingConstants.java +++ b/services/core/java/com/android/server/appbinding/AppBindingConstants.java @@ -102,9 +102,16 @@ public class AppBindingConstants { boolean smsServiceEnabled = parser.getBoolean(SMS_SERVICE_ENABLED_KEY, true); - int smsAppBindFlags = parser.getInt( - SMS_APP_BIND_FLAGS_KEY, - Context.BIND_NOT_VISIBLE | Context.BIND_FOREGROUND_SERVICE); + int smsAppBindFlags; + if (com.android.server.am.Flags.lowerSmsOomImportance()) { + smsAppBindFlags = parser.getInt( + SMS_APP_BIND_FLAGS_KEY, + Context.BIND_ALMOST_PERCEPTIBLE | Context.BIND_FOREGROUND_SERVICE); + } else { + smsAppBindFlags = parser.getInt( + SMS_APP_BIND_FLAGS_KEY, + Context.BIND_NOT_VISIBLE | Context.BIND_FOREGROUND_SERVICE); + } long serviceStableConnectionThresholdSec = parser.getLong( SERVICE_STABLE_CONNECTION_THRESHOLD_SEC_KEY, TimeUnit.MINUTES.toSeconds(2)); |