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>
This commit is contained in:
@@ -513,6 +513,9 @@ public final class JobStatus {
|
|||||||
if (latestRunTimeElapsedMillis != NO_LATEST_RUNTIME) {
|
if (latestRunTimeElapsedMillis != NO_LATEST_RUNTIME) {
|
||||||
requiredConstraints |= CONSTRAINT_DEADLINE;
|
requiredConstraints |= CONSTRAINT_DEADLINE;
|
||||||
}
|
}
|
||||||
|
if (job.isPrefetch()) {
|
||||||
|
requiredConstraints |= CONSTRAINT_PREFETCH;
|
||||||
|
}
|
||||||
boolean exemptedMediaUrisOnly = false;
|
boolean exemptedMediaUrisOnly = false;
|
||||||
if (job.getTriggerContentUris() != null) {
|
if (job.getTriggerContentUris() != null) {
|
||||||
requiredConstraints |= CONSTRAINT_CONTENT_TRIGGER;
|
requiredConstraints |= CONSTRAINT_CONTENT_TRIGGER;
|
||||||
|
|||||||
@@ -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.inOrder;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
|
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.sElapsedRealtimeClock;
|
||||||
import static com.android.server.job.JobSchedulerService.sSystemClock;
|
import static com.android.server.job.JobSchedulerService.sSystemClock;
|
||||||
|
|
||||||
@@ -185,12 +186,15 @@ public class PrefetchControllerTest {
|
|||||||
JobStatus js = JobStatus.createFromJobInfo(
|
JobStatus js = JobStatus.createFromJobInfo(
|
||||||
jobInfo, callingUid, packageName, SOURCE_USER_ID, testTag);
|
jobInfo, callingUid, packageName, SOURCE_USER_ID, testTag);
|
||||||
js.serviceInfo = mock(ServiceInfo.class);
|
js.serviceInfo = mock(ServiceInfo.class);
|
||||||
|
js.setStandbyBucket(FREQUENT_INDEX);
|
||||||
// Make sure Doze and background-not-restricted don't affect tests.
|
// Make sure Doze and background-not-restricted don't affect tests.
|
||||||
js.setDeviceNotDozingConstraintSatisfied(/* nowElapsed */ sElapsedRealtimeClock.millis(),
|
js.setDeviceNotDozingConstraintSatisfied(/* nowElapsed */ sElapsedRealtimeClock.millis(),
|
||||||
/* state */ true, /* allowlisted */false);
|
/* state */ true, /* allowlisted */false);
|
||||||
js.setBackgroundNotRestrictedConstraintSatisfied(
|
js.setBackgroundNotRestrictedConstraintSatisfied(
|
||||||
sElapsedRealtimeClock.millis(), true, false);
|
sElapsedRealtimeClock.millis(), true, false);
|
||||||
|
js.setQuotaConstraintSatisfied(sElapsedRealtimeClock.millis(), true);
|
||||||
js.setTareWealthConstraintSatisfied(sElapsedRealtimeClock.millis(), true);
|
js.setTareWealthConstraintSatisfied(sElapsedRealtimeClock.millis(), true);
|
||||||
|
js.setExpeditedJobQuotaApproved(sElapsedRealtimeClock.millis(), true);
|
||||||
js.setExpeditedJobTareApproved(sElapsedRealtimeClock.millis(), true);
|
js.setExpeditedJobTareApproved(sElapsedRealtimeClock.millis(), true);
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
@@ -294,6 +298,7 @@ public class PrefetchControllerTest {
|
|||||||
verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
|
verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
|
||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
assertFalse(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertFalse(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertFalse(job.isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -309,6 +314,7 @@ public class PrefetchControllerTest {
|
|||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
||||||
assertTrue(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(job.isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -331,19 +337,25 @@ public class PrefetchControllerTest {
|
|||||||
inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
|
inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
|
||||||
.onControllerStateChanged(any());
|
.onControllerStateChanged(any());
|
||||||
assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobPending.isReady());
|
||||||
assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobRunning.isReady());
|
||||||
setUidBias(uid, JobInfo.BIAS_TOP_APP);
|
setUidBias(uid, JobInfo.BIAS_TOP_APP);
|
||||||
// Processing happens on the handler, so wait until we're sure the change has been processed
|
// Processing happens on the handler, so wait until we're sure the change has been processed
|
||||||
inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
|
inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
|
||||||
.onControllerStateChanged(any());
|
.onControllerStateChanged(any());
|
||||||
// Already running job should continue but pending job must wait.
|
// Already running job should continue but pending job must wait.
|
||||||
assertFalse(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertFalse(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertFalse(jobPending.isReady());
|
||||||
assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobRunning.isReady());
|
||||||
setUidBias(uid, JobInfo.BIAS_DEFAULT);
|
setUidBias(uid, JobInfo.BIAS_DEFAULT);
|
||||||
inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
|
inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
|
||||||
.onControllerStateChanged(any());
|
.onControllerStateChanged(any());
|
||||||
assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobPending.isReady());
|
||||||
assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobRunning.isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -367,11 +379,13 @@ public class PrefetchControllerTest {
|
|||||||
verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
|
verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
|
||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
assertFalse(jobNonWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertFalse(jobNonWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertFalse(jobNonWidget.isReady());
|
||||||
|
|
||||||
when(appWidgetManager.isBoundWidgetPackage(SOURCE_PACKAGE, SOURCE_USER_ID))
|
when(appWidgetManager.isBoundWidgetPackage(SOURCE_PACKAGE, SOURCE_USER_ID))
|
||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
trackJobs(jobWidget);
|
trackJobs(jobWidget);
|
||||||
assertTrue(jobWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobWidget.isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -390,6 +404,7 @@ public class PrefetchControllerTest {
|
|||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
||||||
assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobStatus.isReady());
|
||||||
|
|
||||||
mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
|
mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
|
||||||
SOURCE_PACKAGE, sSystemClock.millis() + 10 * HOUR_IN_MILLIS);
|
SOURCE_PACKAGE, sSystemClock.millis() + 10 * HOUR_IN_MILLIS);
|
||||||
@@ -401,6 +416,7 @@ public class PrefetchControllerTest {
|
|||||||
anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS),
|
anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS),
|
||||||
anyLong(), eq(TAG_PREFETCH), any(), any());
|
anyLong(), eq(TAG_PREFETCH), any(), any());
|
||||||
assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertFalse(jobStatus.isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -418,6 +434,7 @@ public class PrefetchControllerTest {
|
|||||||
inOrder.verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
|
inOrder.verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
|
||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertFalse(jobStatus.isReady());
|
||||||
|
|
||||||
mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
|
mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
|
||||||
SOURCE_PACKAGE, sSystemClock.millis() + MINUTE_IN_MILLIS);
|
SOURCE_PACKAGE, sSystemClock.millis() + MINUTE_IN_MILLIS);
|
||||||
@@ -426,6 +443,7 @@ public class PrefetchControllerTest {
|
|||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
||||||
assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobStatus.isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -448,6 +466,7 @@ public class PrefetchControllerTest {
|
|||||||
anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS),
|
anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS),
|
||||||
anyLong(), eq(TAG_PREFETCH), any(), any());
|
anyLong(), eq(TAG_PREFETCH), any(), any());
|
||||||
assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertFalse(jobStatus.isReady());
|
||||||
|
|
||||||
mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
|
mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
|
||||||
SOURCE_PACKAGE, sSystemClock.millis() + HOUR_IN_MILLIS);
|
SOURCE_PACKAGE, sSystemClock.millis() + HOUR_IN_MILLIS);
|
||||||
@@ -456,6 +475,7 @@ public class PrefetchControllerTest {
|
|||||||
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
.getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
|
||||||
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
|
||||||
assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
|
||||||
|
assertTrue(jobStatus.isReady());
|
||||||
|
|
||||||
sSystemClock = getShiftedClock(sSystemClock, HOUR_IN_MILLIS + MINUTE_IN_MILLIS);
|
sSystemClock = getShiftedClock(sSystemClock, HOUR_IN_MILLIS + MINUTE_IN_MILLIS);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user