Add settings to toggle the phantom process monitoring in dev options
For power users, the monitoring on phantom processes could be turned off from the Settings->Developer Options->Feature flags. Bug: 210353231 Bug: 205156966 Test: Manual Test: atest AppChildProcessTest Test: atest CtsAppTestCases:ActivityManagerTest Change-Id: I05f5b43e281b98676c615d350c213620d3d72b5c Merged-In: I05f5b43e281b98676c615d350c213620d3d72b5c
This commit is contained in:
@@ -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 {
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
@@ -14301,9 +14305,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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
@@ -1821,7 +1825,7 @@ public class AppProfiler {
|
||||
}
|
||||
}
|
||||
|
||||
if (haveNewCpuStats) {
|
||||
if (monitorPhantomProcs && haveNewCpuStats) {
|
||||
mService.mPhantomProcessList.updateProcessCpuStatesLocked(mProcessCpuTracker);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user