From 917235f045292a2c6e9f1cb447bc49fc4d510059 Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Tue, 14 Jul 2020 11:30:01 -0700 Subject: [PATCH] Remove TimeController constants. The only flag in TimeController constants is no longer needed, so we don't need the constants infrastructure here. Any new constants we need can make use of the DeviceConfig infrastructure we're adding. Bug: 124466289 Bug: 141645789 Test: atest com.android.server.job.controllers.TimeControllerTest Test: atest CtsJobSchedulerTestCases Test: atest SettingsProviderTest:SettingsBackupTest Change-Id: I15e99617a8afee446839a4212377aa5543776422 --- .../job/controllers/TimeController.java | 111 +----------------- core/java/android/provider/Settings.java | 15 --- .../android/providers/settings/global.proto | 2 +- core/proto/android/server/jobscheduler.proto | 2 +- .../settings/SettingsProtoDumpUtil.java | 3 - .../android/provider/SettingsBackupTest.java | 1 - .../job/controllers/TimeControllerTest.java | 42 ------- 7 files changed, 4 insertions(+), 172 deletions(-) diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java index 361ebe55ccd84..227b8276abe11 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java @@ -18,28 +18,20 @@ package com.android.server.job.controllers; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; -import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AlarmManager; import android.app.AlarmManager.OnAlarmListener; -import android.content.ContentResolver; import android.content.Context; -import android.database.ContentObserver; -import android.net.Uri; -import android.os.Handler; import android.os.Process; import android.os.UserHandle; import android.os.WorkSource; -import android.provider.Settings; import android.util.IndentingPrintWriter; -import android.util.KeyValueListParser; import android.util.Log; import android.util.Slog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.VisibleForTesting; -import com.android.server.job.ConstantsProto; import com.android.server.job.JobSchedulerService; import com.android.server.job.StateControllerProto; @@ -63,9 +55,6 @@ public final class TimeController extends StateController { /** Delay alarm tag for logging purposes */ private final String DELAY_TAG = "*job.delay*"; - private final Handler mHandler; - private final TcConstants mTcConstants; - private long mNextJobExpiredElapsedMillis; private long mNextDelayExpiredElapsedMillis; @@ -81,14 +70,6 @@ public final class TimeController extends StateController { mNextJobExpiredElapsedMillis = Long.MAX_VALUE; mNextDelayExpiredElapsedMillis = Long.MAX_VALUE; mChainedAttributionEnabled = mService.isChainedAttributionEnabled(); - - mHandler = new Handler(mContext.getMainLooper()); - mTcConstants = new TcConstants(mHandler); - } - - @Override - public void onSystemServicesReady() { - mTcConstants.start(mContext.getContentResolver()); } /** @@ -372,8 +353,7 @@ public final class TimeController extends StateController { /** * Set an alarm with the {@link android.app.AlarmManager} for the next time at which a job's * delay will expire. - * This alarm will not wake up the phone if - * {@link TcConstants#USE_NON_WAKEUP_ALARM_FOR_DELAY} is true. + * This alarm will not wake up the phone. */ private void setDelayExpiredAlarmLocked(long alarmTimeElapsedMillis, WorkSource ws) { alarmTimeElapsedMillis = maybeAdjustAlarmTime(alarmTimeElapsedMillis); @@ -381,10 +361,7 @@ public final class TimeController extends StateController { return; } mNextDelayExpiredElapsedMillis = alarmTimeElapsedMillis; - final int alarmType = - mTcConstants.USE_NON_WAKEUP_ALARM_FOR_DELAY - ? AlarmManager.ELAPSED_REALTIME : AlarmManager.ELAPSED_REALTIME_WAKEUP; - updateAlarmWithListenerLocked(DELAY_TAG, alarmType, + updateAlarmWithListenerLocked(DELAY_TAG, AlarmManager.ELAPSED_REALTIME, mNextDelayExpiredListener, mNextDelayExpiredElapsedMillis, ws); } @@ -443,80 +420,6 @@ public final class TimeController extends StateController { } }; - @VisibleForTesting - class TcConstants extends ContentObserver { - private ContentResolver mResolver; - private final KeyValueListParser mParser = new KeyValueListParser(','); - - private static final String KEY_USE_NON_WAKEUP_ALARM_FOR_DELAY = - "use_non_wakeup_delay_alarm"; - - private static final boolean DEFAULT_USE_NON_WAKEUP_ALARM_FOR_DELAY = true; - - /** - * Whether or not TimeController should skip setting wakeup alarms for jobs that aren't - * ready now. - */ - public boolean USE_NON_WAKEUP_ALARM_FOR_DELAY = DEFAULT_USE_NON_WAKEUP_ALARM_FOR_DELAY; - - /** - * Creates a content observer. - * - * @param handler The handler to run {@link #onChange} on, or null if none. - */ - TcConstants(Handler handler) { - super(handler); - } - - private void start(ContentResolver resolver) { - mResolver = resolver; - mResolver.registerContentObserver(Settings.Global.getUriFor( - Settings.Global.JOB_SCHEDULER_TIME_CONTROLLER_CONSTANTS), false, this); - onChange(true, null); - } - - @Override - public void onChange(boolean selfChange, Uri uri) { - final String constants = Settings.Global.getString( - mResolver, Settings.Global.JOB_SCHEDULER_TIME_CONTROLLER_CONSTANTS); - - try { - mParser.setString(constants); - } catch (Exception e) { - // Failed to parse the settings string, log this and move on with defaults. - Slog.e(TAG, "Bad jobscheduler time controller settings", e); - } - - USE_NON_WAKEUP_ALARM_FOR_DELAY = mParser.getBoolean( - KEY_USE_NON_WAKEUP_ALARM_FOR_DELAY, DEFAULT_USE_NON_WAKEUP_ALARM_FOR_DELAY); - // Intentionally not calling checkExpiredDelaysAndResetAlarm() here. There's no need to - // iterate through the entire list again for this constant change. The next delay alarm - // that is set will make use of the new constant value. - } - - private void dump(IndentingPrintWriter pw) { - pw.println(); - pw.println("TimeController:"); - pw.increaseIndent(); - pw.print(KEY_USE_NON_WAKEUP_ALARM_FOR_DELAY, - USE_NON_WAKEUP_ALARM_FOR_DELAY).println(); - pw.decreaseIndent(); - } - - private void dump(ProtoOutputStream proto) { - final long tcToken = proto.start(ConstantsProto.TIME_CONTROLLER); - proto.write(ConstantsProto.TimeController.USE_NON_WAKEUP_ALARM_FOR_DELAY, - USE_NON_WAKEUP_ALARM_FOR_DELAY); - proto.end(tcToken); - } - } - - @VisibleForTesting - @NonNull - TcConstants getTcConstants() { - return mTcConstants; - } - @Override public void dumpControllerStateLocked(IndentingPrintWriter pw, Predicate predicate) { @@ -591,14 +494,4 @@ public final class TimeController extends StateController { proto.end(mToken); proto.end(token); } - - @Override - public void dumpConstants(IndentingPrintWriter pw) { - mTcConstants.dump(pw); - } - - @Override - public void dumpConstants(ProtoOutputStream proto) { - mTcConstants.dump(proto); - } } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index feebb94851678..a53caf0c8cd49 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -11854,21 +11854,6 @@ public final class Settings { public static final String JOB_SCHEDULER_QUOTA_CONTROLLER_CONSTANTS = "job_scheduler_quota_controller_constants"; - /** - * Job scheduler TimeController specific settings. - * This is encoded as a key=value list, separated by commas. Ex: - * - * "skip_not_ready_jobs=true5,other_key=2" - * - *

- * Type: string - * - * @hide - * @see com.android.server.job.JobSchedulerService.Constants - */ - public static final String JOB_SCHEDULER_TIME_CONTROLLER_CONSTANTS = - "job_scheduler_time_controller_constants"; - /** * ShortcutManager specific settings. * This is encoded as a key=value list, separated by commas. Ex: diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto index 9bbe0caa9e98a..ac143ac1a1475 100644 --- a/core/proto/android/providers/settings/global.proto +++ b/core/proto/android/providers/settings/global.proto @@ -508,7 +508,7 @@ message GlobalSettingsProto { optional SettingProto job_scheduler_constants = 66 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto job_scheduler_quota_controller_constants = 149 [ (android.privacy).dest = DEST_AUTOMATIC ]; - optional SettingProto job_scheduler_time_controller_constants = 150 [ (android.privacy).dest = DEST_AUTOMATIC ]; + reserved 150; // job_scheduler_time_controller_constants optional SettingProto keep_profile_in_background = 67 [ (android.privacy).dest = DEST_AUTOMATIC ]; diff --git a/core/proto/android/server/jobscheduler.proto b/core/proto/android/server/jobscheduler.proto index f2f20e3ac12eb..76b7fc028a980 100644 --- a/core/proto/android/server/jobscheduler.proto +++ b/core/proto/android/server/jobscheduler.proto @@ -324,7 +324,7 @@ message ConstantsProto { // ready now. reserved 1; // skip_not_ready_jobs // Whether or not TimeController will use a non-wakeup alarm for delay constraints. - optional bool use_non_wakeup_alarm_for_delay = 2; + reserved 2; // use_non_wakeup_alarm_for_delay } optional TimeController time_controller = 25; diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index a994fdaa45919..1975491b08a7d 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -865,9 +865,6 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Global.JOB_SCHEDULER_QUOTA_CONTROLLER_CONSTANTS, GlobalSettingsProto.JOB_SCHEDULER_QUOTA_CONTROLLER_CONSTANTS); - dumpSetting(s, p, - Settings.Global.JOB_SCHEDULER_TIME_CONTROLLER_CONSTANTS, - GlobalSettingsProto.JOB_SCHEDULER_TIME_CONTROLLER_CONSTANTS); dumpSetting(s, p, Settings.Global.KEEP_PROFILE_IN_BACKGROUND, GlobalSettingsProto.KEEP_PROFILE_IN_BACKGROUND); diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java index b90b9c1208ae5..2f1191a6325ad 100644 --- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java @@ -311,7 +311,6 @@ public class SettingsBackupTest { Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL, Settings.Global.JOB_SCHEDULER_CONSTANTS, Settings.Global.JOB_SCHEDULER_QUOTA_CONTROLLER_CONSTANTS, - Settings.Global.JOB_SCHEDULER_TIME_CONTROLLER_CONSTANTS, Settings.Global.KEEP_PROFILE_IN_BACKGROUND, Settings.Global.KERNEL_CPU_THREAD_READER, Settings.Global.LANG_ID_UPDATE_CONTENT_URL, diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/TimeControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/TimeControllerTest.java index 5d041b7c57575..3614763fecabb 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/TimeControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/TimeControllerTest.java @@ -71,7 +71,6 @@ public class TimeControllerTest { private static final String SOURCE_PACKAGE = "com.android.frameworks.mockingservicestests"; private static final int SOURCE_USER_ID = 0; - private TimeController.TcConstants mConstants; private TimeController mTimeController; private MockitoSession mMockingSession; @@ -111,7 +110,6 @@ public class TimeControllerTest { // Initialize real objects. mTimeController = new TimeController(mJobSchedulerService); - mConstants = mTimeController.getTcConstants(); spyOn(mTimeController); } @@ -529,46 +527,6 @@ public class TimeControllerTest { .set(anyInt(), anyLong(), anyLong(), anyLong(), anyString(), any(), any(), any()); } - @Test - public void testJobDelayWakeupAlarmToggling() { - final long now = JobSchedulerService.sElapsedRealtimeClock.millis(); - - JobStatus job = createJobStatus( - "testMaybeStartTrackingJobLocked_DeadlineReverseOrder", - createJob().setMinimumLatency(HOUR_IN_MILLIS)); - - doReturn(true).when(mTimeController) - .wouldBeReadyWithConstraintLocked(eq(job), anyInt()); - - // Starting off with using a wakeup alarm. - mConstants.USE_NON_WAKEUP_ALARM_FOR_DELAY = false; - InOrder inOrder = inOrder(mAlarmManager); - - mTimeController.maybeStartTrackingJobLocked(job, null); - inOrder.verify(mAlarmManager, times(1)) - .set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), eq(now + HOUR_IN_MILLIS), anyLong(), - anyLong(), - eq(TAG_DELAY), any(), any(), any()); - - // Use a non wakeup alarm. - mConstants.USE_NON_WAKEUP_ALARM_FOR_DELAY = true; - - mTimeController.maybeStartTrackingJobLocked(job, null); - inOrder.verify(mAlarmManager, times(1)) - .set(eq(AlarmManager.ELAPSED_REALTIME), eq(now + HOUR_IN_MILLIS), anyLong(), - anyLong(), eq(TAG_DELAY), - any(), any(), any()); - - // Back off, use a wakeup alarm. - mConstants.USE_NON_WAKEUP_ALARM_FOR_DELAY = false; - - mTimeController.maybeStartTrackingJobLocked(job, null); - inOrder.verify(mAlarmManager, times(1)) - .set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP), eq(now + HOUR_IN_MILLIS), anyLong(), - anyLong(), - eq(TAG_DELAY), any(), any(), any()); - } - @Test public void testCheckExpiredDeadlinesAndResetAlarm_AllReady() { doReturn(true).when(mTimeController).wouldBeReadyWithConstraintLocked(any(), anyInt());