AMS: Add Phenotype key for low swap threshold

KEY_LOW_SWAP_THRESHOLD_PERCENT controls the minimum percentage
of free swap imposed by proactive kills.

Bug: 249601646
Test: adb shell device_config put activity_manager low_swap_threshold_percent 0.50
Test: adb shell device_config get activity_manager low_swap_threshold_percent
Change-Id: Ieadd31efc677b43ce008a3b26726b565e9f497ab
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
This commit is contained in:
Kalesh Singh
2022-11-11 11:48:01 -08:00
parent b3be3d5bea
commit 09138ccf3d
2 changed files with 23 additions and 1 deletions

View File

@@ -253,6 +253,13 @@ final class ActivityManagerConstants extends ContentObserver {
*/
private static final String KEY_PROACTIVE_KILLS_ENABLED = "proactive_kills_enabled";
/**
* Trim LRU cached app when swap falls below this minimum percentage.
*
* Depends on KEY_PROACTIVE_KILLS_ENABLED
*/
private static final String KEY_LOW_SWAP_THRESHOLD_PERCENT = "low_swap_threshold_percent";
/**
* Default value for mFlagBackgroundActivityStartsEnabled if not explicitly set in
* Settings.Global. This allows it to be set experimentally unless it has been
@@ -881,6 +888,8 @@ final class ActivityManagerConstants extends ContentObserver {
private static final boolean DEFAULT_PROACTIVE_KILLS_ENABLED = false;
private static final float DEFAULT_LOW_SWAP_THRESHOLD_PERCENT = 0.10f;
private static final String KEY_MIN_ASSOC_LOG_DURATION = "min_assoc_log_duration";
public static long MIN_ASSOC_LOG_DURATION = DEFAULT_MIN_ASSOC_LOG_DURATION;
@@ -912,6 +921,7 @@ final class ActivityManagerConstants extends ContentObserver {
public static int BINDER_HEAVY_HITTER_AUTO_SAMPLER_BATCHSIZE;
public static float BINDER_HEAVY_HITTER_AUTO_SAMPLER_THRESHOLD;
public static boolean PROACTIVE_KILLS_ENABLED = DEFAULT_PROACTIVE_KILLS_ENABLED;
public static float LOW_SWAP_THRESHOLD_PERCENT = DEFAULT_LOW_SWAP_THRESHOLD_PERCENT;
private final OnPropertiesChangedListener mOnDeviceConfigChangedListener =
new OnPropertiesChangedListener() {
@@ -1051,6 +1061,9 @@ final class ActivityManagerConstants extends ContentObserver {
case KEY_PROACTIVE_KILLS_ENABLED:
updateProactiveKillsEnabled();
break;
case KEY_LOW_SWAP_THRESHOLD_PERCENT:
updateLowSwapThresholdPercent();
break;
default:
break;
}
@@ -1678,6 +1691,13 @@ final class ActivityManagerConstants extends ContentObserver {
DEFAULT_PROACTIVE_KILLS_ENABLED);
}
private void updateLowSwapThresholdPercent() {
LOW_SWAP_THRESHOLD_PERCENT = DeviceConfig.getFloat(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_LOW_SWAP_THRESHOLD_PERCENT,
DEFAULT_LOW_SWAP_THRESHOLD_PERCENT);
}
private void updateMinAssocLogDuration() {
MIN_ASSOC_LOG_DURATION = DeviceConfig.getLong(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MIN_ASSOC_LOG_DURATION,
@@ -1880,6 +1900,8 @@ final class ActivityManagerConstants extends ContentObserver {
pw.print("="); pw.println(mMaxServiceConnectionsPerProcess);
pw.print(" "); pw.print(KEY_PROACTIVE_KILLS_ENABLED);
pw.print("="); pw.println(PROACTIVE_KILLS_ENABLED);
pw.print(" "); pw.print(KEY_LOW_SWAP_THRESHOLD_PERCENT);
pw.print("="); pw.println(LOW_SWAP_THRESHOLD_PERCENT);
pw.println();
if (mOverrideMaxCachedProcesses >= 0) {

View File

@@ -1149,7 +1149,7 @@ public class OomAdjuster {
int numTrimming = 0;
boolean proactiveKillsEnabled = mConstants.PROACTIVE_KILLS_ENABLED;
double lowSwapThresholdPercent = 0.10; // TODO: Configure from phenotype
double lowSwapThresholdPercent = mConstants.LOW_SWAP_THRESHOLD_PERCENT;
double freeSwapPercent = proactiveKillsEnabled ? getFreeSwapPercent() : 1.00;
ProcessRecord lruCachedApp = null;