From 338ce0b7ca332d9ab4fcbb7d23dd27f9e9daad8c Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Tue, 25 Feb 2020 14:46:59 -0800 Subject: [PATCH] Mark RESTRICTED bucket stop reasons. Try to mark when a job is being stopped because it's in the RESTRICTED bucket. Even though the job's requested constraints may become unsatisfied around the same time as dynamic constraints, this just assumes that any unsatisfied dynamic constraints are the reason the job is being stopped. Bug: 149873527 Test: Android builds Change-Id: I7ad8b9930805e02e0dc8ff7b050b4f0590ebe831 --- .../java/android/app/job/JobParameters.java | 7 ++++--- .../android/server/job/JobSchedulerService.java | 16 +++++++++++++--- .../server/job/controllers/JobStatus.java | 5 +++++ core/proto/android/app/job/enums.proto | 2 +- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/apex/jobscheduler/framework/java/android/app/job/JobParameters.java b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java index 4c98b5fd3b569..62c90dfa8a867 100644 --- a/apex/jobscheduler/framework/java/android/app/job/JobParameters.java +++ b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java @@ -54,7 +54,8 @@ public class JobParameters implements Parcelable { * * @hide */ - public static final int REASON_RESTRAINED = JobProtoEnums.STOP_REASON_RESTRAINED; // 6. + public static final int REASON_RESTRICTED_BUCKET = + JobProtoEnums.STOP_REASON_RESTRICTED_BUCKET; // 6. /** * All the stop reason codes. This should be regarded as an immutable array at runtime. @@ -72,7 +73,7 @@ public class JobParameters implements Parcelable { REASON_TIMEOUT, REASON_DEVICE_IDLE, REASON_DEVICE_THERMAL, - REASON_RESTRAINED, + REASON_RESTRICTED_BUCKET, }; /** @@ -88,7 +89,7 @@ public class JobParameters implements Parcelable { case REASON_TIMEOUT: return "timeout"; case REASON_DEVICE_IDLE: return "device_idle"; case REASON_DEVICE_THERMAL: return "thermal"; - case REASON_RESTRAINED: return "restrained"; + case REASON_RESTRICTED_BUCKET: return "restricted_bucket"; default: return "unknown:" + reasonCode; } } diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index c1e529f3f9660..8fc7495cb3e75 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -1955,9 +1955,19 @@ public class JobSchedulerService extends com.android.server.SystemService continue; } if (!running.isReady()) { - serviceContext.cancelExecutingJobLocked( - JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED, - "cancelled due to unsatisfied constraints"); + // If a restricted job doesn't have dynamic constraints satisfied, assume that's + // the reason the job is being stopped, instead of because of other constraints + // not being satisfied. + if (running.getEffectiveStandbyBucket() == RESTRICTED_INDEX + && !running.areDynamicConstraintsSatisfied()) { + serviceContext.cancelExecutingJobLocked( + JobParameters.REASON_RESTRICTED_BUCKET, + "cancelled due to restricted bucket"); + } else { + serviceContext.cancelExecutingJobLocked( + JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED, + "cancelled due to unsatisfied constraints"); + } } else { final JobRestriction restriction = checkIfRestricted(running); if (restriction != null) { 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 b63cc1918a7a5..6c71c54c8b3fb 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 @@ -1293,6 +1293,11 @@ public final class JobStatus { CONSTRAINT_CHARGING | CONSTRAINT_BATTERY_NOT_LOW | CONSTRAINT_STORAGE_NOT_LOW | CONSTRAINT_TIMING_DELAY | CONSTRAINT_IDLE; + /** Returns true whenever all dynamically set constraints are satisfied. */ + public boolean areDynamicConstraintsSatisfied() { + return mReadyDynamicSatisfied; + } + /** * @return Whether the constraints set on this job are satisfied. */ diff --git a/core/proto/android/app/job/enums.proto b/core/proto/android/app/job/enums.proto index d2bf20591f928..41863bbbfbf18 100644 --- a/core/proto/android/app/job/enums.proto +++ b/core/proto/android/app/job/enums.proto @@ -34,5 +34,5 @@ enum StopReasonEnum { STOP_REASON_TIMEOUT = 3; STOP_REASON_DEVICE_IDLE = 4; STOP_REASON_DEVICE_THERMAL = 5; - STOP_REASON_RESTRAINED = 6; + STOP_REASON_RESTRICTED_BUCKET = 6; }