diff options
| author | 2022-08-04 16:41:33 +0000 | |
|---|---|---|
| committer | 2022-08-04 16:41:33 +0000 | |
| commit | ac02f2c5765c1b60a474978f9c92ffd238fbd643 (patch) | |
| tree | c9e5fe10e4cdadf6049a3f8b02db7c3936f9eb34 | |
| parent | 5f9c766269c18a3b63e4f999c9f66f85b56af19e (diff) | |
| parent | 686bce22bee8ec111394fd41f0f03b15c725fe63 (diff) | |
Merge "Make sure prefetch tracking affects job readiness." into tm-qpr-dev am: 686bce22be
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19509166
Change-Id: Id40f0c3a457bd545c7e7e801f68eec7dc84ba31e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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); } |