Merge "Change MIN_CRASH_INTERVAL to 2 minutes, also make customizable"
This commit is contained in:
@@ -89,6 +89,7 @@ final class ActivityManagerConstants extends ContentObserver {
|
||||
static final String KEY_MEMORY_INFO_THROTTLE_TIME = "memory_info_throttle_time";
|
||||
static final String KEY_TOP_TO_FGS_GRACE_DURATION = "top_to_fgs_grace_duration";
|
||||
static final String KEY_PENDINGINTENT_WARNING_THRESHOLD = "pendingintent_warning_threshold";
|
||||
static final String KEY_MIN_CRASH_INTERVAL = "min_crash_interval";
|
||||
|
||||
private static final int DEFAULT_MAX_CACHED_PROCESSES = 32;
|
||||
private static final long DEFAULT_BACKGROUND_SETTLE_TIME = 60*1000;
|
||||
@@ -122,6 +123,8 @@ final class ActivityManagerConstants extends ContentObserver {
|
||||
private static final long DEFAULT_MEMORY_INFO_THROTTLE_TIME = 5*60*1000;
|
||||
private static final long DEFAULT_TOP_TO_FGS_GRACE_DURATION = 15 * 1000;
|
||||
private static final int DEFAULT_PENDINGINTENT_WARNING_THRESHOLD = 2000;
|
||||
private static final int DEFAULT_MIN_CRASH_INTERVAL = 2 * 60 * 1000;
|
||||
|
||||
|
||||
// Flag stored in the DeviceConfig API.
|
||||
/**
|
||||
@@ -281,6 +284,12 @@ final class ActivityManagerConstants extends ContentObserver {
|
||||
// this long.
|
||||
public long TOP_TO_FGS_GRACE_DURATION = DEFAULT_TOP_TO_FGS_GRACE_DURATION;
|
||||
|
||||
/**
|
||||
* The minimum time we allow between crashes, for us to consider this
|
||||
* application to be bad and stop its services and reject broadcasts.
|
||||
*/
|
||||
public static int MIN_CRASH_INTERVAL = DEFAULT_MIN_CRASH_INTERVAL;
|
||||
|
||||
// Indicates whether the activity starts logging is enabled.
|
||||
// Controlled by Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED
|
||||
volatile boolean mFlagActivityStartsLoggingEnabled;
|
||||
@@ -650,6 +659,8 @@ final class ActivityManagerConstants extends ContentObserver {
|
||||
DEFAULT_MEMORY_INFO_THROTTLE_TIME);
|
||||
TOP_TO_FGS_GRACE_DURATION = mParser.getDurationMillis(KEY_TOP_TO_FGS_GRACE_DURATION,
|
||||
DEFAULT_TOP_TO_FGS_GRACE_DURATION);
|
||||
MIN_CRASH_INTERVAL = mParser.getInt(KEY_MIN_CRASH_INTERVAL,
|
||||
DEFAULT_MIN_CRASH_INTERVAL);
|
||||
PENDINGINTENT_WARNING_THRESHOLD = mParser.getInt(KEY_PENDINGINTENT_WARNING_THRESHOLD,
|
||||
DEFAULT_PENDINGINTENT_WARNING_THRESHOLD);
|
||||
|
||||
@@ -866,6 +877,8 @@ final class ActivityManagerConstants extends ContentObserver {
|
||||
pw.println(MEMORY_INFO_THROTTLE_TIME);
|
||||
pw.print(" "); pw.print(KEY_TOP_TO_FGS_GRACE_DURATION); pw.print("=");
|
||||
pw.println(TOP_TO_FGS_GRACE_DURATION);
|
||||
pw.print(" "); pw.print(KEY_MIN_CRASH_INTERVAL); pw.print("=");
|
||||
pw.println(MIN_CRASH_INTERVAL);
|
||||
pw.print(" "); pw.print(KEY_IMPERCEPTIBLE_KILL_EXEMPT_PROC_STATES); pw.print("=");
|
||||
pw.println(Arrays.toString(IMPERCEPTIBLE_KILL_EXEMPT_PROC_STATES.toArray()));
|
||||
pw.print(" "); pw.print(KEY_IMPERCEPTIBLE_KILL_EXEMPT_PACKAGES); pw.print("=");
|
||||
|
||||
@@ -716,7 +716,7 @@ class AppErrors {
|
||||
// back in the pending list.
|
||||
ServiceRecord sr = app.getRunningServiceAt(i);
|
||||
// If the service was restarted a while ago, then reset crash count, else increment it.
|
||||
if (now > sr.restartTime + ProcessList.MIN_CRASH_INTERVAL) {
|
||||
if (now > sr.restartTime + ActivityManagerConstants.MIN_CRASH_INTERVAL) {
|
||||
sr.crashCount = 1;
|
||||
} else {
|
||||
sr.crashCount++;
|
||||
@@ -729,7 +729,7 @@ class AppErrors {
|
||||
}
|
||||
}
|
||||
|
||||
if (crashTime != null && now < crashTime + ProcessList.MIN_CRASH_INTERVAL) {
|
||||
if (crashTime != null && now < crashTime + ActivityManagerConstants.MIN_CRASH_INTERVAL) {
|
||||
// The process crashed again very quickly. If it was a bound foreground service, let's
|
||||
// try to restart again in a while, otherwise the process loses!
|
||||
Slog.w(TAG, "Process " + app.processName
|
||||
@@ -771,7 +771,7 @@ class AppErrors {
|
||||
data.taskId = affectedTaskId;
|
||||
}
|
||||
if (data != null && crashTimePersistent != null
|
||||
&& now < crashTimePersistent + ProcessList.MIN_CRASH_INTERVAL) {
|
||||
&& now < crashTimePersistent + ActivityManagerConstants.MIN_CRASH_INTERVAL) {
|
||||
data.repeating = true;
|
||||
}
|
||||
}
|
||||
@@ -853,7 +853,7 @@ class AppErrors {
|
||||
mAppsNotReportingCrashes.contains(proc.info.packageName);
|
||||
final long now = SystemClock.uptimeMillis();
|
||||
final boolean shouldThottle = crashShowErrorTime != null
|
||||
&& now < crashShowErrorTime + ProcessList.MIN_CRASH_INTERVAL;
|
||||
&& now < crashShowErrorTime + ActivityManagerConstants.MIN_CRASH_INTERVAL;
|
||||
if ((mService.mAtmInternal.canShowErrorDialogs() || showBackground)
|
||||
&& !crashSilenced && !shouldThottle
|
||||
&& (showFirstCrash || showFirstCrashDevOption || data.repeating)) {
|
||||
|
||||
@@ -154,10 +154,6 @@ public final class ProcessList {
|
||||
static final String ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY =
|
||||
"persist.sys.vold_app_data_isolation_enabled";
|
||||
|
||||
// The minimum time we allow between crashes, for us to consider this
|
||||
// application to be bad and stop and its services and reject broadcasts.
|
||||
static final int MIN_CRASH_INTERVAL = 60 * 1000;
|
||||
|
||||
// OOM adjustments for processes in various states:
|
||||
|
||||
// Uninitialized value for any major or minor adj fields
|
||||
@@ -4070,7 +4066,8 @@ public final class ProcessList {
|
||||
boolean enqueueLocked(ProcessRecord app, String reason, int requester) {
|
||||
// Throttle the killing request for potential bad app to avoid cpu thrashing
|
||||
Long last = app.isolated ? null : mLastProcessKillTimes.get(app.processName, app.uid);
|
||||
if (last != null && SystemClock.uptimeMillis() < last + MIN_CRASH_INTERVAL) {
|
||||
if ((last != null) && (SystemClock.uptimeMillis()
|
||||
< (last + ActivityManagerConstants.MIN_CRASH_INTERVAL))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user