diff options
author | Narayan Kamath <narayan@google.com> | 2014-08-08 17:40:57 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-07 18:53:12 +0000 |
commit | a3d98c2508ea14ef2c9a40f9617c9e29cd33a810 (patch) | |
tree | 32d79b73a7171a3a86b9d66c875bb12fce45ef3c | |
parent | c3093eb86bdc02ecf30c32693abafdaa01568a41 (diff) | |
parent | 05e8f801b54d43ae43f86a310217ec6f931b5738 (diff) | |
download | frameworks_base-a3d98c2508ea14ef2c9a40f9617c9e29cd33a810.zip frameworks_base-a3d98c2508ea14ef2c9a40f9617c9e29cd33a810.tar.gz frameworks_base-a3d98c2508ea14ef2c9a40f9617c9e29cd33a810.tar.bz2 |
Merge "Reduce the frequency of calls to isDexOptNeededInternal." into lmp-dev
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 44b7f01..36dec3e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4635,12 +4635,12 @@ public class PackageManagerService extends IPackageManager.Stub { // 2.) we are defering a needed dexopt // 3.) we are skipping an unneeded dexopt final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets); - for (String path : paths) { - for (String dexCodeInstructionSet : dexCodeInstructionSets) { - if (!forceDex && pkg.mDexOptPerformed.contains(dexCodeInstructionSet)) { - continue; - } + for (String dexCodeInstructionSet : dexCodeInstructionSets) { + if (!forceDex && pkg.mDexOptPerformed.contains(dexCodeInstructionSet)) { + continue; + } + for (String path : paths) { try { // This will return DEXOPT_NEEDED if we either cannot find any odex file for this // patckage or the one we find does not match the image checksum (i.e. it was @@ -4661,10 +4661,9 @@ public class PackageManagerService extends IPackageManager.Stub { // just result in an error again. Also, don't bother dexopting for other // paths & ISAs. return DEX_OPT_FAILED; - } else { - performedDexOpt = true; - pkg.mDexOptPerformed.add(dexCodeInstructionSet); } + + performedDexOpt = true; } else if (!defer && isDexOptNeeded == DexFile.PATCHOAT_NEEDED) { Log.i(TAG, "Running patchoat on: " + pkg.applicationInfo.packageName); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); @@ -4676,10 +4675,9 @@ public class PackageManagerService extends IPackageManager.Stub { // just result in an error again. Also, don't bother dexopting for other // paths & ISAs. return DEX_OPT_FAILED; - } else { - performedDexOpt = true; - pkg.mDexOptPerformed.add(dexCodeInstructionSet); } + + performedDexOpt = true; } // We're deciding to defer a needed dexopt. Don't bother dexopting for other @@ -4706,6 +4704,13 @@ public class PackageManagerService extends IPackageManager.Stub { return DEX_OPT_FAILED; } } + + // At this point we haven't failed dexopt and we haven't deferred dexopt. We must + // either have either succeeded dexopt, or have had isDexOptNeededInternal tell us + // it isn't required. We therefore mark that this package doesn't need dexopt unless + // it's forced. performedDexOpt will tell us whether we performed dex-opt or skipped + // it. + pkg.mDexOptPerformed.add(dexCodeInstructionSet); } // If we've gotten here, we're sure that no error occurred and that we haven't |