From 90978b4159dd1394c0643ae8171d24668fbc27a4 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Sun, 26 Mar 2017 14:09:04 +0100 Subject: [PATCH] Drop REASON_NON_SYSTEM_LIBRARY. Dexopt them with the same "mode" as the apk we are going to dexopt. Because we treat them as shared, this means they are only going to be fully compiled once an app that has it in its gets compiled. bug:33799337 Test: m -j32 && boot Change-Id: Ic93fbcf45be6b9cf31ad3a3eb498f9fbbefeb288 --- .../com/android/server/pm/PackageManagerService.java | 17 ++++++++++------- .../server/pm/PackageManagerServiceCompilerMapping.java | 3 +-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 2a93634195e7..b7aef7acc428 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -537,9 +537,8 @@ public class PackageManagerService extends IPackageManager.Stub { public static final int REASON_INSTALL = 2; public static final int REASON_BACKGROUND_DEXOPT = 3; public static final int REASON_AB_OTA = 4; - public static final int REASON_NON_SYSTEM_LIBRARY = 5; - public static final int REASON_SHARED_APK = 6; - public static final int REASON_FORCED_DEXOPT = 7; + public static final int REASON_SHARED_APK = 5; + public static final int REASON_FORCED_DEXOPT = 6; public static final int REASON_LAST = REASON_FORCED_DEXOPT; @@ -8395,19 +8394,23 @@ public class PackageManagerService extends IPackageManager.Stub { ? new PackageDexOptimizer.ForcedUpdatePackageDexOptimizer(mPackageDexOptimizer) : mPackageDexOptimizer; - // Optimize all dependencies first. Note: we ignore the return value and march on + // Dexopt all dependencies first. Note: we ignore the return value and march on // on errors. + // Note that we are going to call performDexOpt on those libraries as many times as + // they are referenced in packages. When we do a batch of performDexOpt (for example + // at boot, or background job), the passed 'targetCompilerFilter' stays the same, + // and the first package that uses the library will dexopt it. The + // others will see that the compiled code for the library is up to date. Collection deps = findSharedNonSystemLibraries(p); final String[] instructionSets = getAppDexInstructionSets(p.applicationInfo); if (!deps.isEmpty()) { for (PackageParser.Package depPackage : deps) { // TODO: Analyze and investigate if we (should) profile libraries. - // Currently this will do a full compilation of the library by default. pdo.performDexOpt(depPackage, null /* sharedLibraries */, instructionSets, false /* checkProfiles */, - getCompilerFilterForReason(REASON_NON_SYSTEM_LIBRARY), + targetCompilerFilter, getOrCreateCompilerPackageStats(depPackage), - mDexManager.isUsedByOtherApps(p.packageName)); + true /* isUsedByOtherApps */); } } return pdo.performDexOpt(p, p.usesLibraryFiles, instructionSets, checkProfiles, diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java b/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java index 4433f4a68444..987a801c4e1c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java @@ -26,8 +26,7 @@ import dalvik.system.DexFile; public class PackageManagerServiceCompilerMapping { // Names for compilation reasons. static final String REASON_STRINGS[] = { - "first-boot", "boot", "install", "bg-dexopt", "ab-ota", "nsys-library", "shared-apk", - "forced-dexopt" + "first-boot", "boot", "install", "bg-dexopt", "ab-ota", "shared-apk", "forced-dexopt" }; // Static block to ensure the strings array is of the right length. -- 2.11.0