Loading core/java/android/provider/Settings.java +30 −0 Original line number Diff line number Diff line Loading @@ -11955,6 +11955,36 @@ public final class Settings { */ public static final String JOB_SCHEDULER_CONSTANTS = "job_scheduler_constants"; /** * Job scheduler QuotaController specific settings. * This is encoded as a key=value list, separated by commas. Ex: * * "max_job_count_working=5,max_job_count_rare=2" * * <p> * Type: string * * @hide * @see com.android.server.job.JobSchedulerService.Constants */ 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" * * <p> * 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: Loading core/proto/android/providers/settings/global.proto +5 −2 Original line number Diff line number Diff line Loading @@ -501,7 +501,10 @@ message GlobalSettingsProto { } optional IntentFirewall intent_firewall = 65; optional SettingProto job_scheduler_constants = 66; 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 ]; optional SettingProto keep_profile_in_background = 67 [ (android.privacy).dest = DEST_AUTOMATIC ]; message LangId { Loading Loading @@ -1049,5 +1052,5 @@ message GlobalSettingsProto { // Please insert fields in alphabetical order and group them into messages // if possible (to avoid reaching the method limit). // Next tag = 149; // Next tag = 151; } core/tests/coretests/src/android/provider/SettingsBackupTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -294,6 +294,8 @@ public class SettingsBackupTest { Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL, 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, Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +6 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,12 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Global.JOB_SCHEDULER_CONSTANTS, GlobalSettingsProto.JOB_SCHEDULER_CONSTANTS); 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); Loading services/core/java/com/android/server/job/JobSchedulerService.java +17 −243 Original line number Diff line number Diff line Loading @@ -464,32 +464,6 @@ public class JobSchedulerService extends com.android.server.SystemService private static final String KEY_CONN_CONGESTION_DELAY_FRAC = "conn_congestion_delay_frac"; private static final String KEY_CONN_PREFETCH_RELAX_FRAC = "conn_prefetch_relax_frac"; private static final String KEY_USE_HEARTBEATS = "use_heartbeats"; private static final String KEY_TIME_CONTROLLER_SKIP_NOT_READY_JOBS = "tc_skip_not_ready_jobs"; private static final String KEY_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = "qc_allowed_time_per_period_ms"; private static final String KEY_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = "qc_in_quota_buffer_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = "qc_window_size_active_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = "qc_window_size_working_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = "qc_window_size_frequent_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = "qc_window_size_rare_ms"; private static final String KEY_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = "qc_max_execution_time_ms"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = "qc_max_job_count_active"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = "qc_max_job_count_working"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = "qc_max_job_count_frequent"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = "qc_max_job_count_rare"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = "qc_max_count_per_allowed_time"; private static final int DEFAULT_MIN_IDLE_COUNT = 1; private static final int DEFAULT_MIN_CHARGING_COUNT = 1; Loading @@ -511,30 +485,6 @@ public class JobSchedulerService extends com.android.server.SystemService private static final float DEFAULT_CONN_CONGESTION_DELAY_FRAC = 0.5f; private static final float DEFAULT_CONN_PREFETCH_RELAX_FRAC = 0.5f; private static final boolean DEFAULT_USE_HEARTBEATS = false; private static final boolean DEFAULT_TIME_CONTROLLER_SKIP_NOT_READY_JOBS = true; private static final long DEFAULT_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = 10 * 60 * 1000L; // 10 minutes private static final long DEFAULT_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = 30 * 1000L; // 30 seconds private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = 10 * 60 * 1000L; // 10 minutes for ACTIVE -- ACTIVE apps can run jobs at any time private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = 2 * 60 * 60 * 1000L; // 2 hours private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = 8 * 60 * 60 * 1000L; // 8 hours private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = 24 * 60 * 60 * 1000L; // 24 hours private static final long DEFAULT_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = 4 * 60 * 60 * 1000L; // 4 hours private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = 200; // 1200/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = 1200; // 600/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = 1800; // 225/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = 2400; // 100/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = 20; /** * Minimum # of idle jobs that must be ready in order to force the JMS to schedule things Loading Loading @@ -681,97 +631,6 @@ public class JobSchedulerService extends com.android.server.SystemService */ public boolean USE_HEARTBEATS = DEFAULT_USE_HEARTBEATS; /** * Whether or not TimeController should skip setting wakeup alarms for jobs that aren't * ready now. */ public boolean TIME_CONTROLLER_SKIP_NOT_READY_JOBS = DEFAULT_TIME_CONTROLLER_SKIP_NOT_READY_JOBS; /** How much time each app will have to run jobs within their standby bucket window. */ public long QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = DEFAULT_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS; /** * How much time the package should have before transitioning from out-of-quota to in-quota. * This should not affect processing if the package is already in-quota. */ public long QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = DEFAULT_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS; /** * The maximum amount of time an app can have its jobs running within a 24 hour window. */ public long QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = DEFAULT_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE; /** * The maximum number of jobs that can run within the past * {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS}. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME; private final KeyValueListParser mParser = new KeyValueListParser(','); void updateConstantsLocked(String value) { Loading Loading @@ -835,45 +694,6 @@ public class JobSchedulerService extends com.android.server.SystemService CONN_PREFETCH_RELAX_FRAC = mParser.getFloat(KEY_CONN_PREFETCH_RELAX_FRAC, DEFAULT_CONN_PREFETCH_RELAX_FRAC); USE_HEARTBEATS = mParser.getBoolean(KEY_USE_HEARTBEATS, DEFAULT_USE_HEARTBEATS); TIME_CONTROLLER_SKIP_NOT_READY_JOBS = mParser.getBoolean( KEY_TIME_CONTROLLER_SKIP_NOT_READY_JOBS, DEFAULT_TIME_CONTROLLER_SKIP_NOT_READY_JOBS); QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS, DEFAULT_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS); QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS, DEFAULT_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS); QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS); QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS); QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS); QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS); QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS, DEFAULT_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS); QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE); QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING); QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT); QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE); QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME); } void dump(IndentingPrintWriter pw) { Loading Loading @@ -916,37 +736,11 @@ public class JobSchedulerService extends com.android.server.SystemService pw.printPair(KEY_CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC).println(); pw.printPair(KEY_CONN_PREFETCH_RELAX_FRAC, CONN_PREFETCH_RELAX_FRAC).println(); pw.printPair(KEY_USE_HEARTBEATS, USE_HEARTBEATS).println(); pw.printPair(KEY_TIME_CONTROLLER_SKIP_NOT_READY_JOBS, TIME_CONTROLLER_SKIP_NOT_READY_JOBS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS, QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS, QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS, QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS, QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS, QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE, QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING, QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT, QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE, QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME, QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME).println(); pw.decreaseIndent(); } void dump(ProtoOutputStream proto, long fieldId) { final long token = proto.start(fieldId); void dump(ProtoOutputStream proto) { proto.write(ConstantsProto.MIN_IDLE_COUNT, MIN_IDLE_COUNT); proto.write(ConstantsProto.MIN_CHARGING_COUNT, MIN_CHARGING_COUNT); proto.write(ConstantsProto.MIN_BATTERY_NOT_LOW_COUNT, MIN_BATTERY_NOT_LOW_COUNT); Loading Loading @@ -974,40 +768,6 @@ public class JobSchedulerService extends com.android.server.SystemService proto.write(ConstantsProto.CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC); proto.write(ConstantsProto.CONN_PREFETCH_RELAX_FRAC, CONN_PREFETCH_RELAX_FRAC); proto.write(ConstantsProto.USE_HEARTBEATS, USE_HEARTBEATS); final long tcToken = proto.start(ConstantsProto.TIME_CONTROLLER); proto.write(ConstantsProto.TimeController.SKIP_NOT_READY_JOBS, TIME_CONTROLLER_SKIP_NOT_READY_JOBS); proto.end(tcToken); final long qcToken = proto.start(ConstantsProto.QUOTA_CONTROLLER); proto.write(ConstantsProto.QuotaController.ALLOWED_TIME_PER_PERIOD_MS, QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS); proto.write(ConstantsProto.QuotaController.IN_QUOTA_BUFFER_MS, QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS); proto.write(ConstantsProto.QuotaController.ACTIVE_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS); proto.write(ConstantsProto.QuotaController.WORKING_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS); proto.write(ConstantsProto.QuotaController.FREQUENT_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS); proto.write(ConstantsProto.QuotaController.RARE_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS); proto.write(ConstantsProto.QuotaController.MAX_EXECUTION_TIME_MS, QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_ACTIVE, QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_WORKING, QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_FREQUENT, QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_RARE, QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_PER_ALLOWED_TIME, QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME); proto.end(qcToken); proto.end(token); } } Loading Loading @@ -1637,6 +1397,9 @@ public class JobSchedulerService extends com.android.server.SystemService public void onBootPhase(int phase) { if (PHASE_SYSTEM_SERVICES_READY == phase) { mConstantsObserver.start(getContext().getContentResolver()); for (StateController controller : mControllers) { controller.onSystemServicesReady(); } mAppStateTracker = Preconditions.checkNotNull( LocalServices.getService(AppStateTracker.class)); Loading Loading @@ -3448,6 +3211,11 @@ public class JobSchedulerService extends com.android.server.SystemService }; synchronized (mLock) { mConstants.dump(pw); for (StateController controller : mControllers) { pw.increaseIndent(); controller.dumpConstants(pw); pw.decreaseIndent(); } pw.println(); pw.println(" Heartbeat:"); Loading Loading @@ -3638,7 +3406,13 @@ public class JobSchedulerService extends com.android.server.SystemService }; synchronized (mLock) { mConstants.dump(proto, JobSchedulerServiceDumpProto.SETTINGS); final long settingsToken = proto.start(JobSchedulerServiceDumpProto.SETTINGS); mConstants.dump(proto); for (StateController controller : mControllers) { controller.dumpConstants(proto); } proto.end(settingsToken); proto.write(JobSchedulerServiceDumpProto.CURRENT_HEARTBEAT, mHeartbeat); proto.write(JobSchedulerServiceDumpProto.NEXT_HEARTBEAT, mNextBucketHeartbeat[0]); proto.write(JobSchedulerServiceDumpProto.NEXT_HEARTBEAT, mNextBucketHeartbeat[1]); Loading Loading
core/java/android/provider/Settings.java +30 −0 Original line number Diff line number Diff line Loading @@ -11955,6 +11955,36 @@ public final class Settings { */ public static final String JOB_SCHEDULER_CONSTANTS = "job_scheduler_constants"; /** * Job scheduler QuotaController specific settings. * This is encoded as a key=value list, separated by commas. Ex: * * "max_job_count_working=5,max_job_count_rare=2" * * <p> * Type: string * * @hide * @see com.android.server.job.JobSchedulerService.Constants */ 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" * * <p> * 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: Loading
core/proto/android/providers/settings/global.proto +5 −2 Original line number Diff line number Diff line Loading @@ -501,7 +501,10 @@ message GlobalSettingsProto { } optional IntentFirewall intent_firewall = 65; optional SettingProto job_scheduler_constants = 66; 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 ]; optional SettingProto keep_profile_in_background = 67 [ (android.privacy).dest = DEST_AUTOMATIC ]; message LangId { Loading Loading @@ -1049,5 +1052,5 @@ message GlobalSettingsProto { // Please insert fields in alphabetical order and group them into messages // if possible (to avoid reaching the method limit). // Next tag = 149; // Next tag = 151; }
core/tests/coretests/src/android/provider/SettingsBackupTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -294,6 +294,8 @@ public class SettingsBackupTest { Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL, 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, Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +6 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,12 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Global.JOB_SCHEDULER_CONSTANTS, GlobalSettingsProto.JOB_SCHEDULER_CONSTANTS); 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); Loading
services/core/java/com/android/server/job/JobSchedulerService.java +17 −243 Original line number Diff line number Diff line Loading @@ -464,32 +464,6 @@ public class JobSchedulerService extends com.android.server.SystemService private static final String KEY_CONN_CONGESTION_DELAY_FRAC = "conn_congestion_delay_frac"; private static final String KEY_CONN_PREFETCH_RELAX_FRAC = "conn_prefetch_relax_frac"; private static final String KEY_USE_HEARTBEATS = "use_heartbeats"; private static final String KEY_TIME_CONTROLLER_SKIP_NOT_READY_JOBS = "tc_skip_not_ready_jobs"; private static final String KEY_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = "qc_allowed_time_per_period_ms"; private static final String KEY_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = "qc_in_quota_buffer_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = "qc_window_size_active_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = "qc_window_size_working_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = "qc_window_size_frequent_ms"; private static final String KEY_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = "qc_window_size_rare_ms"; private static final String KEY_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = "qc_max_execution_time_ms"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = "qc_max_job_count_active"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = "qc_max_job_count_working"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = "qc_max_job_count_frequent"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = "qc_max_job_count_rare"; private static final String KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = "qc_max_count_per_allowed_time"; private static final int DEFAULT_MIN_IDLE_COUNT = 1; private static final int DEFAULT_MIN_CHARGING_COUNT = 1; Loading @@ -511,30 +485,6 @@ public class JobSchedulerService extends com.android.server.SystemService private static final float DEFAULT_CONN_CONGESTION_DELAY_FRAC = 0.5f; private static final float DEFAULT_CONN_PREFETCH_RELAX_FRAC = 0.5f; private static final boolean DEFAULT_USE_HEARTBEATS = false; private static final boolean DEFAULT_TIME_CONTROLLER_SKIP_NOT_READY_JOBS = true; private static final long DEFAULT_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = 10 * 60 * 1000L; // 10 minutes private static final long DEFAULT_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = 30 * 1000L; // 30 seconds private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = 10 * 60 * 1000L; // 10 minutes for ACTIVE -- ACTIVE apps can run jobs at any time private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = 2 * 60 * 60 * 1000L; // 2 hours private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = 8 * 60 * 60 * 1000L; // 8 hours private static final long DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = 24 * 60 * 60 * 1000L; // 24 hours private static final long DEFAULT_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = 4 * 60 * 60 * 1000L; // 4 hours private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = 200; // 1200/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = 1200; // 600/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = 1800; // 225/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = 2400; // 100/hr private static final int DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = 20; /** * Minimum # of idle jobs that must be ready in order to force the JMS to schedule things Loading Loading @@ -681,97 +631,6 @@ public class JobSchedulerService extends com.android.server.SystemService */ public boolean USE_HEARTBEATS = DEFAULT_USE_HEARTBEATS; /** * Whether or not TimeController should skip setting wakeup alarms for jobs that aren't * ready now. */ public boolean TIME_CONTROLLER_SKIP_NOT_READY_JOBS = DEFAULT_TIME_CONTROLLER_SKIP_NOT_READY_JOBS; /** How much time each app will have to run jobs within their standby bucket window. */ public long QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = DEFAULT_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS; /** * How much time the package should have before transitioning from out-of-quota to in-quota. * This should not affect processing if the package is already in-quota. */ public long QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = DEFAULT_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS; /** * The quota window size of the particular standby bucket. Apps in this standby bucket are * expected to run only {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past * WINDOW_SIZE_MS. */ public long QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS; /** * The maximum amount of time an app can have its jobs running within a 24 hour window. */ public long QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = DEFAULT_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT; /** * The maximum number of jobs an app can run within this particular standby bucket's * window size. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE; /** * The maximum number of jobs that can run within the past * {@link #QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS}. */ public int QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME; private final KeyValueListParser mParser = new KeyValueListParser(','); void updateConstantsLocked(String value) { Loading Loading @@ -835,45 +694,6 @@ public class JobSchedulerService extends com.android.server.SystemService CONN_PREFETCH_RELAX_FRAC = mParser.getFloat(KEY_CONN_PREFETCH_RELAX_FRAC, DEFAULT_CONN_PREFETCH_RELAX_FRAC); USE_HEARTBEATS = mParser.getBoolean(KEY_USE_HEARTBEATS, DEFAULT_USE_HEARTBEATS); TIME_CONTROLLER_SKIP_NOT_READY_JOBS = mParser.getBoolean( KEY_TIME_CONTROLLER_SKIP_NOT_READY_JOBS, DEFAULT_TIME_CONTROLLER_SKIP_NOT_READY_JOBS); QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS, DEFAULT_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS); QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS, DEFAULT_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS); QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS); QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS); QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS); QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS, DEFAULT_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS); QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS = mParser.getDurationMillis( KEY_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS, DEFAULT_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS); QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE); QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING); QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT); QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE); QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME = mParser.getInt( KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME, DEFAULT_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME); } void dump(IndentingPrintWriter pw) { Loading Loading @@ -916,37 +736,11 @@ public class JobSchedulerService extends com.android.server.SystemService pw.printPair(KEY_CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC).println(); pw.printPair(KEY_CONN_PREFETCH_RELAX_FRAC, CONN_PREFETCH_RELAX_FRAC).println(); pw.printPair(KEY_USE_HEARTBEATS, USE_HEARTBEATS).println(); pw.printPair(KEY_TIME_CONTROLLER_SKIP_NOT_READY_JOBS, TIME_CONTROLLER_SKIP_NOT_READY_JOBS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS, QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS, QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS, QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS, QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS, QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE, QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING, QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT, QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE, QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE).println(); pw.printPair(KEY_QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME, QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME).println(); pw.decreaseIndent(); } void dump(ProtoOutputStream proto, long fieldId) { final long token = proto.start(fieldId); void dump(ProtoOutputStream proto) { proto.write(ConstantsProto.MIN_IDLE_COUNT, MIN_IDLE_COUNT); proto.write(ConstantsProto.MIN_CHARGING_COUNT, MIN_CHARGING_COUNT); proto.write(ConstantsProto.MIN_BATTERY_NOT_LOW_COUNT, MIN_BATTERY_NOT_LOW_COUNT); Loading Loading @@ -974,40 +768,6 @@ public class JobSchedulerService extends com.android.server.SystemService proto.write(ConstantsProto.CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC); proto.write(ConstantsProto.CONN_PREFETCH_RELAX_FRAC, CONN_PREFETCH_RELAX_FRAC); proto.write(ConstantsProto.USE_HEARTBEATS, USE_HEARTBEATS); final long tcToken = proto.start(ConstantsProto.TIME_CONTROLLER); proto.write(ConstantsProto.TimeController.SKIP_NOT_READY_JOBS, TIME_CONTROLLER_SKIP_NOT_READY_JOBS); proto.end(tcToken); final long qcToken = proto.start(ConstantsProto.QUOTA_CONTROLLER); proto.write(ConstantsProto.QuotaController.ALLOWED_TIME_PER_PERIOD_MS, QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS); proto.write(ConstantsProto.QuotaController.IN_QUOTA_BUFFER_MS, QUOTA_CONTROLLER_IN_QUOTA_BUFFER_MS); proto.write(ConstantsProto.QuotaController.ACTIVE_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_ACTIVE_MS); proto.write(ConstantsProto.QuotaController.WORKING_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_WORKING_MS); proto.write(ConstantsProto.QuotaController.FREQUENT_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_FREQUENT_MS); proto.write(ConstantsProto.QuotaController.RARE_WINDOW_SIZE_MS, QUOTA_CONTROLLER_WINDOW_SIZE_RARE_MS); proto.write(ConstantsProto.QuotaController.MAX_EXECUTION_TIME_MS, QUOTA_CONTROLLER_MAX_EXECUTION_TIME_MS); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_ACTIVE, QUOTA_CONTROLLER_MAX_JOB_COUNT_ACTIVE); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_WORKING, QUOTA_CONTROLLER_MAX_JOB_COUNT_WORKING); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_FREQUENT, QUOTA_CONTROLLER_MAX_JOB_COUNT_FREQUENT); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_RARE, QUOTA_CONTROLLER_MAX_JOB_COUNT_RARE); proto.write(ConstantsProto.QuotaController.MAX_JOB_COUNT_PER_ALLOWED_TIME, QUOTA_CONTROLLER_MAX_JOB_COUNT_PER_ALLOWED_TIME); proto.end(qcToken); proto.end(token); } } Loading Loading @@ -1637,6 +1397,9 @@ public class JobSchedulerService extends com.android.server.SystemService public void onBootPhase(int phase) { if (PHASE_SYSTEM_SERVICES_READY == phase) { mConstantsObserver.start(getContext().getContentResolver()); for (StateController controller : mControllers) { controller.onSystemServicesReady(); } mAppStateTracker = Preconditions.checkNotNull( LocalServices.getService(AppStateTracker.class)); Loading Loading @@ -3448,6 +3211,11 @@ public class JobSchedulerService extends com.android.server.SystemService }; synchronized (mLock) { mConstants.dump(pw); for (StateController controller : mControllers) { pw.increaseIndent(); controller.dumpConstants(pw); pw.decreaseIndent(); } pw.println(); pw.println(" Heartbeat:"); Loading Loading @@ -3638,7 +3406,13 @@ public class JobSchedulerService extends com.android.server.SystemService }; synchronized (mLock) { mConstants.dump(proto, JobSchedulerServiceDumpProto.SETTINGS); final long settingsToken = proto.start(JobSchedulerServiceDumpProto.SETTINGS); mConstants.dump(proto); for (StateController controller : mControllers) { controller.dumpConstants(proto); } proto.end(settingsToken); proto.write(JobSchedulerServiceDumpProto.CURRENT_HEARTBEAT, mHeartbeat); proto.write(JobSchedulerServiceDumpProto.NEXT_HEARTBEAT, mNextBucketHeartbeat[0]); proto.write(JobSchedulerServiceDumpProto.NEXT_HEARTBEAT, mNextBucketHeartbeat[1]); Loading