diff options
| author | 2024-03-20 05:07:36 +0000 | |
|---|---|---|
| committer | 2024-03-22 22:48:43 +0000 | |
| commit | 720fad99ab513fe5d04fe131d482116b6e65533d (patch) | |
| tree | 1a3ff6a4515471ad4345a7e6cb9f1a4374e943b5 | |
| parent | 513cf02d3d9e20c75e1d6fda881e41953a41d936 (diff) | |
Remove legacy memory trim code
Modern trim is here to stay.
Bug: 253914117
Bug: 329427668
Change-Id: I24c0c7a6ae7452cf8b5989e8997e549e312b370f
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; |