summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Brazdil <dbrazdil@google.com> 2016-04-08 16:38:04 +0100
committer David Brazdil <dbrazdil@google.com> 2016-04-11 11:42:23 +0100
commit80932c1418f22fa2ab49aa1eea8337b8f29b9bcc (patch)
tree51d62f232b39194eed84aa94e2804d4b3eacf76b
parent6a3b2d2bc63254a412eb546ed371fce8f4337434 (diff)
Assume package failed to compile unless proven otherwise
BackgroundDexOptService keeps a list of packages which failed to compile so that they are not revisited. If compilation takes so long that the background job is killed, the offending package is not recorded. This patch records the package before dexopt is called and removes it from the list if dexopt succeeds. Bug: 28082762 Change-Id: If7388e159b999287b60f19dc99cf4dde61ec64c8
-rw-r--r--services/core/java/com/android/server/pm/BackgroundDexOptService.java9
1 files changed, 6 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
index 2ce2dfe407f5..da9cd8b88234 100644
--- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java
+++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
@@ -168,15 +168,18 @@ public class BackgroundDexOptService extends JobService {
// Skip previously failing package
continue;
}
+ // Conservatively add package to the list of failing ones in case performDexOpt
+ // never returns.
+ sFailedPackageNames.add(pkg);
// Optimize package if needed. Note that there can be no race between
// concurrent jobs because PackageDexOptimizer.performDexOpt is synchronized.
- if (!pm.performDexOpt(pkg,
+ if (pm.performDexOpt(pkg,
/* instruction set */ null,
/* checkProfiles */ true,
PackageManagerService.REASON_BACKGROUND_DEXOPT,
/* force */ false)) {
- // Dexopt failed, remember this so we do not keep retrying.
- sFailedPackageNames.add(pkg);
+ // Dexopt succeeded, remove package from the list of failing ones.
+ sFailedPackageNames.remove(pkg);
}
}
// Ran to completion, so we abandon our timeslice and do not reschedule.