Merge "Fix job persistence & re-inflation" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-08 17:17:12 +00:00
committed by Android (Google) Code Review
3 changed files with 106 additions and 0 deletions

View File

@@ -1596,6 +1596,16 @@ public class JobInfo implements Parcelable {
}
return new JobInfo(this);
}
/**
* @hide
*/
public String summarize() {
final String service = (mJobService != null)
? mJobService.flattenToShortString()
: "null";
return "JobInfo.Builder{job:" + mJobId + "/" + service + "}";
}
}
/**

View File

@@ -543,6 +543,9 @@ public final class JobStore {
if (jobStatus.hasBatteryNotLowConstraint()) {
out.attribute(null, "battery-not-low", Boolean.toString(true));
}
if (jobStatus.hasStorageNotLowConstraint()) {
out.attribute(null, "storage-not-low", Boolean.toString(true));
}
out.endTag(null, XML_TAG_PARAMS_CONSTRAINTS);
}
@@ -903,6 +906,15 @@ public final class JobStore {
jobBuilder.setExtras(extras);
parser.nextTag(); // Consume </extras>
final JobInfo builtJob;
try {
builtJob = jobBuilder.build();
} catch (Exception e) {
Slog.w(TAG, "Unable to build job from XML, ignoring: "
+ jobBuilder.summarize());
return null;
}
// Migrate sync jobs forward from earlier, incomplete representation
if ("android".equals(sourcePackageName)
&& extras != null
@@ -986,6 +998,14 @@ public final class JobStore {
if (val != null) {
jobBuilder.setRequiresCharging(true);
}
val = parser.getAttributeValue(null, "battery-not-low");
if (val != null) {
jobBuilder.setRequiresBatteryNotLow(true);
}
val = parser.getAttributeValue(null, "storage-not-low");
if (val != null) {
jobBuilder.setRequiresStorageNotLow(true);
}
}
/**

View File

@@ -379,6 +379,82 @@ public class JobStoreTest {
.build());
}
@Test
public void testPersistedIdleConstraint() throws Exception {
JobInfo.Builder b = new Builder(8, mComponent)
.setRequiresDeviceIdle(true)
.setPersisted(true);
JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null);
mTaskStoreUnderTest.add(taskStatus);
waitForPendingIo();
final JobSet jobStatusSet = new JobSet();
mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
assertEquals("Idle constraint not persisted correctly.",
loaded.getJob().isRequireDeviceIdle(),
taskStatus.getJob().isRequireDeviceIdle());
}
@Test
public void testPersistedChargingConstraint() throws Exception {
JobInfo.Builder b = new Builder(8, mComponent)
.setRequiresCharging(true)
.setPersisted(true);
JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null);
mTaskStoreUnderTest.add(taskStatus);
waitForPendingIo();
final JobSet jobStatusSet = new JobSet();
mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
assertEquals("Charging constraint not persisted correctly.",
loaded.getJob().isRequireCharging(),
taskStatus.getJob().isRequireCharging());
}
@Test
public void testPersistedStorageNotLowConstraint() throws Exception {
JobInfo.Builder b = new Builder(8, mComponent)
.setRequiresStorageNotLow(true)
.setPersisted(true);
JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null);
mTaskStoreUnderTest.add(taskStatus);
waitForPendingIo();
final JobSet jobStatusSet = new JobSet();
mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
assertEquals("Storage-not-low constraint not persisted correctly.",
loaded.getJob().isRequireStorageNotLow(),
taskStatus.getJob().isRequireStorageNotLow());
}
@Test
public void testPersistedBatteryNotLowConstraint() throws Exception {
JobInfo.Builder b = new Builder(8, mComponent)
.setRequiresBatteryNotLow(true)
.setPersisted(true);
JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null);
mTaskStoreUnderTest.add(taskStatus);
waitForPendingIo();
final JobSet jobStatusSet = new JobSet();
mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
assertEquals("Battery-not-low constraint not persisted correctly.",
loaded.getJob().isRequireBatteryNotLow(),
taskStatus.getJob().isRequireBatteryNotLow());
}
/**
* Helper function to kick a {@link JobInfo} through a persistence cycle and
* assert that it's unchanged.