From fa3e976b8e74811f6efc1bcac351e32fe4a9852a Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Tue, 6 Mar 2018 18:28:22 -0800 Subject: [PATCH 1/3] Add logic for passing down CompactDex generation flag In the cases where we are not install, boot, or first boot, pass down the flag to generate CompactDex. Bug: 63756964 Bug: 74245837 Test: manual (cherry picked from commit f890c3ea5c62fc44aa84fbd011be249accbaff08) Merged-In: I4a2ff9383251e67b260cff5ec8a326c7a4f7faca Change-Id: I857ba57d0821442b2d39e19b0102e62ab5f76f0c --- .../core/java/com/android/server/pm/Installer.java | 2 ++ .../com/android/server/pm/PackageDexOptimizer.java | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index 9bba9ed0f6124..24abf8657b883 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -65,6 +65,8 @@ public class Installer extends SystemService { public static final int DEXOPT_IDLE_BACKGROUND_JOB = 1 << 9; /** Indicates that dexopt should restrict access to private APIs. */ public static final int DEXOPT_ENABLE_HIDDEN_API_CHECKS = 1 << 10; + /** Indicates that dexopt should convert to CompactDex. */ + public static final int DEXOPT_GENERATE_COMPACT_DEX = 1 << 11; // NOTE: keep in sync with installd public static final int FLAG_CLEAR_CACHE_ONLY = 1 << 8; diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 77bf67daa4789..8544ead5f4b82 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -57,6 +57,7 @@ import static com.android.server.pm.Installer.DEXOPT_STORAGE_CE; import static com.android.server.pm.Installer.DEXOPT_STORAGE_DE; import static com.android.server.pm.Installer.DEXOPT_IDLE_BACKGROUND_JOB; import static com.android.server.pm.Installer.DEXOPT_ENABLE_HIDDEN_API_CHECKS; +import static com.android.server.pm.Installer.DEXOPT_GENERATE_COMPACT_DEX; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; @@ -532,12 +533,22 @@ public class PackageDexOptimizer { // Some apps are executed with restrictions on hidden API usage. If this app is one // of them, pass a flag to dexopt to enable the same restrictions during compilation. int hiddenApiFlag = info.isAllowedToUseHiddenApi() ? 0 : DEXOPT_ENABLE_HIDDEN_API_CHECKS; + // Enable CompactDex generation for modes that aren't latency critical. + final int compilationReason = options.getCompilationReason(); + boolean generateCompactDex = true; + switch (compilationReason) { + case PackageManagerService.REASON_FIRST_BOOT: + case PackageManagerService.REASON_BOOT: + case PackageManagerService.REASON_INSTALL: + generateCompactDex = false; + } int dexFlags = (isPublic ? DEXOPT_PUBLIC : 0) | (debuggable ? DEXOPT_DEBUGGABLE : 0) | profileFlag | (options.isBootComplete() ? DEXOPT_BOOTCOMPLETE : 0) | (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0) + | (generateCompactDex ? DEXOPT_GENERATE_COMPACT_DEX : 0) | hiddenApiFlag; return adjustDexoptFlags(dexFlags); } From 3cd2723a0fa792cd0f37b5a01b20d990e552d147 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Wed, 7 Mar 2018 09:29:21 -0800 Subject: [PATCH 2/3] Bump version for OtaDexoptService Bug: 63756964 Bug: 74245837 Test: manual (cherry picked from commit cbe92f735fb6b2cf569e815a97258e5f0c386e59) Merged-In: I750e38a02710347a03783b820816eda6958ba0c6 Change-Id: I7658114b90232aa885438d69d396fcbd5f5c56d0 --- .../core/java/com/android/server/pm/OtaDexoptService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index 9420a6c5c15bb..5a7893aa7c2de 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -266,8 +266,8 @@ public class OtaDexoptService extends IOtaDexopt.Stub { throws InstallerException { final StringBuilder builder = new StringBuilder(); - // The version. Right now it's 7. - builder.append("7 "); + // The current version. + builder.append("8 "); builder.append("dexopt"); From a6d43e429536c964a5f005f7be2a0d67ff5d2a5e Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Thu, 8 Mar 2018 13:11:40 -0800 Subject: [PATCH 3/3] Clean up comment Bug: 63756964 Bug: 74245837 Test: untested (cherry picked from commit 28c4c9b04a0de99b4994707a499c3fe46c7a9ccd) Merged-In: I47a0fbab7da9cd87ec9e7dc03b2bc00e5668eae3 Change-Id: Id126490847c2601bb1584c43147acc89dc8baeff --- .../core/java/com/android/server/pm/PackageDexOptimizer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 8544ead5f4b82..9e7ad47deab9d 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -533,7 +533,7 @@ public class PackageDexOptimizer { // Some apps are executed with restrictions on hidden API usage. If this app is one // of them, pass a flag to dexopt to enable the same restrictions during compilation. int hiddenApiFlag = info.isAllowedToUseHiddenApi() ? 0 : DEXOPT_ENABLE_HIDDEN_API_CHECKS; - // Enable CompactDex generation for modes that aren't latency critical. + // Avoid generating CompactDex for modes that are latency critical. final int compilationReason = options.getCompilationReason(); boolean generateCompactDex = true; switch (compilationReason) {