diff options
4 files changed, 26 insertions, 4 deletions
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index 6c3c38359957..546d6de82935 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -51,6 +51,10 @@ public class FeatureFlagUtils { /** @hide */ public static final String SETTINGS_ENABLE_SECURITY_HUB = "settings_enable_security_hub"; + /** @hide */ + public static final String SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS = + "settings_enable_monitor_phantom_procs"; + private static final Map<String, String> DEFAULT_FLAGS; static { @@ -72,12 +76,14 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put(SETTINGS_PROVIDER_MODEL, "true"); DEFAULT_FLAGS.put(SETTINGS_USE_NEW_BACKUP_ELIGIBILITY_RULES, "true"); DEFAULT_FLAGS.put(SETTINGS_ENABLE_SECURITY_HUB, "true"); + DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true"); } private static final Set<String> PERSISTENT_FLAGS; static { PERSISTENT_FLAGS = new HashSet<>(); PERSISTENT_FLAGS.add(SETTINGS_PROVIDER_MODEL); + PERSISTENT_FLAGS.add(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS); } /** diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3f816c88ae51..92e0829a5024 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -91,6 +91,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; @@ -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; @@ -14246,6 +14248,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(); @@ -14271,9 +14275,11 @@ public class ActivityManagerService extends IActivityManager.Stub updateAppProcessCpuTimeLPr(uptimeSince, doCpuKills, checkDur, cpuLimit, app); - // Also check the phantom processes if there is any - updatePhantomProcessCpuTimeLPr( - uptimeSince, doCpuKills, checkDur, cpuLimit, app); + if (monitorPhantomProcs) { + // Also check the phantom processes if there is any + updatePhantomProcessCpuTimeLPr( + uptimeSince, doCpuKills, checkDur, cpuLimit, app); + } } }); } diff --git a/services/core/java/com/android/server/am/AppProfiler.java b/services/core/java/com/android/server/am/AppProfiler.java index 36c0de919279..1496b30338f8 100644 --- a/services/core/java/com/android/server/am/AppProfiler.java +++ b/services/core/java/com/android/server/am/AppProfiler.java @@ -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; @@ -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; @@ -1792,6 +1794,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(); @@ -1830,7 +1834,7 @@ public class AppProfiler { } } - if (haveNewCpuStats) { + if (monitorPhantomProcs && haveNewCpuStats) { mService.mPhantomProcessList.updateProcessCpuStatesLocked(mProcessCpuTracker); } diff --git a/services/core/java/com/android/server/am/PhantomProcessList.java b/services/core/java/com/android/server/am/PhantomProcessList.java index b07684c9a004..2ec1aedd18f9 100644 --- a/services/core/java/com/android/server/am/PhantomProcessList.java +++ b/services/core/java/com/android/server/am/PhantomProcessList.java @@ -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; @@ -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; @@ -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; |