Consistently use either "boot" or "apex" boot image as the default.
Previous CL Ia9b34aa92ebb1b4de96ea0f8f290d798be19b2cf introduced
asymmetry in handling "boot" and "apex" boot images: in JIT-zygote
experiment, though the "apex" boot image was installed, the "boot"
boot image was still used for generating dexpreopt configs.
It is unclear why this asymmetry was needed at that point; it seems
incorrect to use different boot images for dexpreopting and for
installing on device. After recent changes the asymmetry started
breaking walleye_jitzygote-userdebug on git_rvc-release, because APK
dexpreopt commands refer to inexistent boot image files.
Test: lunch aosp_walleye-userdebug && m
Test: cherry-pick CL in internal, walleye_jitzygote-userdebug boots
Change-Id: Id877c10269cf79caf6ae74b1dc169a31e6a2211b
diff --git a/java/dexpreopt.go b/java/dexpreopt.go
index 479dec6..1192d92 100644
--- a/java/dexpreopt.go
+++ b/java/dexpreopt.go
@@ -101,10 +101,6 @@
global := dexpreoptGlobalConfig(ctx)
bootImage := defaultBootImageConfig(ctx)
- defaultBootImage := bootImage
- if global.UseApexImage {
- bootImage = apexBootImageConfig(ctx)
- }
var archs []android.ArchType
for _, a := range ctx.MultiTargets() {
@@ -174,11 +170,8 @@
DexPreoptImagesDeps: imagesDeps,
DexPreoptImageLocations: bootImage.imageLocations,
- // We use the dex paths and dex locations of the default boot image, as it
- // contains the full dexpreopt boot classpath. Other images may just contain a subset of
- // the dexpreopt boot classpath.
- PreoptBootClassPathDexFiles: defaultBootImage.dexPathsDeps.Paths(),
- PreoptBootClassPathDexLocations: defaultBootImage.dexLocationsDeps,
+ PreoptBootClassPathDexFiles: bootImage.dexPathsDeps.Paths(),
+ PreoptBootClassPathDexLocations: bootImage.dexLocationsDeps,
PreoptExtractedApk: false,
diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go
index 1d363c9..5714531 100644
--- a/java/dexpreopt_bootjars.go
+++ b/java/dexpreopt_bootjars.go
@@ -220,15 +220,18 @@
return
}
- // Always create the default boot image first, to get a unique profile rule for all images.
- d.defaultBootImage = buildBootImage(ctx, defaultBootImageConfig(ctx))
- if !skipDexpreoptArtBootJars(ctx) {
- // Create boot image for the ART apex (build artifacts are accessed via the global boot image config).
- d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx)))
- }
+ // Default boot image is either the framework one, or the JIT-zygote one.
+ // The boot image that is created first is used to get a unique profile rule for all images.
if global.GenerateApexImage {
- // Create boot images for the JIT-zygote experiment.
- d.otherImages = append(d.otherImages, buildBootImage(ctx, apexBootImageConfig(ctx)))
+ d.defaultBootImage = buildBootImage(ctx, apexBootImageConfig(ctx))
+ d.otherImages = append(d.otherImages, buildBootImage(ctx, frameworkBootImageConfig(ctx)))
+ } else {
+ d.defaultBootImage = buildBootImage(ctx, frameworkBootImageConfig(ctx))
+ }
+
+ // Create the ART boot image.
+ if !skipDexpreoptArtBootJars(ctx) {
+ d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx)))
}
dumpOatRules(ctx, d.defaultBootImage)
diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go
index 91e0dfb..d578b67 100644
--- a/java/dexpreopt_config.go
+++ b/java/dexpreopt_config.go
@@ -234,7 +234,7 @@
return *genBootImageConfigs(ctx)[artBootImageName]
}
-func defaultBootImageConfig(ctx android.PathContext) bootImageConfig {
+func frameworkBootImageConfig(ctx android.PathContext) bootImageConfig {
return *genBootImageConfigs(ctx)[frameworkBootImageName]
}
@@ -242,6 +242,14 @@
return *genBootImageConfigs(ctx)[apexBootImageName]
}
+func defaultBootImageConfig(ctx android.PathContext) bootImageConfig {
+ if dexpreoptGlobalConfig(ctx).UseApexImage {
+ return apexBootImageConfig(ctx)
+ } else {
+ return frameworkBootImageConfig(ctx)
+ }
+}
+
func defaultBootclasspath(ctx android.PathContext) []string {
return ctx.Config().OnceStringSlice(defaultBootclasspathKey, func() []string {
global := dexpreoptGlobalConfig(ctx)