diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/BackgroundDexOptService.java | 12 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/pm/BackgroundDexOptServiceUnitTest.java | 4 |
2 files changed, 9 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java index 9785d478a6d1..f85d6af9efee 100644 --- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java +++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java @@ -405,11 +405,15 @@ public final class BackgroundDexOptService { new TimingsTraceAndSlog(TAG, Trace.TRACE_TAG_PACKAGE_MANAGER); tr.traceBegin("jobExecution"); boolean completed = false; + boolean fatalError = false; try { completed = runIdleOptimization( pm, pkgs, params.getJobId() == JOB_POST_BOOT_UPDATE); } catch (LegacyDexoptDisabledException e) { Slog.wtf(TAG, e); + } catch (RuntimeException e) { + fatalError = true; + throw e; } finally { // Those cleanup should be done always. tr.traceEnd(); Slog.i(TAG, @@ -422,12 +426,10 @@ public final class BackgroundDexOptService { if (completed) { markPostBootUpdateCompleted(params); } - // Reschedule when cancelled - job.jobFinished(params, !completed); - } else { - // Periodic job - job.jobFinished(params, false /* reschedule */); } + // Reschedule when cancelled. No need to reschedule when failed with + // fatal error because it's likely to fail again. + job.jobFinished(params, !completed && !fatalError); markDexOptCompleted(); } })); diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundDexOptServiceUnitTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundDexOptServiceUnitTest.java index 8b36da5bc36c..d5aa7fec996f 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundDexOptServiceUnitTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundDexOptServiceUnitTest.java @@ -413,8 +413,8 @@ public final class BackgroundDexOptServiceUnitTest { mDexOptThread.join(TEST_WAIT_TIMEOUT_MS); mCancelThread.join(TEST_WAIT_TIMEOUT_MS); - // Always reschedule for periodic job - verify(mJobServiceForIdle).jobFinished(mJobParametersForIdle, false); + // The job should be rescheduled. + verify(mJobServiceForIdle).jobFinished(mJobParametersForIdle, true /* wantsReschedule */); verifyLastControlDexOptBlockingCall(false); } |