Loading services/core/java/com/android/server/am/ActivityManagerConstants.java +16 −0 Original line number Original line Diff line number Diff line Loading @@ -151,6 +151,7 @@ final class ActivityManagerConstants extends ContentObserver { static final String KEY_USE_TIERED_CACHED_ADJ = "use_tiered_cached_adj"; 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_TIERED_CACHED_ADJ_DECAY_TIME = "tiered_cached_adj_decay_time"; static final String KEY_USE_MODERN_TRIM = "use_modern_trim"; private static final int DEFAULT_MAX_CACHED_PROCESSES = 1024; private static final int DEFAULT_MAX_CACHED_PROCESSES = 1024; private static final boolean DEFAULT_PRIORITIZE_ALARM_BROADCASTS = true; private static final boolean DEFAULT_PRIORITIZE_ALARM_BROADCASTS = true; Loading Loading @@ -212,6 +213,8 @@ final class ActivityManagerConstants extends ContentObserver { private static final boolean DEFAULT_USE_TIERED_CACHED_ADJ = false; 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 long DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME = 60 * 1000; private static final boolean DEFAULT_USE_MODERN_TRIM = false; /** /** * Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED} * Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED} */ */ Loading Loading @@ -1052,6 +1055,9 @@ final class ActivityManagerConstants extends ContentObserver { /** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */ /** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */ public long TIERED_CACHED_ADJ_DECAY_TIME = DEFAULT_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; private final OnPropertiesChangedListener mOnDeviceConfigChangedListener = private final OnPropertiesChangedListener mOnDeviceConfigChangedListener = new OnPropertiesChangedListener() { new OnPropertiesChangedListener() { @Override @Override Loading Loading @@ -1227,6 +1233,9 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_TIERED_CACHED_ADJ_DECAY_TIME: case KEY_TIERED_CACHED_ADJ_DECAY_TIME: updateUseTieredCachedAdj(); updateUseTieredCachedAdj(); break; break; case KEY_USE_MODERN_TRIM: updateUseModernTrim(); break; default: default: updateFGSPermissionEnforcementFlagsIfNecessary(name); updateFGSPermissionEnforcementFlagsIfNecessary(name); break; break; Loading Loading @@ -1997,6 +2006,13 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME); 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 updateFGSPermissionEnforcementFlagsIfNecessary(@NonNull String name) { private void updateFGSPermissionEnforcementFlagsIfNecessary(@NonNull String name) { ForegroundServiceTypePolicy.getDefaultPolicy() ForegroundServiceTypePolicy.getDefaultPolicy() .updatePermissionEnforcementFlagIfNecessary(name); .updatePermissionEnforcementFlagIfNecessary(name); Loading services/core/java/com/android/server/am/AppProfiler.java +31 −0 Original line number Original line Diff line number Diff line Loading @@ -1005,6 +1005,37 @@ public class AppProfiler { mBgHandler.obtainMessage(BgHandler.MEMORY_PRESSURE_CHANGED, mLastMemoryLevel, memFactor) mBgHandler.obtainMessage(BgHandler.MEMORY_PRESSURE_CHANGED, mLastMemoryLevel, memFactor) .sendToTarget(); .sendToTarget(); } } 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) { } } } }); return false; } mLastMemoryLevel = memFactor; mLastMemoryLevel = memFactor; mLastNumProcesses = mService.mProcessList.getLruSizeLOSP(); mLastNumProcesses = mService.mProcessList.getLruSizeLOSP(); boolean allChanged; boolean allChanged; Loading services/core/java/com/android/server/am/CachedAppOptimizer.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.am; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_FROZEN; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_FROZEN; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_UNFROZEN; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_UNFROZEN; import static android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; Loading @@ -27,12 +28,14 @@ import android.annotation.IntDef; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.ActivityThread; import android.app.ApplicationExitInfo; import android.app.ApplicationExitInfo; import android.app.IApplicationThread; import android.database.ContentObserver; import android.database.ContentObserver; import android.net.Uri; import android.net.Uri; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; import android.os.PowerManagerInternal; import android.os.PowerManagerInternal; import android.os.Process; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemClock; import android.os.Trace; import android.os.Trace; import android.provider.DeviceConfig; import android.provider.DeviceConfig; Loading Loading @@ -1231,6 +1234,17 @@ public final class CachedAppOptimizer { return; return; } } if (mAm.mConstants.USE_MODERN_TRIM && app.mState.getSetAdj() >= ProcessList.CACHED_APP_MIN_ADJ) { final IApplicationThread thread = app.getThread(); if (thread != null) { try { thread.scheduleTrimMemory(TRIM_MEMORY_BACKGROUND); } catch (RemoteException e) { // do nothing } } } mFreezeHandler.sendMessageDelayed( mFreezeHandler.sendMessageDelayed( mFreezeHandler.obtainMessage( mFreezeHandler.obtainMessage( SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app), SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app), Loading Loading
services/core/java/com/android/server/am/ActivityManagerConstants.java +16 −0 Original line number Original line Diff line number Diff line Loading @@ -151,6 +151,7 @@ final class ActivityManagerConstants extends ContentObserver { static final String KEY_USE_TIERED_CACHED_ADJ = "use_tiered_cached_adj"; 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_TIERED_CACHED_ADJ_DECAY_TIME = "tiered_cached_adj_decay_time"; static final String KEY_USE_MODERN_TRIM = "use_modern_trim"; private static final int DEFAULT_MAX_CACHED_PROCESSES = 1024; private static final int DEFAULT_MAX_CACHED_PROCESSES = 1024; private static final boolean DEFAULT_PRIORITIZE_ALARM_BROADCASTS = true; private static final boolean DEFAULT_PRIORITIZE_ALARM_BROADCASTS = true; Loading Loading @@ -212,6 +213,8 @@ final class ActivityManagerConstants extends ContentObserver { private static final boolean DEFAULT_USE_TIERED_CACHED_ADJ = false; 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 long DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME = 60 * 1000; private static final boolean DEFAULT_USE_MODERN_TRIM = false; /** /** * Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED} * Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED} */ */ Loading Loading @@ -1052,6 +1055,9 @@ final class ActivityManagerConstants extends ContentObserver { /** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */ /** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */ public long TIERED_CACHED_ADJ_DECAY_TIME = DEFAULT_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; private final OnPropertiesChangedListener mOnDeviceConfigChangedListener = private final OnPropertiesChangedListener mOnDeviceConfigChangedListener = new OnPropertiesChangedListener() { new OnPropertiesChangedListener() { @Override @Override Loading Loading @@ -1227,6 +1233,9 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_TIERED_CACHED_ADJ_DECAY_TIME: case KEY_TIERED_CACHED_ADJ_DECAY_TIME: updateUseTieredCachedAdj(); updateUseTieredCachedAdj(); break; break; case KEY_USE_MODERN_TRIM: updateUseModernTrim(); break; default: default: updateFGSPermissionEnforcementFlagsIfNecessary(name); updateFGSPermissionEnforcementFlagsIfNecessary(name); break; break; Loading Loading @@ -1997,6 +2006,13 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME); 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 updateFGSPermissionEnforcementFlagsIfNecessary(@NonNull String name) { private void updateFGSPermissionEnforcementFlagsIfNecessary(@NonNull String name) { ForegroundServiceTypePolicy.getDefaultPolicy() ForegroundServiceTypePolicy.getDefaultPolicy() .updatePermissionEnforcementFlagIfNecessary(name); .updatePermissionEnforcementFlagIfNecessary(name); Loading
services/core/java/com/android/server/am/AppProfiler.java +31 −0 Original line number Original line Diff line number Diff line Loading @@ -1005,6 +1005,37 @@ public class AppProfiler { mBgHandler.obtainMessage(BgHandler.MEMORY_PRESSURE_CHANGED, mLastMemoryLevel, memFactor) mBgHandler.obtainMessage(BgHandler.MEMORY_PRESSURE_CHANGED, mLastMemoryLevel, memFactor) .sendToTarget(); .sendToTarget(); } } 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) { } } } }); return false; } mLastMemoryLevel = memFactor; mLastMemoryLevel = memFactor; mLastNumProcesses = mService.mProcessList.getLruSizeLOSP(); mLastNumProcesses = mService.mProcessList.getLruSizeLOSP(); boolean allChanged; boolean allChanged; Loading
services/core/java/com/android/server/am/CachedAppOptimizer.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.am; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_FROZEN; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_FROZEN; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_UNFROZEN; import static android.app.ActivityManager.UidFrozenStateChangedCallback.UID_FROZEN_STATE_UNFROZEN; import static android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_COMPACTION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FREEZER; Loading @@ -27,12 +28,14 @@ import android.annotation.IntDef; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.ActivityThread; import android.app.ApplicationExitInfo; import android.app.ApplicationExitInfo; import android.app.IApplicationThread; import android.database.ContentObserver; import android.database.ContentObserver; import android.net.Uri; import android.net.Uri; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; import android.os.PowerManagerInternal; import android.os.PowerManagerInternal; import android.os.Process; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemClock; import android.os.Trace; import android.os.Trace; import android.provider.DeviceConfig; import android.provider.DeviceConfig; Loading Loading @@ -1231,6 +1234,17 @@ public final class CachedAppOptimizer { return; return; } } if (mAm.mConstants.USE_MODERN_TRIM && app.mState.getSetAdj() >= ProcessList.CACHED_APP_MIN_ADJ) { final IApplicationThread thread = app.getThread(); if (thread != null) { try { thread.scheduleTrimMemory(TRIM_MEMORY_BACKGROUND); } catch (RemoteException e) { // do nothing } } } mFreezeHandler.sendMessageDelayed( mFreezeHandler.sendMessageDelayed( mFreezeHandler.obtainMessage( mFreezeHandler.obtainMessage( SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app), SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app), Loading