From 48b3b3c71f76fa05de191b8460a186e9dbcc36bf Mon Sep 17 00:00:00 2001 From: Ulya Trafimovich Date: Fri, 13 Dec 2019 13:34:06 +0000 Subject: [PATCH] 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 --- java/dexpreopt.go | 11 ++--------- java/dexpreopt_bootjars.go | 19 +++++++++++-------- java/dexpreopt_config.go | 10 +++++++++- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 479dec60b..1192d929e 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -101,10 +101,6 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo 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 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo 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 1d363c963..571453102 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -220,15 +220,18 @@ func (d *dexpreoptBootJars) GenerateBuildActions(ctx android.SingletonContext) { 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 91e0dfbdd..d578b67e7 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -234,7 +234,7 @@ func artBootImageConfig(ctx android.PathContext) bootImageConfig { return *genBootImageConfigs(ctx)[artBootImageName] } -func defaultBootImageConfig(ctx android.PathContext) bootImageConfig { +func frameworkBootImageConfig(ctx android.PathContext) bootImageConfig { return *genBootImageConfigs(ctx)[frameworkBootImageName] } @@ -242,6 +242,14 @@ func apexBootImageConfig(ctx android.PathContext) bootImageConfig { 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)