summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shai Barack <shayba@google.com> 2024-03-20 05:07:36 +0000
committer Shai Barack <shayba@google.com> 2024-03-22 22:48:43 +0000
commit720fad99ab513fe5d04fe131d482116b6e65533d (patch)
tree1a3ff6a4515471ad4345a7e6cb9f1a4374e943b5
parent513cf02d3d9e20c75e1d6fda881e41953a41d936 (diff)
Remove legacy memory trim code
Modern trim is here to stay. Bug: 253914117 Bug: 329427668 Change-Id: I24c0c7a6ae7452cf8b5989e8997e549e312b370f
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerConstants.java16
-rw-r--r--services/core/java/com/android/server/am/AppProfiler.java131
-rw-r--r--services/core/java/com/android/server/am/CachedAppOptimizer.java3
-rw-r--r--services/core/java/com/android/server/am/OomAdjuster.java11
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java2
5 files changed, 32 insertions, 131 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index 272e84b80870..f7ed702f1044 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -163,7 +163,6 @@ final class ActivityManagerConstants extends ContentObserver {
static final String KEY_USE_TIERED_CACHED_ADJ = "use_tiered_cached_adj";
static final String KEY_TIERED_CACHED_ADJ_DECAY_TIME = "tiered_cached_adj_decay_time";
- static final String KEY_USE_MODERN_TRIM = "use_modern_trim";
/**
* Whether or not to enable the new oom adjuster implementation.
@@ -239,8 +238,6 @@ final class ActivityManagerConstants extends ContentObserver {
private static final boolean DEFAULT_USE_TIERED_CACHED_ADJ = false;
private static final long DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME = 60 * 1000;
- private static final boolean DEFAULT_USE_MODERN_TRIM = true;
-
/**
* The default value to {@link #KEY_ENABLE_NEW_OOMADJ}.
*/
@@ -1136,9 +1133,6 @@ final class ActivityManagerConstants extends ContentObserver {
/** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */
public long TIERED_CACHED_ADJ_DECAY_TIME = DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME;
- /** @see #KEY_USE_MODERN_TRIM */
- public boolean USE_MODERN_TRIM = DEFAULT_USE_MODERN_TRIM;
-
/** @see #KEY_ENABLE_NEW_OOMADJ */
public boolean ENABLE_NEW_OOMADJ = DEFAULT_ENABLE_NEW_OOM_ADJ;
@@ -1343,9 +1337,6 @@ final class ActivityManagerConstants extends ContentObserver {
case KEY_TIERED_CACHED_ADJ_DECAY_TIME:
updateUseTieredCachedAdj();
break;
- case KEY_USE_MODERN_TRIM:
- updateUseModernTrim();
- break;
case KEY_DISABLE_APP_PROFILER_PSS_PROFILING:
updateDisableAppProfilerPssProfiling();
break;
@@ -2233,13 +2224,6 @@ final class ActivityManagerConstants extends ContentObserver {
DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME);
}
- private void updateUseModernTrim() {
- USE_MODERN_TRIM = DeviceConfig.getBoolean(
- DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
- KEY_USE_MODERN_TRIM,
- DEFAULT_USE_MODERN_TRIM);
- }
-
private void updateEnableNewOomAdj() {
ENABLE_NEW_OOMADJ = DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT,
diff --git a/services/core/java/com/android/server/am/AppProfiler.java b/services/core/java/com/android/server/am/AppProfiler.java
index 48daef801245..51aae771542e 100644
--- a/services/core/java/com/android/server/am/AppProfiler.java
+++ b/services/core/java/com/android/server/am/AppProfiler.java
@@ -1357,7 +1357,7 @@ public class AppProfiler {
}
@GuardedBy({"mService", "mProcLock"})
- boolean updateLowMemStateLSP(int numCached, int numEmpty, int numTrimming, long now) {
+ void updateLowMemStateLSP(int numCached, int numEmpty, int numTrimming, long now) {
int memFactor;
if (mLowMemDetector != null && mLowMemDetector.isAvailable()) {
memFactor = mLowMemDetector.getMemFactor();
@@ -1422,114 +1422,37 @@ public class AppProfiler {
mLastMemoryLevel = memFactor;
mLastNumProcesses = mService.mProcessList.getLruSizeLOSP();
- if (mService.mConstants.USE_MODERN_TRIM) {
- // Modern trim is not sent based on lowmem state
- // Dispatch UI_HIDDEN to processes that need it
- mService.mProcessList.forEachLruProcessesLOSP(true, app -> {
- final ProcessProfileRecord profile = app.mProfile;
- final IApplicationThread thread;
- final ProcessStateRecord state = app.mState;
- if (state.hasProcStateChanged()) {
- state.setProcStateChanged(false);
- }
- int procState = app.mState.getCurProcState();
- if (((procState >= ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
- && procState < ActivityManager.PROCESS_STATE_CACHED_ACTIVITY)
- || app.mState.isSystemNoUi()) && app.mProfile.hasPendingUiClean()) {
- // If this application is now in the background and it
- // had done UI, then give it the special trim level to
- // have it free UI resources.
- if ((thread = app.getThread()) != null) {
- try {
- thread.scheduleTrimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
- app.mProfile.setPendingUiClean(false);
- } catch (RemoteException e) {
- }
+ // Dispatch UI_HIDDEN to processes that need it
+ mService.mProcessList.forEachLruProcessesLOSP(
+ true,
+ app -> {
+ final ProcessProfileRecord profile = app.mProfile;
+ final IApplicationThread thread;
+ final ProcessStateRecord state = app.mState;
+ if (state.hasProcStateChanged()) {
+ state.setProcStateChanged(false);
}
- }
- });
- return false;
- }
+ int procState = app.mState.getCurProcState();
+ if (((procState >= ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
+ && procState
+ < ActivityManager.PROCESS_STATE_CACHED_ACTIVITY)
+ || app.mState.isSystemNoUi())
+ && app.mProfile.hasPendingUiClean()) {
+ // If this application is now in the background and it
+ // had done UI, then give it the special trim level to
+ // have it free UI resources.
+ if ((thread = app.getThread()) != null) {
+ try {
+ thread.scheduleTrimMemory(
+ ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN);
+ app.mProfile.setPendingUiClean(false);
+ } catch (RemoteException e) {
- if (memFactor != ADJ_MEM_FACTOR_NORMAL) {
- if (mLowRamStartTime == 0) {
- mLowRamStartTime = now;
- }
- int fgTrimLevel;
- switch (memFactor) {
- case ADJ_MEM_FACTOR_CRITICAL:
- fgTrimLevel = ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL;
- break;
- case ADJ_MEM_FACTOR_LOW:
- fgTrimLevel = ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW;
- break;
- default:
- fgTrimLevel = ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE;
- break;
- }
- int factor = numTrimming / 3;
- int minFactor = 2;
- if (mHasHomeProcess) minFactor++;
- if (mHasPreviousProcess) minFactor++;
- if (factor < minFactor) factor = minFactor;
- final int actualFactor = factor;
- final int[] step = {0};
- final int[] curLevel = {ComponentCallbacks2.TRIM_MEMORY_COMPLETE};
- mService.mProcessList.forEachLruProcessesLOSP(true, app -> {
- final ProcessProfileRecord profile = app.mProfile;
- final int trimMemoryLevel = profile.getTrimMemoryLevel();
- final ProcessStateRecord state = app.mState;
- final int curProcState = state.getCurProcState();
- IApplicationThread thread;
- if (allChanged || state.hasProcStateChanged()) {
- mService.setProcessTrackerStateLOSP(app, trackerMemFactor);
- state.setProcStateChanged(false);
- }
- trimMemoryUiHiddenIfNecessaryLSP(app);
- if (curProcState >= ActivityManager.PROCESS_STATE_HOME && !app.isKilledByAm()) {
- scheduleTrimMemoryLSP(app, curLevel[0], "Trimming memory of ");
- profile.setTrimMemoryLevel(curLevel[0]);
- step[0]++;
- if (step[0] >= actualFactor) {
- step[0] = 0;
- switch (curLevel[0]) {
- case ComponentCallbacks2.TRIM_MEMORY_COMPLETE:
- curLevel[0] = ComponentCallbacks2.TRIM_MEMORY_MODERATE;
- break;
- case ComponentCallbacks2.TRIM_MEMORY_MODERATE:
- curLevel[0] = ComponentCallbacks2.TRIM_MEMORY_BACKGROUND;
- break;
+ }
}
}
- } else if (curProcState == ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
- && !app.isKilledByAm()) {
- scheduleTrimMemoryLSP(app, ComponentCallbacks2.TRIM_MEMORY_BACKGROUND,
- "Trimming memory of heavy-weight ");
- profile.setTrimMemoryLevel(ComponentCallbacks2.TRIM_MEMORY_BACKGROUND);
- } else {
- scheduleTrimMemoryLSP(app, fgTrimLevel, "Trimming memory of fg ");
- profile.setTrimMemoryLevel(fgTrimLevel);
- }
- });
- } else {
- if (mLowRamStartTime != 0) {
- mLowRamTimeSinceLastIdle += now - mLowRamStartTime;
- mLowRamStartTime = 0;
- }
- mService.mProcessList.forEachLruProcessesLOSP(true, app -> {
- final ProcessProfileRecord profile = app.mProfile;
- final IApplicationThread thread;
- final ProcessStateRecord state = app.mState;
- if (allChanged || state.hasProcStateChanged()) {
- mService.setProcessTrackerStateLOSP(app, trackerMemFactor);
- state.setProcStateChanged(false);
- }
- trimMemoryUiHiddenIfNecessaryLSP(app);
- profile.setTrimMemoryLevel(0);
- });
- }
- return allChanged;
+ });
}
@GuardedBy({"mService", "mProcLock"})
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index 6e20f6cc877d..de27bc708ffd 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -1461,8 +1461,7 @@ public final class CachedAppOptimizer {
return;
}
- if (mAm.mConstants.USE_MODERN_TRIM
- && app.mState.getSetAdj() >= ProcessList.CACHED_APP_MIN_ADJ) {
+ if (app.mState.getSetAdj() >= ProcessList.CACHED_APP_MIN_ADJ) {
final IApplicationThread thread = app.getThread();
if (thread != null) {
try {
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 1a7629f3182d..5e91cd39b698 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -1090,7 +1090,7 @@ public class OomAdjuster {
mNumNonCachedProcs = 0;
mNumCachedHiddenProcs = 0;
- final boolean allChanged = updateAndTrimProcessLSP(now, nowElapsed, oldTime, activeUids,
+ updateAndTrimProcessLSP(now, nowElapsed, oldTime, activeUids,
oomAdjReason, doingAll);
mNumServiceProcs = mNewNumServiceProcs;
@@ -1100,11 +1100,6 @@ public class OomAdjuster {
mService.mAtmInternal.scheduleDestroyAllActivities("always-finish");
}
- if (allChanged) {
- mService.mAppProfiler.requestPssAllProcsLPr(now, false,
- mService.mProcessStats.isMemFactorLowered());
- }
-
updateUidsLSP(activeUids, nowElapsed);
synchronized (mService.mProcessStats.mLock) {
@@ -1300,7 +1295,7 @@ public class OomAdjuster {
}
@GuardedBy({"mService", "mProcLock"})
- private boolean updateAndTrimProcessLSP(final long now, final long nowElapsed,
+ private void updateAndTrimProcessLSP(final long now, final long nowElapsed,
final long oldTime, final ActiveUids activeUids, @OomAdjReason int oomAdjReason,
boolean doingAll) {
ArrayList<ProcessRecord> lruList = mProcessList.getLruProcessesLOSP();
@@ -1450,7 +1445,7 @@ public class OomAdjuster {
mLastFreeSwapPercent = freeSwapPercent;
- return mService.mAppProfiler.updateLowMemStateLSP(numCached, numEmpty, numTrimming, now);
+ mService.mAppProfiler.updateLowMemStateLSP(numCached, numEmpty, numTrimming, now);
}
@GuardedBy({"mService", "mProcLock"})
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java
index 680ab1634cb2..daa827eacf44 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java
@@ -186,7 +186,7 @@ public final class ServiceBindingOomAdjPolicyTest {
doReturn(true).when(mAms.mOomAdjuster.mCachedAppOptimizer).useFreezer();
doNothing().when(mAms.mOomAdjuster.mCachedAppOptimizer).freezeAppAsyncAtEarliestLSP(
any());
- doReturn(false).when(mAms.mAppProfiler).updateLowMemStateLSP(anyInt(), anyInt(),
+ doNothing().when(mAms.mAppProfiler).updateLowMemStateLSP(anyInt(), anyInt(),
anyInt(), anyLong());
mCurrentCallingUid = TEST_APP1_UID;