diff options
| author | 2018-03-06 18:28:22 -0800 | |
|---|---|---|
| committer | 2018-03-07 09:25:17 -0800 | |
| commit | f890c3ea5c62fc44aa84fbd011be249accbaff08 (patch) | |
| tree | 0f057f70b04dac2e9e046deae44282dfd06f93b2 | |
| parent | c2925aff38e4ab105d64aaf022d309f0fb2a858d (diff) | |
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
Change-Id: I4a2ff9383251e67b260cff5ec8a326c7a4f7faca
| -rw-r--r-- | services/core/java/com/android/server/pm/Installer.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageDexOptimizer.java | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index ab3c9996c59a..168b10b75681 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -62,6 +62,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 51e035b1676d..876589c9eb87 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); } |