Loading core/java/android/util/FeatureFlagUtils.java +6 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,10 @@ public class FeatureFlagUtils { /** @hide */ public static final String SETTINGS_SUPPORT_LARGE_SCREEN = "settings_support_large_screen"; /** @hide */ public static final String SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS = "settings_enable_monitor_phantom_procs"; private static final Map<String, String> DEFAULT_FLAGS; static { Loading @@ -76,6 +80,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_USE_NEW_BACKUP_ELIGIBILITY_RULES, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_SECURITY_HUB, "true"); DEFAULT_FLAGS.put(SETTINGS_SUPPORT_LARGE_SCREEN, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true"); } private static final Set<String> PERSISTENT_FLAGS; Loading @@ -83,6 +88,7 @@ public class FeatureFlagUtils { PERSISTENT_FLAGS = new HashSet<>(); PERSISTENT_FLAGS.add(SETTINGS_PROVIDER_MODEL); PERSISTENT_FLAGS.add(SETTINGS_SUPPORT_LARGE_SCREEN); PERSISTENT_FLAGS.add(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); } /** Loading services/core/java/com/android/server/am/ActivityManagerService.java +9 −3 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ import static android.provider.Settings.Global.DEBUG_APP; import static android.provider.Settings.Global.NETWORK_ACCESS_TIMEOUT_MS; import static android.provider.Settings.Global.WAIT_FOR_DEBUGGER; import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.util.FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; Loading Loading @@ -300,6 +301,7 @@ import android.text.style.SuggestionSpan; import android.util.ArrayMap; import android.util.ArraySet; import android.util.EventLog; import android.util.FeatureFlagUtils; import android.util.IntArray; import android.util.Log; import android.util.Pair; Loading Loading @@ -14276,6 +14278,8 @@ public class ActivityManagerService extends IActivityManager.Stub private void checkExcessivePowerUsage() { updateCpuStatsNow(); final boolean monitorPhantomProcs = mSystemReady && FeatureFlagUtils.isEnabled(mContext, SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); synchronized (mProcLock) { final boolean doCpuKills = mLastPowerCheckUptime != 0; final long curUptime = SystemClock.uptimeMillis(); Loading @@ -14301,10 +14305,12 @@ public class ActivityManagerService extends IActivityManager.Stub updateAppProcessCpuTimeLPr(uptimeSince, doCpuKills, checkDur, cpuLimit, app); if (monitorPhantomProcs) { // Also check the phantom processes if there is any updatePhantomProcessCpuTimeLPr( uptimeSince, doCpuKills, checkDur, cpuLimit, app); } } }); } } services/core/java/com/android/server/am/AppProfiler.java +5 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.am; import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL; import static android.os.Process.FIRST_APPLICATION_UID; import static android.util.FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_CRITICAL; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_LOW; Loading Loading @@ -77,6 +78,7 @@ import android.provider.DeviceConfig.Properties; import android.text.TextUtils; import android.util.ArrayMap; import android.util.DebugUtils; import android.util.FeatureFlagUtils; import android.util.Pair; import android.util.Slog; import android.util.SparseArray; Loading Loading @@ -1783,6 +1785,8 @@ public class AppProfiler { } void updateCpuStatsNow() { final boolean monitorPhantomProcs = mService.mSystemReady && FeatureFlagUtils.isEnabled( mService.mContext, SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); synchronized (mProcessCpuTracker) { mProcessCpuMutexFree.set(false); final long now = SystemClock.uptimeMillis(); Loading Loading @@ -1821,7 +1825,7 @@ public class AppProfiler { } } if (haveNewCpuStats) { if (monitorPhantomProcs && haveNewCpuStats) { mService.mPhantomProcessList.updateProcessCpuStatesLocked(mProcessCpuTracker); } Loading services/core/java/com/android/server/am/PhantomProcessList.java +6 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.am; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_ERROR; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT; import static android.util.FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROCESSES; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; Loading @@ -28,6 +29,7 @@ import android.app.ApplicationExitInfo.SubReason; import android.os.Handler; import android.os.Process; import android.os.StrictMode; import android.util.FeatureFlagUtils; import android.util.Slog; import android.util.SparseArray; Loading Loading @@ -419,6 +421,10 @@ public final class PhantomProcessList { * order of the oom adjs of their parent process. */ void trimPhantomProcessesIfNecessary() { if (!mService.mSystemReady || !FeatureFlagUtils.isEnabled(mService.mContext, SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS)) { return; } synchronized (mService.mProcLock) { synchronized (mLock) { mTrimPhantomProcessScheduled = false; Loading Loading
core/java/android/util/FeatureFlagUtils.java +6 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,10 @@ public class FeatureFlagUtils { /** @hide */ public static final String SETTINGS_SUPPORT_LARGE_SCREEN = "settings_support_large_screen"; /** @hide */ public static final String SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS = "settings_enable_monitor_phantom_procs"; private static final Map<String, String> DEFAULT_FLAGS; static { Loading @@ -76,6 +80,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_USE_NEW_BACKUP_ELIGIBILITY_RULES, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_SECURITY_HUB, "true"); DEFAULT_FLAGS.put(SETTINGS_SUPPORT_LARGE_SCREEN, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true"); } private static final Set<String> PERSISTENT_FLAGS; Loading @@ -83,6 +88,7 @@ public class FeatureFlagUtils { PERSISTENT_FLAGS = new HashSet<>(); PERSISTENT_FLAGS.add(SETTINGS_PROVIDER_MODEL); PERSISTENT_FLAGS.add(SETTINGS_SUPPORT_LARGE_SCREEN); PERSISTENT_FLAGS.add(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); } /** Loading
services/core/java/com/android/server/am/ActivityManagerService.java +9 −3 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ import static android.provider.Settings.Global.DEBUG_APP; import static android.provider.Settings.Global.NETWORK_ACCESS_TIMEOUT_MS; import static android.provider.Settings.Global.WAIT_FOR_DEBUGGER; import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.util.FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; Loading Loading @@ -300,6 +301,7 @@ import android.text.style.SuggestionSpan; import android.util.ArrayMap; import android.util.ArraySet; import android.util.EventLog; import android.util.FeatureFlagUtils; import android.util.IntArray; import android.util.Log; import android.util.Pair; Loading Loading @@ -14276,6 +14278,8 @@ public class ActivityManagerService extends IActivityManager.Stub private void checkExcessivePowerUsage() { updateCpuStatsNow(); final boolean monitorPhantomProcs = mSystemReady && FeatureFlagUtils.isEnabled(mContext, SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); synchronized (mProcLock) { final boolean doCpuKills = mLastPowerCheckUptime != 0; final long curUptime = SystemClock.uptimeMillis(); Loading @@ -14301,10 +14305,12 @@ public class ActivityManagerService extends IActivityManager.Stub updateAppProcessCpuTimeLPr(uptimeSince, doCpuKills, checkDur, cpuLimit, app); if (monitorPhantomProcs) { // Also check the phantom processes if there is any updatePhantomProcessCpuTimeLPr( uptimeSince, doCpuKills, checkDur, cpuLimit, app); } } }); } }
services/core/java/com/android/server/am/AppProfiler.java +5 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.am; import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL; import static android.os.Process.FIRST_APPLICATION_UID; import static android.util.FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_CRITICAL; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_LOW; Loading Loading @@ -77,6 +78,7 @@ import android.provider.DeviceConfig.Properties; import android.text.TextUtils; import android.util.ArrayMap; import android.util.DebugUtils; import android.util.FeatureFlagUtils; import android.util.Pair; import android.util.Slog; import android.util.SparseArray; Loading Loading @@ -1783,6 +1785,8 @@ public class AppProfiler { } void updateCpuStatsNow() { final boolean monitorPhantomProcs = mService.mSystemReady && FeatureFlagUtils.isEnabled( mService.mContext, SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); synchronized (mProcessCpuTracker) { mProcessCpuMutexFree.set(false); final long now = SystemClock.uptimeMillis(); Loading Loading @@ -1821,7 +1825,7 @@ public class AppProfiler { } } if (haveNewCpuStats) { if (monitorPhantomProcs && haveNewCpuStats) { mService.mPhantomProcessList.updateProcessCpuStatesLocked(mProcessCpuTracker); } Loading
services/core/java/com/android/server/am/PhantomProcessList.java +6 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.am; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_ERROR; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT; import static android.util.FeatureFlagUtils.SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROCESSES; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; Loading @@ -28,6 +29,7 @@ import android.app.ApplicationExitInfo.SubReason; import android.os.Handler; import android.os.Process; import android.os.StrictMode; import android.util.FeatureFlagUtils; import android.util.Slog; import android.util.SparseArray; Loading Loading @@ -419,6 +421,10 @@ public final class PhantomProcessList { * order of the oom adjs of their parent process. */ void trimPhantomProcessesIfNecessary() { if (!mService.mSystemReady || !FeatureFlagUtils.isEnabled(mService.mContext, SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS)) { return; } synchronized (mService.mProcLock) { synchronized (mLock) { mTrimPhantomProcessScheduled = false; Loading