diff options
author | Matthew Williams <mjwilliams@google.com> | 2015-10-14 03:00:16 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-10-14 03:00:16 +0000 |
commit | 40ec3a924663c831e47f5e851b2978b96ff428fb (patch) | |
tree | 8f84d6ce404fbc7a324883f69b94a4242c742b5b /services | |
parent | a2ed535c67a6c6fbe2ae4a086193ad68711e2129 (diff) | |
parent | d6af66e89dbb28b55181e8b18049cca40d0e355d (diff) | |
download | frameworks_base-40ec3a924663c831e47f5e851b2978b96ff428fb.zip frameworks_base-40ec3a924663c831e47f5e851b2978b96ff428fb.tar.gz frameworks_base-40ec3a924663c831e47f5e851b2978b96ff428fb.tar.bz2 |
Merge "Correctly reschedule failed periodic" into mnc-dr-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/job/JobSchedulerService.java | 23 | ||||
-rw-r--r-- | services/core/java/com/android/server/job/JobServiceContext.java | 2 |
2 files changed, 17 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index ecda36a..06bd583 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -443,13 +443,16 @@ public class JobSchedulerService extends com.android.server.SystemService } /** - * A job is rescheduled with exponential back-off if the client requests this from their - * execution logic. - * A caveat is for idle-mode jobs, for which the idle-mode constraint will usurp the - * timeliness of the reschedule. For an idle-mode job, no deadline is given. + * Reschedules the given job based on the job's backoff policy. It doesn't make sense to + * specify an override deadline on a failed job (the failed job will run even though it's not + * ready), so we reschedule it with {@link JobStatus#NO_LATEST_RUNTIME}, but specify that any + * ready job with {@link JobStatus#numFailures} > 0 will be executed. + * * @param failureToReschedule Provided job status that we will reschedule. * @return A newly instantiated JobStatus with the same constraints as the last job except * with adjusted timing constraints. + * + * @see JobHandler#maybeQueueReadyJobsForExecutionLockedH */ private JobStatus getRescheduleJobForFailure(JobStatus failureToReschedule) { final long elapsedNowMillis = SystemClock.elapsedRealtime(); @@ -479,8 +482,9 @@ public class JobSchedulerService extends com.android.server.SystemService } /** - * Called after a periodic has executed so we can to re-add it. We take the last execution time - * of the job to be the time of completion (i.e. the time at which this function is called). + * Called after a periodic has executed so we can reschedule it. We take the last execution + * time of the job to be the time of completion (i.e. the time at which this function is + * called). * This could be inaccurate b/c the job can run for as long as * {@link com.android.server.job.JobServiceContext#EXECUTING_TIMESLICE_MILLIS}, but will lead * to underscheduling at least, rather than if we had taken the last execution time to be the @@ -491,7 +495,12 @@ public class JobSchedulerService extends com.android.server.SystemService private JobStatus getRescheduleJobForPeriodic(JobStatus periodicToReschedule) { final long elapsedNow = SystemClock.elapsedRealtime(); // Compute how much of the period is remaining. - long runEarly = Math.max(periodicToReschedule.getLatestRunTimeElapsed() - elapsedNow, 0); + long runEarly = 0L; + + // If this periodic was rescheduled it won't have a deadline. + if (periodicToReschedule.hasDeadlineConstraint()) { + runEarly = Math.max(periodicToReschedule.getLatestRunTimeElapsed() - elapsedNow, 0L); + } long newEarliestRunTimeElapsed = elapsedNow + runEarly; long period = periodicToReschedule.getJob().getIntervalMillis(); long newLatestRuntimeElapsed = newEarliestRunTimeElapsed + period; diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java index bb4e388..43d5648 100644 --- a/services/core/java/com/android/server/job/JobServiceContext.java +++ b/services/core/java/com/android/server/job/JobServiceContext.java @@ -68,7 +68,7 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne private static final int defaultMaxActiveJobsPerService = ActivityManager.isLowRamDeviceStatic() ? 1 : 3; /** Amount of time a job is allowed to execute for before being considered timed-out. */ - private static final long EXECUTING_TIMESLICE_MILLIS = 10 * 60 * 1000; + private static final long EXECUTING_TIMESLICE_MILLIS = 10 * 60 * 1000; // 10mins. /** Amount of time the JobScheduler will wait for a response from an app for a message. */ private static final long OP_TIMEOUT_MILLIS = 8 * 1000; |