Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5dce320b authored by Kweku Adams's avatar Kweku Adams Committed by Automerger Merge Worker
Browse files

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

parents 889b6c20 0f26a22c
Loading
Loading
Loading
Loading
+33 −24
Original line number Diff line number Diff line
@@ -2600,10 +2600,14 @@ public class JobSchedulerService extends com.android.server.SystemService
        } else {
            numSystemStops++;
        }
        final int backoffAttempts = Math.max(1,
                numFailures + numSystemStops / mConstants.SYSTEM_STOP_TO_FAILURE_RATIO);
        long delayMillis;
        final int backoffAttempts =
                numFailures + numSystemStops / mConstants.SYSTEM_STOP_TO_FAILURE_RATIO;
        final long earliestRuntimeMs;

        if (backoffAttempts == 0) {
            earliestRuntimeMs = JobStatus.NO_EARLIEST_RUNTIME;
        } else {
            long delayMillis;
            switch (job.getBackoffPolicy()) {
                case JobInfo.BACKOFF_POLICY_LINEAR: {
                    long backoff = initialBackoffMillis;
@@ -2611,23 +2615,28 @@ public class JobSchedulerService extends com.android.server.SystemService
                        backoff = mConstants.MIN_LINEAR_BACKOFF_TIME_MS;
                    }
                    delayMillis = backoff * backoffAttempts;
            } break;
                }
                break;
                default:
                    if (DEBUG) {
                        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);
            } break;
                }
                break;
            }
            delayMillis =
                    Math.min(delayMillis, JobInfo.MAX_BACKOFF_DELAY_MILLIS);
            earliestRuntimeMs = elapsedNowMillis + delayMillis;
        }
        JobStatus newJob = new JobStatus(failureToReschedule,
                elapsedNowMillis + delayMillis,
                earliestRuntimeMs,
                JobStatus.NO_LATEST_RUNTIME, numFailures, numSystemStops,
                failureToReschedule.getLastSuccessfulRunTime(), sSystemClock.millis(),
                failureToReschedule.getCumulativeExecutionTimeMs());
+3 −1
Original line number Diff line number Diff line
@@ -402,13 +402,15 @@ public class JobSchedulerServiceTest {
        JobStatus rescheduledJob = mService.getRescheduleJobForFailureLocked(originalJob,
                JobParameters.STOP_REASON_DEVICE_STATE,
                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());

        // failure = 0, systemStop = 2
        rescheduledJob = mService.getRescheduleJobForFailureLocked(rescheduledJob,
                JobParameters.STOP_REASON_DEVICE_STATE,
                JobParameters.INTERNAL_STOP_REASON_PREEMPT);
        assertEquals(JobStatus.NO_EARLIEST_RUNTIME, rescheduledJob.getEarliestRunTime());
        assertEquals(JobStatus.NO_LATEST_RUNTIME, rescheduledJob.getLatestRunTimeElapsed());
        // failure = 0, systemStop = 3
        rescheduledJob = mService.getRescheduleJobForFailureLocked(rescheduledJob,
                JobParameters.STOP_REASON_CONSTRAINT_CHARGING,