diff options
author | 2025-02-28 17:28:38 +0000 | |
---|---|---|
committer | 2025-03-03 18:31:59 -0800 | |
commit | 921ba5d72676b88862b20caaf1080f11227c23d3 (patch) | |
tree | ecc40ee2858366aae3c31991f3641940fb160bdf /apex | |
parent | bdf3b1899553ec9db650bfe1ddb89f1e82fef3a3 (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.java | 34 |
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); |