Loading core/java/android/app/ActivityManagerInternal.java +5 −0 Original line number Diff line number Diff line Loading @@ -683,6 +683,11 @@ public abstract class ActivityManagerInternal { */ public abstract @TempAllowListType int getPushMessagingOverQuotaBehavior(); /** * Return the startForeground() grace period after calling startForegroundService(). */ public abstract int getServiceStartForegroundTimeout(); /** * Returns the capability of the given uid */ Loading services/core/java/com/android/server/am/ActiveServices.java +17 −10 Original line number Diff line number Diff line Loading @@ -203,10 +203,6 @@ public final class ActiveServices { // How long we wait for a service to finish executing. static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10; // How long the startForegroundService() grace period is to get around to // calling startForeground() before we ANR + stop it. static final int SERVICE_START_FOREGROUND_TIMEOUT = 10 * 1000 * Build.HW_TIMEOUT_MULTIPLIER; // Foreground service types that always get immediate notification display, // expressed in the same bitmask format that ServiceRecord.foregroundServiceType // uses. Loading Loading @@ -4240,7 +4236,7 @@ public final class ActiveServices { + " for fg-service launch"); } mAm.tempAllowlistUidLocked(r.appInfo.uid, SERVICE_START_FOREGROUND_TIMEOUT, REASON_SERVICE_LAUNCH, mAm.mConstants.mServiceStartForegroundTimeoutMs, REASON_SERVICE_LAUNCH, "fg-service-launch", TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED, r.mRecentCallingUid); Loading Loading @@ -5713,10 +5709,21 @@ public final class ActiveServices { } if (app != null) { mAm.mAnrHelper.appNotResponding(app, "Context.startForegroundService() did not then call Service.startForeground(): " + r); final String annotation = "Context.startForegroundService() did not then call " + "Service.startForeground(): " + r; Message msg = mAm.mHandler.obtainMessage( ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_ANR_MSG); SomeArgs args = SomeArgs.obtain(); args.arg1 = app; args.arg2 = annotation; msg.obj = args; mAm.mHandler.sendMessageDelayed(msg, mAm.mConstants.mServiceStartForegroundAnrDelayMs); } } void serviceForegroundTimeoutANR(ProcessRecord app, String annotation) { mAm.mAnrHelper.appNotResponding(app, annotation); } public void updateServiceApplicationInfoLocked(ApplicationInfo applicationInfo) { Loading @@ -5739,7 +5746,7 @@ public final class ActiveServices { ComponentName service) { mAm.crashApplicationWithTypeWithExtras( app.uid, app.getPid(), app.info.packageName, app.userId, "Context.startForegroundService() did not then call Service.startForeground(): " "Context.startForegroundService() did not then call " + "Service.startForeground(): " + serviceRecord, false /*force*/, ForegroundServiceDidNotStartInTimeException.TYPE_ID, ForegroundServiceDidNotStartInTimeException.createExtrasForService(service)); Loading @@ -5764,7 +5771,7 @@ public final class ActiveServices { ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_MSG); msg.obj = r; r.fgWaiting = true; mAm.mHandler.sendMessageDelayed(msg, SERVICE_START_FOREGROUND_TIMEOUT); mAm.mHandler.sendMessageDelayed(msg, mAm.mConstants.mServiceStartForegroundTimeoutMs); } final class ServiceDumper { Loading services/core/java/com/android/server/am/ActivityManagerConstants.java +49 −2 Original line number Diff line number Diff line Loading @@ -219,6 +219,10 @@ final class ActivityManagerConstants extends ContentObserver { DEFER_BOOT_COMPLETED_BROADCAST_BACKGROUND_RESTRICTED_ONLY | DEFER_BOOT_COMPLETED_BROADCAST_TARGET_T_ONLY; private static final int DEFAULT_SERVICE_START_FOREGROUND_TIMEOUT_MS = 30 * 1000; private static final int DEFAULT_SERVICE_START_FOREGROUND_ANR_DELAY_MS = 10 * 1000; // Flag stored in the DeviceConfig API. /** * Maximum number of cached processes. Loading Loading @@ -311,6 +315,12 @@ final class ActivityManagerConstants extends ContentObserver { private static final String KEY_DEFER_BOOT_COMPLETED_BROADCAST = "defer_boot_completed_broadcast"; private static final String KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS = "service_start_foreground_timeout_ms"; private static final String KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS = "service_start_foreground_anr_delay_ms"; // Maximum number of cached processes we will allow. public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES; Loading Loading @@ -630,6 +640,19 @@ final class ActivityManagerConstants extends ContentObserver { volatile @BroadcastConstants.DeferBootCompletedBroadcastType int mDeferBootCompletedBroadcast = DEFAULT_DEFER_BOOT_COMPLETED_BROADCAST; /** * How long the Context.startForegroundService() grace period is to get around to * calling Service.startForeground() before we generate ANR. */ volatile int mServiceStartForegroundTimeoutMs = DEFAULT_SERVICE_START_FOREGROUND_TIMEOUT_MS; /** * How long from Service.startForeground() timed-out to when we generate ANR of the user app. * This delay is after the timeout {@link #mServiceStartForegroundTimeoutMs}. */ volatile int mServiceStartForegroundAnrDelayMs = DEFAULT_SERVICE_START_FOREGROUND_ANR_DELAY_MS; /** * Defines component aliases. Format * ComponentName ":" ComponentName ( "," ComponentName ":" ComponentName )* Loading Loading @@ -913,6 +936,12 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_DEFER_BOOT_COMPLETED_BROADCAST: updateDeferBootCompletedBroadcast(); break; case KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS: updateServiceStartForegroundTimeoutMs(); break; case KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS: updateServiceStartForegroundAnrDealyMs(); break; case KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED: updateNoKillCachedProcessesUntilBootCompleted(); break; Loading Loading @@ -1389,6 +1418,20 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_MAX_EMPTY_TIME_MILLIS); } private void updateServiceStartForegroundTimeoutMs() { mServiceStartForegroundTimeoutMs = DeviceConfig.getInt( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS, DEFAULT_SERVICE_START_FOREGROUND_TIMEOUT_MS); } private void updateServiceStartForegroundAnrDealyMs() { mServiceStartForegroundAnrDelayMs = DeviceConfig.getInt( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS, DEFAULT_SERVICE_START_FOREGROUND_ANR_DELAY_MS); } private long[] parseLongArray(@NonNull String key, @NonNull long[] def) { final String val = DeviceConfig.getString(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, key, null); Loading Loading @@ -1669,6 +1712,10 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(mNoKillCachedProcessesPostBootCompletedDurationMillis); pw.print(" "); pw.print(KEY_MAX_EMPTY_TIME_MILLIS); pw.print("="); pw.println(mMaxEmptyTimeMillis); pw.print(" "); pw.print(KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS); pw.print("="); pw.println(mServiceStartForegroundTimeoutMs); pw.print(" "); pw.print(KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS); pw.print("="); pw.println(mServiceStartForegroundAnrDelayMs); pw.println(); if (mOverrideMaxCachedProcesses >= 0) { Loading services/core/java/com/android/server/am/ActivityManagerService.java +12 −0 Original line number Diff line number Diff line Loading @@ -1536,6 +1536,7 @@ public class ActivityManagerService extends IActivityManager.Stub static final int IDLE_UIDS_MSG = 58; static final int HANDLE_TRUST_STORAGE_UPDATE_MSG = 63; static final int SERVICE_FOREGROUND_TIMEOUT_MSG = 66; static final int SERVICE_FOREGROUND_TIMEOUT_ANR_MSG = 67; static final int PUSH_TEMP_ALLOWLIST_UI_MSG = 68; static final int SERVICE_FOREGROUND_CRASH_MSG = 69; static final int DISPATCH_OOM_ADJ_OBSERVER_MSG = 70; Loading Loading @@ -1724,6 +1725,12 @@ public class ActivityManagerService extends IActivityManager.Stub case SERVICE_FOREGROUND_TIMEOUT_MSG: { mServices.serviceForegroundTimeout((ServiceRecord) msg.obj); } break; case SERVICE_FOREGROUND_TIMEOUT_ANR_MSG: { SomeArgs args = (SomeArgs) msg.obj; mServices.serviceForegroundTimeoutANR((ProcessRecord) args.arg1, (String) args.arg2); args.recycle(); } break; case SERVICE_FOREGROUND_CRASH_MSG: { SomeArgs args = (SomeArgs) msg.obj; mServices.serviceForegroundCrash( Loading Loading @@ -17361,6 +17368,11 @@ public class ActivityManagerService extends IActivityManager.Stub } } @Override public int getServiceStartForegroundTimeout() { return mConstants.mServiceStartForegroundTimeoutMs; } @Override public int getUidCapability(int uid) { synchronized (ActivityManagerService.this) { services/core/java/com/android/server/am/BaseAppStateTracker.java +1 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.am; import static com.android.server.am.ActiveServices.SERVICE_START_FOREGROUND_TIMEOUT; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading Loading @@ -362,7 +361,7 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { } long getServiceStartForegroundTimeout() { return SERVICE_START_FOREGROUND_TIMEOUT; return mActivityManagerInternal.getServiceStartForegroundTimeout(); } RoleManager getRoleManager() { Loading Loading
core/java/android/app/ActivityManagerInternal.java +5 −0 Original line number Diff line number Diff line Loading @@ -683,6 +683,11 @@ public abstract class ActivityManagerInternal { */ public abstract @TempAllowListType int getPushMessagingOverQuotaBehavior(); /** * Return the startForeground() grace period after calling startForegroundService(). */ public abstract int getServiceStartForegroundTimeout(); /** * Returns the capability of the given uid */ Loading
services/core/java/com/android/server/am/ActiveServices.java +17 −10 Original line number Diff line number Diff line Loading @@ -203,10 +203,6 @@ public final class ActiveServices { // How long we wait for a service to finish executing. static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10; // How long the startForegroundService() grace period is to get around to // calling startForeground() before we ANR + stop it. static final int SERVICE_START_FOREGROUND_TIMEOUT = 10 * 1000 * Build.HW_TIMEOUT_MULTIPLIER; // Foreground service types that always get immediate notification display, // expressed in the same bitmask format that ServiceRecord.foregroundServiceType // uses. Loading Loading @@ -4240,7 +4236,7 @@ public final class ActiveServices { + " for fg-service launch"); } mAm.tempAllowlistUidLocked(r.appInfo.uid, SERVICE_START_FOREGROUND_TIMEOUT, REASON_SERVICE_LAUNCH, mAm.mConstants.mServiceStartForegroundTimeoutMs, REASON_SERVICE_LAUNCH, "fg-service-launch", TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED, r.mRecentCallingUid); Loading Loading @@ -5713,10 +5709,21 @@ public final class ActiveServices { } if (app != null) { mAm.mAnrHelper.appNotResponding(app, "Context.startForegroundService() did not then call Service.startForeground(): " + r); final String annotation = "Context.startForegroundService() did not then call " + "Service.startForeground(): " + r; Message msg = mAm.mHandler.obtainMessage( ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_ANR_MSG); SomeArgs args = SomeArgs.obtain(); args.arg1 = app; args.arg2 = annotation; msg.obj = args; mAm.mHandler.sendMessageDelayed(msg, mAm.mConstants.mServiceStartForegroundAnrDelayMs); } } void serviceForegroundTimeoutANR(ProcessRecord app, String annotation) { mAm.mAnrHelper.appNotResponding(app, annotation); } public void updateServiceApplicationInfoLocked(ApplicationInfo applicationInfo) { Loading @@ -5739,7 +5746,7 @@ public final class ActiveServices { ComponentName service) { mAm.crashApplicationWithTypeWithExtras( app.uid, app.getPid(), app.info.packageName, app.userId, "Context.startForegroundService() did not then call Service.startForeground(): " "Context.startForegroundService() did not then call " + "Service.startForeground(): " + serviceRecord, false /*force*/, ForegroundServiceDidNotStartInTimeException.TYPE_ID, ForegroundServiceDidNotStartInTimeException.createExtrasForService(service)); Loading @@ -5764,7 +5771,7 @@ public final class ActiveServices { ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_MSG); msg.obj = r; r.fgWaiting = true; mAm.mHandler.sendMessageDelayed(msg, SERVICE_START_FOREGROUND_TIMEOUT); mAm.mHandler.sendMessageDelayed(msg, mAm.mConstants.mServiceStartForegroundTimeoutMs); } final class ServiceDumper { Loading
services/core/java/com/android/server/am/ActivityManagerConstants.java +49 −2 Original line number Diff line number Diff line Loading @@ -219,6 +219,10 @@ final class ActivityManagerConstants extends ContentObserver { DEFER_BOOT_COMPLETED_BROADCAST_BACKGROUND_RESTRICTED_ONLY | DEFER_BOOT_COMPLETED_BROADCAST_TARGET_T_ONLY; private static final int DEFAULT_SERVICE_START_FOREGROUND_TIMEOUT_MS = 30 * 1000; private static final int DEFAULT_SERVICE_START_FOREGROUND_ANR_DELAY_MS = 10 * 1000; // Flag stored in the DeviceConfig API. /** * Maximum number of cached processes. Loading Loading @@ -311,6 +315,12 @@ final class ActivityManagerConstants extends ContentObserver { private static final String KEY_DEFER_BOOT_COMPLETED_BROADCAST = "defer_boot_completed_broadcast"; private static final String KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS = "service_start_foreground_timeout_ms"; private static final String KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS = "service_start_foreground_anr_delay_ms"; // Maximum number of cached processes we will allow. public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES; Loading Loading @@ -630,6 +640,19 @@ final class ActivityManagerConstants extends ContentObserver { volatile @BroadcastConstants.DeferBootCompletedBroadcastType int mDeferBootCompletedBroadcast = DEFAULT_DEFER_BOOT_COMPLETED_BROADCAST; /** * How long the Context.startForegroundService() grace period is to get around to * calling Service.startForeground() before we generate ANR. */ volatile int mServiceStartForegroundTimeoutMs = DEFAULT_SERVICE_START_FOREGROUND_TIMEOUT_MS; /** * How long from Service.startForeground() timed-out to when we generate ANR of the user app. * This delay is after the timeout {@link #mServiceStartForegroundTimeoutMs}. */ volatile int mServiceStartForegroundAnrDelayMs = DEFAULT_SERVICE_START_FOREGROUND_ANR_DELAY_MS; /** * Defines component aliases. Format * ComponentName ":" ComponentName ( "," ComponentName ":" ComponentName )* Loading Loading @@ -913,6 +936,12 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_DEFER_BOOT_COMPLETED_BROADCAST: updateDeferBootCompletedBroadcast(); break; case KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS: updateServiceStartForegroundTimeoutMs(); break; case KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS: updateServiceStartForegroundAnrDealyMs(); break; case KEY_NO_KILL_CACHED_PROCESSES_UNTIL_BOOT_COMPLETED: updateNoKillCachedProcessesUntilBootCompleted(); break; Loading Loading @@ -1389,6 +1418,20 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_MAX_EMPTY_TIME_MILLIS); } private void updateServiceStartForegroundTimeoutMs() { mServiceStartForegroundTimeoutMs = DeviceConfig.getInt( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS, DEFAULT_SERVICE_START_FOREGROUND_TIMEOUT_MS); } private void updateServiceStartForegroundAnrDealyMs() { mServiceStartForegroundAnrDelayMs = DeviceConfig.getInt( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS, DEFAULT_SERVICE_START_FOREGROUND_ANR_DELAY_MS); } private long[] parseLongArray(@NonNull String key, @NonNull long[] def) { final String val = DeviceConfig.getString(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, key, null); Loading Loading @@ -1669,6 +1712,10 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(mNoKillCachedProcessesPostBootCompletedDurationMillis); pw.print(" "); pw.print(KEY_MAX_EMPTY_TIME_MILLIS); pw.print("="); pw.println(mMaxEmptyTimeMillis); pw.print(" "); pw.print(KEY_SERVICE_START_FOREGROUND_TIMEOUT_MS); pw.print("="); pw.println(mServiceStartForegroundTimeoutMs); pw.print(" "); pw.print(KEY_SERVICE_START_FOREGROUND_ANR_DELAY_MS); pw.print("="); pw.println(mServiceStartForegroundAnrDelayMs); pw.println(); if (mOverrideMaxCachedProcesses >= 0) { Loading
services/core/java/com/android/server/am/ActivityManagerService.java +12 −0 Original line number Diff line number Diff line Loading @@ -1536,6 +1536,7 @@ public class ActivityManagerService extends IActivityManager.Stub static final int IDLE_UIDS_MSG = 58; static final int HANDLE_TRUST_STORAGE_UPDATE_MSG = 63; static final int SERVICE_FOREGROUND_TIMEOUT_MSG = 66; static final int SERVICE_FOREGROUND_TIMEOUT_ANR_MSG = 67; static final int PUSH_TEMP_ALLOWLIST_UI_MSG = 68; static final int SERVICE_FOREGROUND_CRASH_MSG = 69; static final int DISPATCH_OOM_ADJ_OBSERVER_MSG = 70; Loading Loading @@ -1724,6 +1725,12 @@ public class ActivityManagerService extends IActivityManager.Stub case SERVICE_FOREGROUND_TIMEOUT_MSG: { mServices.serviceForegroundTimeout((ServiceRecord) msg.obj); } break; case SERVICE_FOREGROUND_TIMEOUT_ANR_MSG: { SomeArgs args = (SomeArgs) msg.obj; mServices.serviceForegroundTimeoutANR((ProcessRecord) args.arg1, (String) args.arg2); args.recycle(); } break; case SERVICE_FOREGROUND_CRASH_MSG: { SomeArgs args = (SomeArgs) msg.obj; mServices.serviceForegroundCrash( Loading Loading @@ -17361,6 +17368,11 @@ public class ActivityManagerService extends IActivityManager.Stub } } @Override public int getServiceStartForegroundTimeout() { return mConstants.mServiceStartForegroundTimeoutMs; } @Override public int getUidCapability(int uid) { synchronized (ActivityManagerService.this) {
services/core/java/com/android/server/am/BaseAppStateTracker.java +1 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.am; import static com.android.server.am.ActiveServices.SERVICE_START_FOREGROUND_TIMEOUT; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading Loading @@ -362,7 +361,7 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { } long getServiceStartForegroundTimeout() { return SERVICE_START_FOREGROUND_TIMEOUT; return mActivityManagerInternal.getServiceStartForegroundTimeout(); } RoleManager getRoleManager() { Loading