Merge "Lower EJ execution limit to 10 minutes." into main
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
index 23b36e2..bff4353 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -3859,10 +3859,16 @@
// Only let the app use the higher runtime if it hasn't repeatedly timed out.
final String timeoutTag = job.shouldTreatAsExpeditedJob()
? QUOTA_TRACKER_TIMEOUT_EJ_TAG : QUOTA_TRACKER_TIMEOUT_REG_TAG;
+ // Developers are informed that expedited jobs can be stopped earlier than regular jobs
+ // and so shouldn't use them for long pieces of work. There's little reason to let
+ // them run longer than the normal 10 minutes.
+ final long normalUpperLimitMs = job.shouldTreatAsExpeditedJob()
+ ? mConstants.RUNTIME_MIN_GUARANTEE_MS
+ : mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS;
final long upperLimitMs =
mQuotaTracker.isWithinQuota(job.getTimeoutBlameUserId(),
job.getTimeoutBlamePackageName(), timeoutTag)
- ? mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS
+ ? normalUpperLimitMs
: mConstants.RUNTIME_MIN_GUARANTEE_MS;
return Math.min(upperLimitMs,
mConstants.USE_TARE_POLICY
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
index dd23d9f..e5291d3 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
@@ -577,8 +577,14 @@
JobStatus jobUIDT = createJobStatus("testGetMaxJobExecutionTimeMs",
createJobInfo(10)
.setUserInitiated(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY));
+ JobStatus jobEj = createJobStatus("testGetMaxJobExecutionTimeMs",
+ createJobInfo(2).setExpedited(true));
+ JobStatus jobReg = createJobStatus("testGetMaxJobExecutionTimeMs",
+ createJobInfo(3));
spyOn(jobUIDT);
when(jobUIDT.shouldTreatAsUserInitiatedJob()).thenReturn(true);
+ spyOn(jobEj);
+ when(jobEj.shouldTreatAsExpeditedJob()).thenReturn(true);
QuotaController quotaController = mService.getQuotaController();
spyOn(quotaController);
@@ -595,6 +601,11 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUIDT));
+
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
+ mService.getMaxJobExecutionTimeMs(jobEj));
+ assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ mService.getMaxJobExecutionTimeMs(jobReg));
}
@Test
@@ -636,7 +647,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -649,7 +660,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -664,7 +675,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -677,7 +688,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -692,7 +703,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -705,7 +716,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -720,7 +731,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -765,7 +776,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -778,7 +789,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -792,7 +803,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -807,7 +818,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -820,7 +831,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));
@@ -834,7 +845,7 @@
grantRunUserInitiatedJobsPermission(false);
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobUij));
- assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
+ assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
mService.getMaxJobExecutionTimeMs(jobEj));
assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
mService.getMaxJobExecutionTimeMs(jobReg));