From a00be9b4d521287fdf4678fb196c3e3a0053c3e4 Mon Sep 17 00:00:00 2001 From: Brian Carlstrom Date: Fri, 12 Dec 2014 13:14:36 -0800 Subject: [PATCH] Remember failed dexopt to avoid retry Bug: 18643977 Change-Id: Ida8d9b9ce992d97fb75bccb8c3da0d9d73a480a9 --- .../server/pm/BackgroundDexOptService.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java index cb9a45e41768f..7e66cd15bf874 100644 --- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java +++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java @@ -39,6 +39,11 @@ public class BackgroundDexOptService extends JobService { "android", BackgroundDexOptService.class.getName()); + /** + * Set of failed packages remembered across job runs. + */ + static final ArraySet sFailedPackageNames = new ArraySet(); + final AtomicBoolean mIdleTime = new AtomicBoolean(false); public static void schedule(Context context) { @@ -75,7 +80,15 @@ public class BackgroundDexOptService extends JobService { schedule(BackgroundDexOptService.this); return; } - pm.performDexOpt(pkg, null /* instruction set */, true); + if (sFailedPackageNames.contains(pkg)) { + // skip previously failing package + continue; + } + if (!pm.performDexOpt(pkg, null /* instruction set */, true)) { + // there was a problem running dexopt, + // remember this so we do not keep retrying. + sFailedPackageNames.add(pkg); + } } // ran to completion, so we abandon our timeslice and do not reschedule jobFinished(jobParams, false);