summaryrefslogtreecommitdiff
path: root/apex
diff options
context:
space:
mode:
author Xin Guan <guanxin@google.com> 2025-02-28 17:28:38 +0000
committer Xin Guan <guanxin@google.com> 2025-03-03 18:31:59 -0800
commit921ba5d72676b88862b20caaf1080f11227c23d3 (patch)
treeecc40ee2858366aae3c31991f3641940fb160bdf /apex
parentbdf3b1899553ec9db650bfe1ddb89f1e82fef3a3 (diff)
JobScheduler: Make the background job delay configurable
Bug: 397772554 Test: MANUAL dumpsys jobscheduler Flag: EXEMPT code refactor Change-Id: Ie4fdce3cd09a19073bebf4811456d3d87eded58e
Diffstat (limited to 'apex')
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/controllers/DeviceIdleJobsController.java34
1 files changed, 32 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);