diff options
author | 2025-02-28 17:28:38 +0000 | |
---|---|---|
committer | 2025-03-03 18:31:59 -0800 | |
commit | 921ba5d72676b88862b20caaf1080f11227c23d3 (patch) | |
tree | ecc40ee2858366aae3c31991f3641940fb160bdf | |
parent | bdf3b1899553ec9db650bfe1ddb89f1e82fef3a3 (diff) |
JobScheduler: Make the background job delay configurable
Bug: 397772554
Test: MANUAL dumpsys jobscheduler
Flag: EXEMPT code refactor
Change-Id: Ie4fdce3cd09a19073bebf4811456d3d87eded58e
-rw-r--r-- | apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java | 34 | ||||
-rw-r--r-- | core/res/res/values/config.xml | 4 | ||||
-rw-r--r-- | core/res/res/values/symbols.xml | 1 |
3 files changed, 37 insertions, 2 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java index abec170f3b7d..d52bbc245157 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java @@ -18,6 +18,7 @@ package com.android.server.job.controllers; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; +import android.annotation.NonNull; import android.app.job.JobInfo; import android.content.BroadcastReceiver; import android.content.Context; @@ -28,6 +29,7 @@ import android.os.Looper; import android.os.Message; import android.os.PowerManager; import android.os.UserHandle; +import android.provider.DeviceConfig; import android.util.ArraySet; import android.util.IndentingPrintWriter; import android.util.Log; @@ -56,7 +58,10 @@ public final class DeviceIdleJobsController extends StateController { private static final boolean DEBUG = JobSchedulerService.DEBUG || Log.isLoggable(TAG, Log.DEBUG); - private static final long BACKGROUND_JOBS_DELAY = 3000; + /** Prefix to use with all constant keys in order to "sub-namespace" the keys. */ + private static final String DIJC_CONSTANT_PREFIX = "dijc_"; + private static final String KEY_BACKGROUND_JOBS_DELAY_MS = + DIJC_CONSTANT_PREFIX + "background_jobs_delay_ms"; static final int PROCESS_BACKGROUND_JOBS = 1; @@ -78,6 +83,8 @@ public final class DeviceIdleJobsController extends StateController { private int[] mDeviceIdleWhitelistAppIds; private int[] mPowerSaveTempWhitelistAppIds; + private long mBackgroundJobsDelay; + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -128,6 +135,9 @@ public final class DeviceIdleJobsController extends StateController { public DeviceIdleJobsController(JobSchedulerService service) { super(service); + mBackgroundJobsDelay = mContext.getResources().getInteger( + com.android.internal.R.integer.config_jobSchedulerBackgroundJobsDelay); + mHandler = new DeviceIdleJobsDelayHandler(AppSchedulingModuleThread.get().getLooper()); // Register for device idle mode changes mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); @@ -165,7 +175,7 @@ public final class DeviceIdleJobsController extends StateController { // When coming out of doze, process all foreground uids and EJs immediately, // while others will be processed after a delay of 3 seconds. mService.getJobStore().forEachJob(mShouldRushEvaluation, mDeviceIdleUpdateFunctor); - mHandler.sendEmptyMessageDelayed(PROCESS_BACKGROUND_JOBS, BACKGROUND_JOBS_DELAY); + mHandler.sendEmptyMessageDelayed(PROCESS_BACKGROUND_JOBS, mBackgroundJobsDelay); } } // Inform the job scheduler service about idle mode changes @@ -237,6 +247,26 @@ public final class DeviceIdleJobsController extends StateController { } @Override + public void processConstantLocked(@NonNull DeviceConfig.Properties properties, + @NonNull String key) { + switch (key) { + case KEY_BACKGROUND_JOBS_DELAY_MS: + mBackgroundJobsDelay = Math.max(0, properties.getLong(key, mBackgroundJobsDelay)); + break; + } + } + + @Override + public void dumpConstants(IndentingPrintWriter pw) { + pw.println(); + pw.print(DeviceIdleJobsController.class.getSimpleName()); + pw.println(":"); + pw.increaseIndent(); + pw.print(KEY_BACKGROUND_JOBS_DELAY_MS, mBackgroundJobsDelay).println(); + pw.decreaseIndent(); + } + + @Override public void dumpControllerStateLocked(final IndentingPrintWriter pw, final Predicate<JobStatus> predicate) { pw.println("Idle mode: " + mDeviceIdleMode); diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index fbb8e25eeced..9773f557dfaa 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -4459,6 +4459,10 @@ etc. dialogs. --> <string translatable="false" name="config_appsNotReportingCrashes"></string> + <!-- Specifies the delay in milliseconds for JobScheduler to postpone the running + of regular jobs when coming out of doze --> + <integer name="config_jobSchedulerBackgroundJobsDelay">3000</integer> + <!-- Inactivity threshold (in milliseconds) used in JobScheduler. JobScheduler will consider the device to be "idle" after being inactive for this long. --> <integer name="config_jobSchedulerInactivityIdleThreshold">1860000</integer> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index f5424dbed21a..2b7261b62c64 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3016,6 +3016,7 @@ <java-symbol type="integer" name="config_defaultNightMode" /> + <java-symbol type="integer" name="config_jobSchedulerBackgroundJobsDelay" /> <java-symbol type="integer" name="config_jobSchedulerInactivityIdleThreshold" /> <java-symbol type="integer" name="config_jobSchedulerInactivityIdleThresholdOnStablePower" /> <java-symbol type="integer" name="config_jobSchedulerIdleWindowSlop" /> |