From f3a2227b2433eb31bcc21a912ebede020f7d1db3 Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Wed, 2 Feb 2022 17:58:21 +0000 Subject: [PATCH] Limit min runtime for downgraded EJs. All jobs with HIGH or MAX priority should have reduced execution timeouts, including downgraded expedited jobs. Bug: 142272435 Test: atest FrameworksMockingServicesTests:JobSchedulerServiceTest Change-Id: I131206fbfa0b58bedbe912b02e44a90ef1e49596 --- .../server/job/JobSchedulerService.java | 2 +- .../server/job/JobSchedulerServiceTest.java | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) 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 f098e10ef020d..cea19451f005e 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -2768,7 +2768,7 @@ public class JobSchedulerService extends com.android.server.SystemService return job.getEffectiveStandbyBucket() != RESTRICTED_INDEX ? mConstants.RUNTIME_MIN_EJ_GUARANTEE_MS : Math.min(mConstants.RUNTIME_MIN_EJ_GUARANTEE_MS, 5 * MINUTE_IN_MILLIS); - } else if (job.getEffectivePriority() == JobInfo.PRIORITY_HIGH) { + } else if (job.getEffectivePriority() >= JobInfo.PRIORITY_HIGH) { return mConstants.RUNTIME_MIN_HIGH_PRIORITY_GUARANTEE_MS; } else { return mConstants.RUNTIME_MIN_GUARANTEE_MS; 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 bdeb2b4fd839e..f9bdad6c62ba0 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java @@ -204,6 +204,49 @@ public class JobSchedulerServiceTest { jobInfoBuilder.build(), callingUid, "com.android.test", 0, testTag); } + @Test + public void testGetMinJobExecutionGuaranteeMs() { + JobStatus ejMax = createJobStatus("testGetMinJobExecutionGuaranteeMs", + createJobInfo(1).setExpedited(true)); + JobStatus ejHigh = createJobStatus("testGetMinJobExecutionGuaranteeMs", + createJobInfo(2).setExpedited(true).setPriority(JobInfo.PRIORITY_HIGH)); + JobStatus ejMaxDowngraded = createJobStatus("testGetMinJobExecutionGuaranteeMs", + createJobInfo(3).setExpedited(true)); + JobStatus ejHighDowngraded = createJobStatus("testGetMinJobExecutionGuaranteeMs", + createJobInfo(4).setExpedited(true).setPriority(JobInfo.PRIORITY_HIGH)); + JobStatus jobHigh = createJobStatus("testGetMinJobExecutionGuaranteeMs", + createJobInfo(5).setPriority(JobInfo.PRIORITY_HIGH)); + JobStatus jobDef = createJobStatus("testGetMinJobExecutionGuaranteeMs", + createJobInfo(6)); + + spyOn(ejMax); + spyOn(ejHigh); + spyOn(ejMaxDowngraded); + spyOn(ejHighDowngraded); + spyOn(jobHigh); + spyOn(jobDef); + + when(ejMax.shouldTreatAsExpeditedJob()).thenReturn(true); + when(ejHigh.shouldTreatAsExpeditedJob()).thenReturn(true); + when(ejMaxDowngraded.shouldTreatAsExpeditedJob()).thenReturn(false); + when(ejHighDowngraded.shouldTreatAsExpeditedJob()).thenReturn(false); + when(jobHigh.shouldTreatAsExpeditedJob()).thenReturn(false); + when(jobDef.shouldTreatAsExpeditedJob()).thenReturn(false); + + assertEquals(mService.mConstants.RUNTIME_MIN_EJ_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(ejMax)); + assertEquals(mService.mConstants.RUNTIME_MIN_EJ_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(ejHigh)); + assertEquals(mService.mConstants.RUNTIME_MIN_HIGH_PRIORITY_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(ejMaxDowngraded)); + assertEquals(mService.mConstants.RUNTIME_MIN_HIGH_PRIORITY_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(ejHighDowngraded)); + assertEquals(mService.mConstants.RUNTIME_MIN_HIGH_PRIORITY_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(jobHigh)); + assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(jobDef)); + } + /** * Confirm that {@link JobSchedulerService#getRescheduleJobForPeriodic(JobStatus)} returns a job * with the correct delay and deadline constraints if the periodic job is scheduled with the