Loading services/core/java/com/android/server/AlarmManagerService.java +0 −22 Original line number Diff line number Diff line Loading @@ -245,8 +245,6 @@ class AlarmManagerService extends SystemService { private static final long DEFAULT_LISTENER_TIMEOUT = 5 * 1000; private static final boolean DEFAULT_BACKGROUND_RESTRICTIONS_ENABLED = false; // Minimum futurity of a new alarm public long MIN_FUTURITY = DEFAULT_MIN_FUTURITY; Loading @@ -266,8 +264,6 @@ class AlarmManagerService extends SystemService { // Direct alarm listener callback timeout public long LISTENER_TIMEOUT = DEFAULT_LISTENER_TIMEOUT; public boolean BACKGROUND_ALARMS_BLOCKED = DEFAULT_BACKGROUND_RESTRICTIONS_ENABLED; private ContentResolver mResolver; private final KeyValueListParser mParser = new KeyValueListParser(','); private long mLastAllowWhileIdleWhitelistDuration = -1; Loading Loading @@ -326,21 +322,6 @@ class AlarmManagerService extends SystemService { DEFAULT_ALLOW_WHILE_IDLE_WHITELIST_DURATION); LISTENER_TIMEOUT = mParser.getLong(KEY_LISTENER_TIMEOUT, DEFAULT_LISTENER_TIMEOUT); BACKGROUND_ALARMS_BLOCKED = mParser.getBoolean(KEY_BG_RESTRICTIONS_ENABLED, DEFAULT_BACKGROUND_RESTRICTIONS_ENABLED); if (!BACKGROUND_ALARMS_BLOCKED) { // TODO: remove this code and constant when feature is turned on // deliver all blocked alarms final ArrayList<Alarm> allBlockedAlarms = new ArrayList<>(); for (int i = mPendingBackgroundAlarms.size() - 1; i >=0; i--) { allBlockedAlarms.addAll(mPendingBackgroundAlarms.valueAt(i)); } mPendingBackgroundAlarms = new SparseArray<>(); deliverPendingBackgroundAlarmsLocked(allBlockedAlarms, SystemClock.elapsedRealtime()); } else if (DEBUG_BG_LIMIT) { Slog.d(TAG, "Background limiting enabled"); } updateAllowWhileIdleMinTimeLocked(); updateAllowWhileIdleWhitelistDurationLocked(); Loading Loading @@ -2392,9 +2373,6 @@ class AlarmManagerService extends SystemService { } private boolean isBackgroundRestricted(Alarm alarm) { if (!mConstants.BACKGROUND_ALARMS_BLOCKED) { return false; } if (alarm.alarmClock != null) { // Don't block alarm clocks return false; Loading services/core/java/com/android/server/job/JobSchedulerService.java +0 −16 Original line number Diff line number Diff line Loading @@ -228,7 +228,6 @@ public final class JobSchedulerService extends com.android.server.SystemService private static final String KEY_MAX_WORK_RESCHEDULE_COUNT = "max_work_reschedule_count"; private static final String KEY_MIN_LINEAR_BACKOFF_TIME = "min_linear_backoff_time"; private static final String KEY_MIN_EXP_BACKOFF_TIME = "min_exp_backoff_time"; private static final String KEY_BG_JOBS_RESTRICTED = "bg_jobs_restricted"; private static final int DEFAULT_MIN_IDLE_COUNT = 1; private static final int DEFAULT_MIN_CHARGING_COUNT = 1; Loading @@ -244,7 +243,6 @@ public final class JobSchedulerService extends com.android.server.SystemService private static final int DEFAULT_BG_MODERATE_JOB_COUNT = 4; private static final int DEFAULT_BG_LOW_JOB_COUNT = 1; private static final int DEFAULT_BG_CRITICAL_JOB_COUNT = 1; private static final boolean DEFAULT_BG_JOBS_RESTRICTED = false; private static final int DEFAULT_MAX_STANDARD_RESCHEDULE_COUNT = Integer.MAX_VALUE; private static final int DEFAULT_MAX_WORK_RESCHEDULE_COUNT = Integer.MAX_VALUE; private static final long DEFAULT_MIN_LINEAR_BACKOFF_TIME = JobInfo.MIN_BACKOFF_MILLIS; Loading Loading @@ -338,11 +336,6 @@ public final class JobSchedulerService extends com.android.server.SystemService */ long MIN_EXP_BACKOFF_TIME = DEFAULT_MIN_EXP_BACKOFF_TIME; /** * Runtime switch for throttling background jobs */ boolean BACKGROUND_JOBS_RESTRICTED = DEFAULT_BG_JOBS_RESTRICTED; private ContentResolver mResolver; private final KeyValueListParser mParser = new KeyValueListParser(','); Loading Loading @@ -421,12 +414,6 @@ public final class JobSchedulerService extends com.android.server.SystemService DEFAULT_MIN_LINEAR_BACKOFF_TIME); MIN_EXP_BACKOFF_TIME = mParser.getLong(KEY_MIN_EXP_BACKOFF_TIME, DEFAULT_MIN_EXP_BACKOFF_TIME); final boolean bgJobsRestricted = mParser.getBoolean(KEY_BG_JOBS_RESTRICTED, DEFAULT_BG_JOBS_RESTRICTED); if (bgJobsRestricted != BACKGROUND_JOBS_RESTRICTED) { mBackgroundJobsController.enableRestrictionsLocked( BACKGROUND_JOBS_RESTRICTED = bgJobsRestricted); } } } Loading Loading @@ -486,9 +473,6 @@ public final class JobSchedulerService extends com.android.server.SystemService pw.print(" "); pw.print(KEY_MIN_EXP_BACKOFF_TIME); pw.print("="); pw.print(MIN_EXP_BACKOFF_TIME); pw.println(); pw.print(" "); pw.print(KEY_BG_JOBS_RESTRICTED); pw.print("="); pw.print(BACKGROUND_JOBS_RESTRICTED); pw.println(); } } Loading services/core/java/com/android/server/job/controllers/BackgroundJobsController.java +6 −18 Original line number Diff line number Diff line Loading @@ -48,14 +48,12 @@ public final class BackgroundJobsController extends StateController { private static final Object sCreationLock = new Object(); private static volatile BackgroundJobsController sController; /* Runtime switch to keep feature under wraps */ private boolean mEnableSwitch; private final JobSchedulerService mJobSchedulerService; private final IAppOpsService mAppOpsService; private final IDeviceIdleController mDeviceIdleController; private final SparseBooleanArray mForegroundUids; private int[] mPowerWhitelistedAppIds; private int[] mPowerWhitelistedUserAppIds; private int[] mTempWhitelistedAppIds; /** * Only tracks jobs for which source package app op RUN_ANY_IN_BACKGROUND is not ALLOWED. Loading @@ -81,7 +79,8 @@ public final class BackgroundJobsController extends StateController { try { switch (intent.getAction()) { case PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED: mPowerWhitelistedAppIds = mDeviceIdleController.getAppIdWhitelist(); mPowerWhitelistedUserAppIds = mDeviceIdleController.getAppIdUserWhitelist(); break; case PowerManager.ACTION_POWER_SAVE_TEMP_WHITELIST_CHANGED: mTempWhitelistedAppIds = mDeviceIdleController.getAppIdTempWhitelist(); Loading Loading @@ -110,7 +109,7 @@ public final class BackgroundJobsController extends StateController { try { mAppOpsService.startWatchingMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, null, new AppOpsWatcher()); mPowerWhitelistedAppIds = mDeviceIdleController.getAppIdWhitelist(); mPowerWhitelistedUserAppIds = mDeviceIdleController.getAppIdUserWhitelist(); mTempWhitelistedAppIds = mDeviceIdleController.getAppIdTempWhitelist(); } catch (RemoteException rexc) { // Shouldn't happen as they are in the same process. Loading @@ -121,8 +120,6 @@ public final class BackgroundJobsController extends StateController { powerWhitelistFilter.addAction(PowerManager.ACTION_POWER_SAVE_TEMP_WHITELIST_CHANGED); context.registerReceiverAsUser(mDozeWhitelistReceiver, UserHandle.ALL, powerWhitelistFilter, null, null); mEnableSwitch = false; } @Override Loading Loading @@ -170,7 +167,6 @@ public final class BackgroundJobsController extends StateController { @Override public void dumpControllerStateLocked(final PrintWriter pw, final int filterUid) { pw.println("Background restrictions: global switch = " + mEnableSwitch); pw.print("Foreground uids: ["); for (int i = 0; i < mForegroundUids.size(); i++) { if (mForegroundUids.valueAt(i)) pw.print(mForegroundUids.keyAt(i) + " "); Loading Loading @@ -206,14 +202,6 @@ public final class BackgroundJobsController extends StateController { }); } public void enableRestrictionsLocked(boolean enable) { mEnableSwitch = enable; Slog.d(LOG_TAG, "Background jobs restrictions switch changed to " + mEnableSwitch); if (checkAllTrackedJobsLocked()) { mStateChangedListener.onControllerStateChanged(); } } void startTrackingJobLocked(JobStatus jobStatus) { final int uid = jobStatus.getSourceUid(); ArraySet<JobStatus> jobsForUid = mTrackedJobs.get(uid); Loading Loading @@ -255,11 +243,11 @@ public final class BackgroundJobsController extends StateController { boolean isWhitelistedLocked(int uid) { return ArrayUtils.contains(mTempWhitelistedAppIds, UserHandle.getAppId(uid)) || ArrayUtils.contains(mPowerWhitelistedAppIds, UserHandle.getAppId(uid)); || ArrayUtils.contains(mPowerWhitelistedUserAppIds, UserHandle.getAppId(uid)); } boolean canRunJobLocked(int uid) { return !mEnableSwitch || mForegroundUids.get(uid) || isWhitelistedLocked(uid); return mForegroundUids.get(uid) || isWhitelistedLocked(uid); } private final class AppOpsWatcher extends IAppOpsCallback.Stub { Loading services/tests/servicestests/src/com/android/server/job/BackgroundRestrictionsTest.java +0 −17 Original line number Diff line number Diff line Loading @@ -116,7 +116,6 @@ public class BackgroundRestrictionsTest { intentFilter.addAction(ACTION_JOB_STARTED); intentFilter.addAction(ACTION_JOB_STOPPED); mContext.registerReceiver(mJobStateChangeReceiver, intentFilter); setGlobalSwitch(true); setAppOpsModeAllowed(true); setPowerWhiteListed(false); } Loading @@ -131,16 +130,6 @@ public class BackgroundRestrictionsTest { assertTrue("Job did not start after scheduling", awaitJobStart(DEFAULT_WAIT_TIMEOUT)); } @Test public void testGlobalSwitch() throws Exception { setGlobalSwitch(false); // Job should not stop now. scheduleAndAssertJobStarted(); setAppOpsModeAllowed(false); mIActivityManager.makePackageIdle(TEST_APP_PACKAGE, UserHandle.USER_CURRENT); assertFalse("Job stopped even when feature switch is off", awaitJobStop(DEFAULT_WAIT_TIMEOUT)); } @Test public void testPowerWhiteList() throws Exception { scheduleAndAssertJobStarted(); Loading @@ -163,16 +152,10 @@ public class BackgroundRestrictionsTest { cancelJobsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(cancelJobsIntent); mContext.unregisterReceiver(mJobStateChangeReceiver); setGlobalSwitch(false); setAppOpsModeAllowed(true); setPowerWhiteListed(false); } private void setGlobalSwitch(boolean enabled) { Settings.Global.putString(mContext.getContentResolver(), Settings.Global.JOB_SCHEDULER_CONSTANTS, "bg_jobs_restricted=" + enabled); } private void setPowerWhiteListed(boolean whitelist) throws RemoteException { if (whitelist) { mDeviceIdleController.addPowerSaveWhitelistApp(TEST_APP_PACKAGE); Loading Loading
services/core/java/com/android/server/AlarmManagerService.java +0 −22 Original line number Diff line number Diff line Loading @@ -245,8 +245,6 @@ class AlarmManagerService extends SystemService { private static final long DEFAULT_LISTENER_TIMEOUT = 5 * 1000; private static final boolean DEFAULT_BACKGROUND_RESTRICTIONS_ENABLED = false; // Minimum futurity of a new alarm public long MIN_FUTURITY = DEFAULT_MIN_FUTURITY; Loading @@ -266,8 +264,6 @@ class AlarmManagerService extends SystemService { // Direct alarm listener callback timeout public long LISTENER_TIMEOUT = DEFAULT_LISTENER_TIMEOUT; public boolean BACKGROUND_ALARMS_BLOCKED = DEFAULT_BACKGROUND_RESTRICTIONS_ENABLED; private ContentResolver mResolver; private final KeyValueListParser mParser = new KeyValueListParser(','); private long mLastAllowWhileIdleWhitelistDuration = -1; Loading Loading @@ -326,21 +322,6 @@ class AlarmManagerService extends SystemService { DEFAULT_ALLOW_WHILE_IDLE_WHITELIST_DURATION); LISTENER_TIMEOUT = mParser.getLong(KEY_LISTENER_TIMEOUT, DEFAULT_LISTENER_TIMEOUT); BACKGROUND_ALARMS_BLOCKED = mParser.getBoolean(KEY_BG_RESTRICTIONS_ENABLED, DEFAULT_BACKGROUND_RESTRICTIONS_ENABLED); if (!BACKGROUND_ALARMS_BLOCKED) { // TODO: remove this code and constant when feature is turned on // deliver all blocked alarms final ArrayList<Alarm> allBlockedAlarms = new ArrayList<>(); for (int i = mPendingBackgroundAlarms.size() - 1; i >=0; i--) { allBlockedAlarms.addAll(mPendingBackgroundAlarms.valueAt(i)); } mPendingBackgroundAlarms = new SparseArray<>(); deliverPendingBackgroundAlarmsLocked(allBlockedAlarms, SystemClock.elapsedRealtime()); } else if (DEBUG_BG_LIMIT) { Slog.d(TAG, "Background limiting enabled"); } updateAllowWhileIdleMinTimeLocked(); updateAllowWhileIdleWhitelistDurationLocked(); Loading Loading @@ -2392,9 +2373,6 @@ class AlarmManagerService extends SystemService { } private boolean isBackgroundRestricted(Alarm alarm) { if (!mConstants.BACKGROUND_ALARMS_BLOCKED) { return false; } if (alarm.alarmClock != null) { // Don't block alarm clocks return false; Loading
services/core/java/com/android/server/job/JobSchedulerService.java +0 −16 Original line number Diff line number Diff line Loading @@ -228,7 +228,6 @@ public final class JobSchedulerService extends com.android.server.SystemService private static final String KEY_MAX_WORK_RESCHEDULE_COUNT = "max_work_reschedule_count"; private static final String KEY_MIN_LINEAR_BACKOFF_TIME = "min_linear_backoff_time"; private static final String KEY_MIN_EXP_BACKOFF_TIME = "min_exp_backoff_time"; private static final String KEY_BG_JOBS_RESTRICTED = "bg_jobs_restricted"; private static final int DEFAULT_MIN_IDLE_COUNT = 1; private static final int DEFAULT_MIN_CHARGING_COUNT = 1; Loading @@ -244,7 +243,6 @@ public final class JobSchedulerService extends com.android.server.SystemService private static final int DEFAULT_BG_MODERATE_JOB_COUNT = 4; private static final int DEFAULT_BG_LOW_JOB_COUNT = 1; private static final int DEFAULT_BG_CRITICAL_JOB_COUNT = 1; private static final boolean DEFAULT_BG_JOBS_RESTRICTED = false; private static final int DEFAULT_MAX_STANDARD_RESCHEDULE_COUNT = Integer.MAX_VALUE; private static final int DEFAULT_MAX_WORK_RESCHEDULE_COUNT = Integer.MAX_VALUE; private static final long DEFAULT_MIN_LINEAR_BACKOFF_TIME = JobInfo.MIN_BACKOFF_MILLIS; Loading Loading @@ -338,11 +336,6 @@ public final class JobSchedulerService extends com.android.server.SystemService */ long MIN_EXP_BACKOFF_TIME = DEFAULT_MIN_EXP_BACKOFF_TIME; /** * Runtime switch for throttling background jobs */ boolean BACKGROUND_JOBS_RESTRICTED = DEFAULT_BG_JOBS_RESTRICTED; private ContentResolver mResolver; private final KeyValueListParser mParser = new KeyValueListParser(','); Loading Loading @@ -421,12 +414,6 @@ public final class JobSchedulerService extends com.android.server.SystemService DEFAULT_MIN_LINEAR_BACKOFF_TIME); MIN_EXP_BACKOFF_TIME = mParser.getLong(KEY_MIN_EXP_BACKOFF_TIME, DEFAULT_MIN_EXP_BACKOFF_TIME); final boolean bgJobsRestricted = mParser.getBoolean(KEY_BG_JOBS_RESTRICTED, DEFAULT_BG_JOBS_RESTRICTED); if (bgJobsRestricted != BACKGROUND_JOBS_RESTRICTED) { mBackgroundJobsController.enableRestrictionsLocked( BACKGROUND_JOBS_RESTRICTED = bgJobsRestricted); } } } Loading Loading @@ -486,9 +473,6 @@ public final class JobSchedulerService extends com.android.server.SystemService pw.print(" "); pw.print(KEY_MIN_EXP_BACKOFF_TIME); pw.print("="); pw.print(MIN_EXP_BACKOFF_TIME); pw.println(); pw.print(" "); pw.print(KEY_BG_JOBS_RESTRICTED); pw.print("="); pw.print(BACKGROUND_JOBS_RESTRICTED); pw.println(); } } Loading
services/core/java/com/android/server/job/controllers/BackgroundJobsController.java +6 −18 Original line number Diff line number Diff line Loading @@ -48,14 +48,12 @@ public final class BackgroundJobsController extends StateController { private static final Object sCreationLock = new Object(); private static volatile BackgroundJobsController sController; /* Runtime switch to keep feature under wraps */ private boolean mEnableSwitch; private final JobSchedulerService mJobSchedulerService; private final IAppOpsService mAppOpsService; private final IDeviceIdleController mDeviceIdleController; private final SparseBooleanArray mForegroundUids; private int[] mPowerWhitelistedAppIds; private int[] mPowerWhitelistedUserAppIds; private int[] mTempWhitelistedAppIds; /** * Only tracks jobs for which source package app op RUN_ANY_IN_BACKGROUND is not ALLOWED. Loading @@ -81,7 +79,8 @@ public final class BackgroundJobsController extends StateController { try { switch (intent.getAction()) { case PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED: mPowerWhitelistedAppIds = mDeviceIdleController.getAppIdWhitelist(); mPowerWhitelistedUserAppIds = mDeviceIdleController.getAppIdUserWhitelist(); break; case PowerManager.ACTION_POWER_SAVE_TEMP_WHITELIST_CHANGED: mTempWhitelistedAppIds = mDeviceIdleController.getAppIdTempWhitelist(); Loading Loading @@ -110,7 +109,7 @@ public final class BackgroundJobsController extends StateController { try { mAppOpsService.startWatchingMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, null, new AppOpsWatcher()); mPowerWhitelistedAppIds = mDeviceIdleController.getAppIdWhitelist(); mPowerWhitelistedUserAppIds = mDeviceIdleController.getAppIdUserWhitelist(); mTempWhitelistedAppIds = mDeviceIdleController.getAppIdTempWhitelist(); } catch (RemoteException rexc) { // Shouldn't happen as they are in the same process. Loading @@ -121,8 +120,6 @@ public final class BackgroundJobsController extends StateController { powerWhitelistFilter.addAction(PowerManager.ACTION_POWER_SAVE_TEMP_WHITELIST_CHANGED); context.registerReceiverAsUser(mDozeWhitelistReceiver, UserHandle.ALL, powerWhitelistFilter, null, null); mEnableSwitch = false; } @Override Loading Loading @@ -170,7 +167,6 @@ public final class BackgroundJobsController extends StateController { @Override public void dumpControllerStateLocked(final PrintWriter pw, final int filterUid) { pw.println("Background restrictions: global switch = " + mEnableSwitch); pw.print("Foreground uids: ["); for (int i = 0; i < mForegroundUids.size(); i++) { if (mForegroundUids.valueAt(i)) pw.print(mForegroundUids.keyAt(i) + " "); Loading Loading @@ -206,14 +202,6 @@ public final class BackgroundJobsController extends StateController { }); } public void enableRestrictionsLocked(boolean enable) { mEnableSwitch = enable; Slog.d(LOG_TAG, "Background jobs restrictions switch changed to " + mEnableSwitch); if (checkAllTrackedJobsLocked()) { mStateChangedListener.onControllerStateChanged(); } } void startTrackingJobLocked(JobStatus jobStatus) { final int uid = jobStatus.getSourceUid(); ArraySet<JobStatus> jobsForUid = mTrackedJobs.get(uid); Loading Loading @@ -255,11 +243,11 @@ public final class BackgroundJobsController extends StateController { boolean isWhitelistedLocked(int uid) { return ArrayUtils.contains(mTempWhitelistedAppIds, UserHandle.getAppId(uid)) || ArrayUtils.contains(mPowerWhitelistedAppIds, UserHandle.getAppId(uid)); || ArrayUtils.contains(mPowerWhitelistedUserAppIds, UserHandle.getAppId(uid)); } boolean canRunJobLocked(int uid) { return !mEnableSwitch || mForegroundUids.get(uid) || isWhitelistedLocked(uid); return mForegroundUids.get(uid) || isWhitelistedLocked(uid); } private final class AppOpsWatcher extends IAppOpsCallback.Stub { Loading
services/tests/servicestests/src/com/android/server/job/BackgroundRestrictionsTest.java +0 −17 Original line number Diff line number Diff line Loading @@ -116,7 +116,6 @@ public class BackgroundRestrictionsTest { intentFilter.addAction(ACTION_JOB_STARTED); intentFilter.addAction(ACTION_JOB_STOPPED); mContext.registerReceiver(mJobStateChangeReceiver, intentFilter); setGlobalSwitch(true); setAppOpsModeAllowed(true); setPowerWhiteListed(false); } Loading @@ -131,16 +130,6 @@ public class BackgroundRestrictionsTest { assertTrue("Job did not start after scheduling", awaitJobStart(DEFAULT_WAIT_TIMEOUT)); } @Test public void testGlobalSwitch() throws Exception { setGlobalSwitch(false); // Job should not stop now. scheduleAndAssertJobStarted(); setAppOpsModeAllowed(false); mIActivityManager.makePackageIdle(TEST_APP_PACKAGE, UserHandle.USER_CURRENT); assertFalse("Job stopped even when feature switch is off", awaitJobStop(DEFAULT_WAIT_TIMEOUT)); } @Test public void testPowerWhiteList() throws Exception { scheduleAndAssertJobStarted(); Loading @@ -163,16 +152,10 @@ public class BackgroundRestrictionsTest { cancelJobsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(cancelJobsIntent); mContext.unregisterReceiver(mJobStateChangeReceiver); setGlobalSwitch(false); setAppOpsModeAllowed(true); setPowerWhiteListed(false); } private void setGlobalSwitch(boolean enabled) { Settings.Global.putString(mContext.getContentResolver(), Settings.Global.JOB_SCHEDULER_CONSTANTS, "bg_jobs_restricted=" + enabled); } private void setPowerWhiteListed(boolean whitelist) throws RemoteException { if (whitelist) { mDeviceIdleController.addPowerSaveWhitelistApp(TEST_APP_PACKAGE); Loading