Merge "Remove demotion flags when a JobWorkItem is enqueued." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6367da36bb
@@ -1503,6 +1503,16 @@ public class JobSchedulerService extends com.android.server.SystemService
|
|||||||
}
|
}
|
||||||
|
|
||||||
toCancel.enqueueWorkLocked(work);
|
toCancel.enqueueWorkLocked(work);
|
||||||
|
if (toCancel.getJob().isUserInitiated()) {
|
||||||
|
// The app is in a state to successfully schedule a UI job. Presumably, the
|
||||||
|
// user has asked for this additional bit of work, so remove any demotion
|
||||||
|
// flags. Only do this for UI jobs since they have strict scheduling
|
||||||
|
// requirements; it's harder to assume other jobs were scheduled due to
|
||||||
|
// user interaction/request.
|
||||||
|
toCancel.removeInternalFlags(
|
||||||
|
JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ);
|
||||||
|
}
|
||||||
mJobs.touchJob(toCancel);
|
mJobs.touchJob(toCancel);
|
||||||
sEnqueuedJwiHighWaterMarkLogger.logSampleWithUid(uId, toCancel.getWorkCount());
|
sEnqueuedJwiHighWaterMarkLogger.logSampleWithUid(uId, toCancel.getWorkCount());
|
||||||
|
|
||||||
|
|||||||
@@ -1177,6 +1177,10 @@ public final class JobStatus {
|
|||||||
mInternalFlags |= flags;
|
mInternalFlags |= flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeInternalFlags(int flags) {
|
||||||
|
mInternalFlags = mInternalFlags & ~flags;
|
||||||
|
}
|
||||||
|
|
||||||
int getPreferredConstraintFlags() {
|
int getPreferredConstraintFlags() {
|
||||||
return mPreferredConstraints;
|
return mPreferredConstraints;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -581,6 +581,49 @@ public class JobStatusTest {
|
|||||||
assertEquals(JobInfo.PRIORITY_HIGH, job.getEffectivePriority());
|
assertEquals(JobInfo.PRIORITY_HIGH, job.getEffectivePriority());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testModifyingInternalFlags() {
|
||||||
|
final JobInfo jobInfo =
|
||||||
|
new JobInfo.Builder(101, new ComponentName("foo", "bar"))
|
||||||
|
.setExpedited(true)
|
||||||
|
.build();
|
||||||
|
JobStatus job = createJobStatus(jobInfo);
|
||||||
|
|
||||||
|
assertEquals(0, job.getInternalFlags());
|
||||||
|
|
||||||
|
// Add single flag
|
||||||
|
job.addInternalFlags(JobStatus.INTERNAL_FLAG_HAS_FOREGROUND_EXEMPTION);
|
||||||
|
assertEquals(JobStatus.INTERNAL_FLAG_HAS_FOREGROUND_EXEMPTION, job.getInternalFlags());
|
||||||
|
|
||||||
|
// Add multiple flags
|
||||||
|
job.addInternalFlags(JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ);
|
||||||
|
assertEquals(JobStatus.INTERNAL_FLAG_HAS_FOREGROUND_EXEMPTION
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ,
|
||||||
|
job.getInternalFlags());
|
||||||
|
|
||||||
|
// Add flag that's already set
|
||||||
|
job.addInternalFlags(JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ);
|
||||||
|
assertEquals(JobStatus.INTERNAL_FLAG_HAS_FOREGROUND_EXEMPTION
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ,
|
||||||
|
job.getInternalFlags());
|
||||||
|
|
||||||
|
// Remove multiple
|
||||||
|
job.removeInternalFlags(JobStatus.INTERNAL_FLAG_HAS_FOREGROUND_EXEMPTION
|
||||||
|
| JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER);
|
||||||
|
assertEquals(JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ, job.getInternalFlags());
|
||||||
|
|
||||||
|
// Remove one that isn't set
|
||||||
|
job.removeInternalFlags(JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER);
|
||||||
|
assertEquals(JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ, job.getInternalFlags());
|
||||||
|
|
||||||
|
// Remove final flag.
|
||||||
|
job.removeInternalFlags(JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ);
|
||||||
|
assertEquals(0, job.getInternalFlags());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testShouldTreatAsUserInitiated() {
|
public void testShouldTreatAsUserInitiated() {
|
||||||
JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar"))
|
JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar"))
|
||||||
@@ -619,6 +662,9 @@ public class JobStatusTest {
|
|||||||
rescheduledJob = new JobStatus(job, NO_EARLIEST_RUNTIME, NO_LATEST_RUNTIME,
|
rescheduledJob = new JobStatus(job, NO_EARLIEST_RUNTIME, NO_LATEST_RUNTIME,
|
||||||
0, 0, 0, 0, 0);
|
0, 0, 0, 0, 0);
|
||||||
assertFalse(rescheduledJob.shouldTreatAsUserInitiatedJob());
|
assertFalse(rescheduledJob.shouldTreatAsUserInitiatedJob());
|
||||||
|
|
||||||
|
rescheduledJob.removeInternalFlags(JobStatus.INTERNAL_FLAG_DEMOTED_BY_USER);
|
||||||
|
assertTrue(rescheduledJob.shouldTreatAsUserInitiatedJob());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -641,6 +687,9 @@ public class JobStatusTest {
|
|||||||
rescheduledJob = new JobStatus(job, NO_EARLIEST_RUNTIME, NO_LATEST_RUNTIME,
|
rescheduledJob = new JobStatus(job, NO_EARLIEST_RUNTIME, NO_LATEST_RUNTIME,
|
||||||
0, 0, 0, 0, 0);
|
0, 0, 0, 0, 0);
|
||||||
assertFalse(rescheduledJob.shouldTreatAsUserInitiatedJob());
|
assertFalse(rescheduledJob.shouldTreatAsUserInitiatedJob());
|
||||||
|
|
||||||
|
rescheduledJob.removeInternalFlags(JobStatus.INTERNAL_FLAG_DEMOTED_BY_SYSTEM_UIJ);
|
||||||
|
assertTrue(rescheduledJob.shouldTreatAsUserInitiatedJob());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user