OSDN Git Service

Ensure that BackgroundDexOptService can still perform dexopt
authorBrian Carlstrom <bdc@google.com>
Wed, 3 Sep 2014 23:37:28 +0000 (16:37 -0700)
committerBrian Carlstrom <bdc@google.com>
Wed, 3 Sep 2014 23:54:42 +0000 (16:54 -0700)
Bug: 16696554
Change-Id: Id5877618ec9620112fa31dd69016c060bb26b2a7

services/core/java/com/android/server/pm/PackageManagerService.java

index 5639234..228c120 100644 (file)
@@ -4523,8 +4523,11 @@ public class PackageManagerService extends IPackageManager.Stub {
         return VMRuntime.getInstructionSet(info.primaryCpuAbi);
     }
 
-    public boolean performDexOpt(String packageName, String instructionSet, boolean updateUsage) {
-        if (!mLazyDexOpt) {
+    public boolean performDexOpt(String packageName, String instructionSet, boolean backgroundDexopt) {
+        boolean dexopt = mLazyDexOpt || backgroundDexopt;
+        boolean updateUsage = !backgroundDexopt;  // Don't update usage if this is just a backgroundDexopt
+        if (!dexopt && !updateUsage) {
+            // We aren't going to dexopt or update usage, so bail early.
             return false;
         }
         PackageParser.Package p;
@@ -4538,6 +4541,10 @@ public class PackageManagerService extends IPackageManager.Stub {
                 p.mLastPackageUsageTimeInMills = System.currentTimeMillis();
             }
             mPackageUsage.write(false);
+            if (!dexopt) {
+                // We aren't going to dexopt, so bail early.
+                return false;
+            }
 
             targetInstructionSet = instructionSet != null ? instructionSet :
                     getPrimaryInstructionSet(p.applicationInfo);