Merge "Don't back off for first few system stops." into udc-dev

This commit is contained in:
Kweku Adams
2023-05-16 16:47:05 +00:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 24 deletions

View File

@@ -2600,34 +2600,43 @@ public class JobSchedulerService extends com.android.server.SystemService
} else { } else {
numSystemStops++; numSystemStops++;
} }
final int backoffAttempts = Math.max(1, final int backoffAttempts =
numFailures + numSystemStops / mConstants.SYSTEM_STOP_TO_FAILURE_RATIO); numFailures + numSystemStops / mConstants.SYSTEM_STOP_TO_FAILURE_RATIO;
long delayMillis; final long earliestRuntimeMs;
switch (job.getBackoffPolicy()) { if (backoffAttempts == 0) {
case JobInfo.BACKOFF_POLICY_LINEAR: { earliestRuntimeMs = JobStatus.NO_EARLIEST_RUNTIME;
long backoff = initialBackoffMillis; } else {
if (backoff < mConstants.MIN_LINEAR_BACKOFF_TIME_MS) { long delayMillis;
backoff = mConstants.MIN_LINEAR_BACKOFF_TIME_MS; switch (job.getBackoffPolicy()) {
case JobInfo.BACKOFF_POLICY_LINEAR: {
long backoff = initialBackoffMillis;
if (backoff < mConstants.MIN_LINEAR_BACKOFF_TIME_MS) {
backoff = mConstants.MIN_LINEAR_BACKOFF_TIME_MS;
}
delayMillis = backoff * backoffAttempts;
} }
delayMillis = backoff * backoffAttempts; break;
} break; default:
default: if (DEBUG) {
if (DEBUG) { Slog.v(TAG, "Unrecognised back-off policy, defaulting to exponential.");
Slog.v(TAG, "Unrecognised back-off policy, defaulting to exponential."); }
// Intentional fallthrough.
case JobInfo.BACKOFF_POLICY_EXPONENTIAL: {
long backoff = initialBackoffMillis;
if (backoff < mConstants.MIN_EXP_BACKOFF_TIME_MS) {
backoff = mConstants.MIN_EXP_BACKOFF_TIME_MS;
}
delayMillis = (long) Math.scalb(backoff, backoffAttempts - 1);
} }
case JobInfo.BACKOFF_POLICY_EXPONENTIAL: { break;
long backoff = initialBackoffMillis; }
if (backoff < mConstants.MIN_EXP_BACKOFF_TIME_MS) { delayMillis =
backoff = mConstants.MIN_EXP_BACKOFF_TIME_MS; Math.min(delayMillis, JobInfo.MAX_BACKOFF_DELAY_MILLIS);
} earliestRuntimeMs = elapsedNowMillis + delayMillis;
delayMillis = (long) Math.scalb(backoff, backoffAttempts - 1);
} break;
} }
delayMillis =
Math.min(delayMillis, JobInfo.MAX_BACKOFF_DELAY_MILLIS);
JobStatus newJob = new JobStatus(failureToReschedule, JobStatus newJob = new JobStatus(failureToReschedule,
elapsedNowMillis + delayMillis, earliestRuntimeMs,
JobStatus.NO_LATEST_RUNTIME, numFailures, numSystemStops, JobStatus.NO_LATEST_RUNTIME, numFailures, numSystemStops,
failureToReschedule.getLastSuccessfulRunTime(), sSystemClock.millis(), failureToReschedule.getLastSuccessfulRunTime(), sSystemClock.millis(),
failureToReschedule.getCumulativeExecutionTimeMs()); failureToReschedule.getCumulativeExecutionTimeMs());

View File

@@ -402,13 +402,15 @@ public class JobSchedulerServiceTest {
JobStatus rescheduledJob = mService.getRescheduleJobForFailureLocked(originalJob, JobStatus rescheduledJob = mService.getRescheduleJobForFailureLocked(originalJob,
JobParameters.STOP_REASON_DEVICE_STATE, JobParameters.STOP_REASON_DEVICE_STATE,
JobParameters.INTERNAL_STOP_REASON_DEVICE_THERMAL); JobParameters.INTERNAL_STOP_REASON_DEVICE_THERMAL);
assertEquals(nowElapsed + initialBackoffMs, rescheduledJob.getEarliestRunTime()); assertEquals(JobStatus.NO_EARLIEST_RUNTIME, rescheduledJob.getEarliestRunTime());
assertEquals(JobStatus.NO_LATEST_RUNTIME, rescheduledJob.getLatestRunTimeElapsed()); assertEquals(JobStatus.NO_LATEST_RUNTIME, rescheduledJob.getLatestRunTimeElapsed());
// failure = 0, systemStop = 2 // failure = 0, systemStop = 2
rescheduledJob = mService.getRescheduleJobForFailureLocked(rescheduledJob, rescheduledJob = mService.getRescheduleJobForFailureLocked(rescheduledJob,
JobParameters.STOP_REASON_DEVICE_STATE, JobParameters.STOP_REASON_DEVICE_STATE,
JobParameters.INTERNAL_STOP_REASON_PREEMPT); JobParameters.INTERNAL_STOP_REASON_PREEMPT);
assertEquals(JobStatus.NO_EARLIEST_RUNTIME, rescheduledJob.getEarliestRunTime());
assertEquals(JobStatus.NO_LATEST_RUNTIME, rescheduledJob.getLatestRunTimeElapsed());
// failure = 0, systemStop = 3 // failure = 0, systemStop = 3
rescheduledJob = mService.getRescheduleJobForFailureLocked(rescheduledJob, rescheduledJob = mService.getRescheduleJobForFailureLocked(rescheduledJob,
JobParameters.STOP_REASON_CONSTRAINT_CHARGING, JobParameters.STOP_REASON_CONSTRAINT_CHARGING,