diff options
2 files changed, 23 insertions, 0 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java index 251cf5640de7..ebafba52f257 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java @@ -513,6 +513,9 @@ public final class JobStatus { if (latestRunTimeElapsedMillis != NO_LATEST_RUNTIME) { requiredConstraints |= CONSTRAINT_DEADLINE; } + if (job.isPrefetch()) { + requiredConstraints |= CONSTRAINT_PREFETCH; + } boolean exemptedMediaUrisOnly = false; if (job.getTriggerContentUris() != null) { requiredConstraints |= CONSTRAINT_CONTENT_TRIGGER; diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java index 5f9f1b226958..9c833c0e0d1f 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java @@ -24,6 +24,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.inOrder; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; import static com.android.dx.mockito.inline.extended.ExtendedMockito.when; +import static com.android.server.job.JobSchedulerService.FREQUENT_INDEX; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import static com.android.server.job.JobSchedulerService.sSystemClock; @@ -185,12 +186,15 @@ public class PrefetchControllerTest { JobStatus js = JobStatus.createFromJobInfo( jobInfo, callingUid, packageName, SOURCE_USER_ID, testTag); js.serviceInfo = mock(ServiceInfo.class); + js.setStandbyBucket(FREQUENT_INDEX); // Make sure Doze and background-not-restricted don't affect tests. js.setDeviceNotDozingConstraintSatisfied(/* nowElapsed */ sElapsedRealtimeClock.millis(), /* state */ true, /* allowlisted */false); js.setBackgroundNotRestrictedConstraintSatisfied( sElapsedRealtimeClock.millis(), true, false); + js.setQuotaConstraintSatisfied(sElapsedRealtimeClock.millis(), true); js.setTareWealthConstraintSatisfied(sElapsedRealtimeClock.millis(), true); + js.setExpeditedJobQuotaApproved(sElapsedRealtimeClock.millis(), true); js.setExpeditedJobTareApproved(sElapsedRealtimeClock.millis(), true); return js; } @@ -294,6 +298,7 @@ public class PrefetchControllerTest { verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS)) .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); assertFalse(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertFalse(job.isReady()); } @Test @@ -309,6 +314,7 @@ public class PrefetchControllerTest { .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any()); assertTrue(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(job.isReady()); } @Test @@ -331,19 +337,25 @@ public class PrefetchControllerTest { inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)) .onControllerStateChanged(any()); assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobPending.isReady()); assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobRunning.isReady()); setUidBias(uid, JobInfo.BIAS_TOP_APP); // Processing happens on the handler, so wait until we're sure the change has been processed inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)) .onControllerStateChanged(any()); // Already running job should continue but pending job must wait. assertFalse(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertFalse(jobPending.isReady()); assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobRunning.isReady()); setUidBias(uid, JobInfo.BIAS_DEFAULT); inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)) .onControllerStateChanged(any()); assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobPending.isReady()); assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobRunning.isReady()); } @Test @@ -367,11 +379,13 @@ public class PrefetchControllerTest { verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS)) .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); assertFalse(jobNonWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertFalse(jobNonWidget.isReady()); when(appWidgetManager.isBoundWidgetPackage(SOURCE_PACKAGE, SOURCE_USER_ID)) .thenReturn(true); trackJobs(jobWidget); assertTrue(jobWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobWidget.isReady()); } @Test @@ -390,6 +404,7 @@ public class PrefetchControllerTest { .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any()); assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobStatus.isReady()); mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID, SOURCE_PACKAGE, sSystemClock.millis() + 10 * HOUR_IN_MILLIS); @@ -401,6 +416,7 @@ public class PrefetchControllerTest { anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS), anyLong(), eq(TAG_PREFETCH), any(), any()); assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertFalse(jobStatus.isReady()); } @Test @@ -418,6 +434,7 @@ public class PrefetchControllerTest { inOrder.verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS)) .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertFalse(jobStatus.isReady()); mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID, SOURCE_PACKAGE, sSystemClock.millis() + MINUTE_IN_MILLIS); @@ -426,6 +443,7 @@ public class PrefetchControllerTest { .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any()); assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobStatus.isReady()); } @Test @@ -448,6 +466,7 @@ public class PrefetchControllerTest { anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS), anyLong(), eq(TAG_PREFETCH), any(), any()); assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertFalse(jobStatus.isReady()); mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID, SOURCE_PACKAGE, sSystemClock.millis() + HOUR_IN_MILLIS); @@ -456,6 +475,7 @@ public class PrefetchControllerTest { .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID); verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any()); assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH)); + assertTrue(jobStatus.isReady()); sSystemClock = getShiftedClock(sSystemClock, HOUR_IN_MILLIS + MINUTE_IN_MILLIS); } |