Disallow long regular jobs in Doze and battery saver.

There are a subset of regular jobs that could run while the device is
dozing or in battery saver. Make sure we don't let those jobs run longer
than their minimum execution guarantee in those states.

Bug: 171305774
Test: atest CtsJobSchedulerTestCases
Change-Id: Ib2aa328225f0a485b3a62b6be6fc26d18e150519
This commit is contained in:
Kweku Adams
2021-02-25 14:14:26 -08:00
parent baba083691
commit d942698ccc

View File

@@ -753,13 +753,22 @@ class JobConcurrencyManager {
return null;
}
// We're over the minimum guaranteed runtime. Stop the job if we're over config limits,
// there are pending jobs that could replace this one, or the device state is not conducive
// to long runs.
if (mPowerManager.isPowerSaveMode()) {
return "battery saver";
}
if (mPowerManager.isDeviceIdleMode()) {
return "deep doze";
}
// Update config in case memory usage has changed significantly.
updateCounterConfigLocked();
@WorkType final int workType = context.getRunningJobWorkType();
// We're over the minimum guaranteed runtime. Stop the job if we're over config limits or
// there are pending jobs that could replace this one.
if (mRunningJobs.size() > mWorkTypeConfig.getMaxTotal()
|| mWorkCountTracker.isOverTypeLimit(workType)) {
return "too many jobs running";
@@ -786,13 +795,6 @@ class JobConcurrencyManager {
return "blocking " + workTypeToString(workType) + " queue";
}
}
if (mPowerManager.isPowerSaveMode()) {
return "battery saver";
}
if (mPowerManager.isDeviceIdleMode()) {
return "deep doze";
}
}
// Easy check. If there are pending jobs of the same work type, then we know that