diff options
author | 2018-04-03 16:04:32 +0000 | |
---|---|---|
committer | 2018-04-03 16:04:32 +0000 | |
commit | 7ee86d1dbce8afa70ff699c7a8414b160aba8b74 (patch) | |
tree | e2d550ea8829b7ceb5610cd03c617567e6f20020 | |
parent | 3a2d4143eeca73c557df24cb78428629a9bb5546 (diff) | |
parent | a9c343386d5505d7111aee3c1ffec409c9730f21 (diff) |
Merge "Add dedicated flag to control app image generation" into pi-dev
3 files changed, 17 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index 9d3f48b428ce..45f1a2b8250a 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -67,6 +67,8 @@ public class Installer extends SystemService { 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; + /** Indicates that dexopt should generate an app image */ + public static final int DEXOPT_GENERATE_APP_IMAGE = 1 << 12; // 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/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index 5a7893aa7c2d..320affb1eee2 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -267,7 +267,7 @@ public class OtaDexoptService extends IOtaDexopt.Stub { final StringBuilder builder = new StringBuilder(); // The current version. - builder.append("8 "); + builder.append("9 "); builder.append("dexopt"); diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 892fa12ddf52..ebab1a72a227 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -60,6 +60,7 @@ 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.Installer.DEXOPT_GENERATE_APP_IMAGE; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets; @@ -521,6 +522,10 @@ public class PackageDexOptimizer { return getDexFlags(pkg.applicationInfo, compilerFilter, options); } + private boolean isAppImageEnabled() { + return SystemProperties.get("dalvik.vm.appimageformat", "").length() > 0; + } + private int getDexFlags(ApplicationInfo info, String compilerFilter, DexoptOptions options) { int flags = info.flags; boolean debuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; @@ -547,6 +552,14 @@ public class PackageDexOptimizer { case PackageManagerService.REASON_INSTALL: generateCompactDex = false; } + // Use app images only if it is enabled and we are compiling + // profile-guided (so the app image doesn't conservatively contain all classes). + // If the app didn't request for the splits to be loaded in isolation or if it does not + // declare inter-split dependencies, then all the splits will be loaded in the base + // apk class loader (in the order of their definition, otherwise disable app images + // because they are unsupported for multiple class loaders. b/7269679 + boolean generateAppImage = isProfileGuidedFilter && (info.splitDependencies == null || + !info.requestsIsolatedSplitLoading()) && isAppImageEnabled(); int dexFlags = (isPublic ? DEXOPT_PUBLIC : 0) | (debuggable ? DEXOPT_DEBUGGABLE : 0) @@ -554,6 +567,7 @@ public class PackageDexOptimizer { | (options.isBootComplete() ? DEXOPT_BOOTCOMPLETE : 0) | (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0) | (generateCompactDex ? DEXOPT_GENERATE_COMPACT_DEX : 0) + | (generateAppImage ? DEXOPT_GENERATE_APP_IMAGE : 0) | hiddenApiFlag; return adjustDexoptFlags(dexFlags); } |