summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ulya Trafimovich <skvadrik@google.com> 2020-01-27 14:50:38 +0000
committer Ulyana Trafimovich <skvadrik@google.com> 2020-01-28 17:04:36 +0000
commitc124d1dd977a2ddcd6e4928cfe6c0698f44d6523 (patch)
treeb3cbe2ead73a9ca14845f0b37d1254f8d81e79da
parentcaafd621eb33863630380818db918a2c93c9054e (diff)
Fix name-based detection of JIT-zygote boot image extension.
ART detects JIT-zygote boot image by the image name. This has been broken since boot image extension has been enabled for JIT-zygote config in CL I5493e575ebf90bad1d5ad2850004d54590bbc079. This CL replaces 'kApexBootImage' with 'kApexBootImageExtension', since the JIT-zygote image is always used with extension. Test: compare boot-framework.art and apex-framework.art, they were identical before this CL, and differ after this CL. Test: JIT-zygote config boots, steps 1-2: 1. Temporarily enable Jit zygote in the product device config (in this case device/google/muskie/aosp_walleye.mk): +# System server should not contain compiled code. +PRODUCT_SYSTEM_SERVER_COMPILER_FILTER := verify + +# Use the apex image for preopting. +DEXPREOPT_USE_APEX_IMAGE := true + +# Have the runtime pick up the apex image. +PRODUCT_PROPERTY_OVERRIDES += \ + dalvik.vm.boot-image=/apex/com.android.art/javalib/apex.art:/system/framework/apex-framework.art 2. Build and flash: $ lunch aosp_walleye-userdebug && m \ && adb reboot bootloader && fastboot flashall -w Change-Id: Ifd3d3c13107c2e4514eed7c4e2b1bbc5a5a12245
-rw-r--r--compiler/driver/compiler_options.h19
-rw-r--r--dex2oat/dex2oat.cc15
-rw-r--r--dex2oat/driver/compiler_driver.cc2
3 files changed, 19 insertions, 17 deletions
diff --git a/compiler/driver/compiler_options.h b/compiler/driver/compiler_options.h
index e24da593a7..a43390af72 100644
--- a/compiler/driver/compiler_options.h
+++ b/compiler/driver/compiler_options.h
@@ -70,11 +70,11 @@ class CompilerOptions final {
static constexpr size_t kUnsetInlineMaxCodeUnits = -1;
enum class ImageType : uint8_t {
- kNone, // JIT or AOT app compilation producing only an oat file but no image.
- kBootImage, // Creating boot image.
- kBootImageExtension, // Creating boot image extension.
- kAppImage, // Creating app image.
- kApexBootImage, // Creating the apex image for jit/zygote experiment b/119800099.
+ kNone, // JIT or AOT app compilation producing only an oat file but no image.
+ kBootImage, // Creating boot image.
+ kBootImageExtension, // Creating boot image extension.
+ kAppImage, // Creating app image.
+ kApexBootImageExtension, // Creating JIT-zygote boot image extension (b/119800099).
};
CompilerOptions();
@@ -194,16 +194,17 @@ class CompilerOptions final {
// Are we compiling a boot image?
bool IsBootImage() const {
- return image_type_ == ImageType::kBootImage || image_type_ == ImageType::kApexBootImage;
+ return image_type_ == ImageType::kBootImage;
}
- bool IsApexBootImage() const {
- return image_type_ == ImageType::kApexBootImage;
+ bool IsApexBootImageExtension() const {
+ return image_type_ == ImageType::kApexBootImageExtension;
}
// Are we compiling a boot image extension?
bool IsBootImageExtension() const {
- return image_type_ == ImageType::kBootImageExtension;
+ return image_type_ == ImageType::kBootImageExtension
+ || image_type_ == ImageType::kApexBootImageExtension;
}
bool IsBaseline() const {
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc
index d582cec6a4..d983d94f31 100644
--- a/dex2oat/dex2oat.cc
+++ b/dex2oat/dex2oat.cc
@@ -828,13 +828,14 @@ class Dex2Oat final {
DCHECK(compiler_options_->image_type_ == CompilerOptions::ImageType::kNone);
if (!image_filenames_.empty() || image_fd_ != -1) {
- if (!boot_image_filename_.empty()) {
- compiler_options_->image_type_ = CompilerOptions::ImageType::kBootImageExtension;
- } else if (android::base::EndsWith(image_filenames_[0], "apex.art")) {
- compiler_options_->image_type_ = CompilerOptions::ImageType::kApexBootImage;
- } else {
- compiler_options_->image_type_ = CompilerOptions::ImageType::kBootImage;
- }
+ // If no boot image is provided, then dex2oat is compiling the primary boot image,
+ // otherwise it is compiling the boot image extension. In the case of JIT-zygote
+ // extension the primary boot image has a special name "apex.art".
+ compiler_options_->image_type_ = boot_image_filename_.empty()
+ ? CompilerOptions::ImageType::kBootImage
+ : android::base::EndsWith(boot_image_filename_, "apex.art")
+ ? CompilerOptions::ImageType::kApexBootImageExtension
+ : CompilerOptions::ImageType::kBootImageExtension;
}
if (app_image_fd_ != -1 || !app_image_file_name_.empty()) {
if (compiler_options_->IsBootImage() || compiler_options_->IsBootImageExtension()) {
diff --git a/dex2oat/driver/compiler_driver.cc b/dex2oat/driver/compiler_driver.cc
index ae73f49508..94391eb957 100644
--- a/dex2oat/driver/compiler_driver.cc
+++ b/dex2oat/driver/compiler_driver.cc
@@ -936,7 +936,7 @@ bool CompilerDriver::ShouldCompileBasedOnProfile(const MethodReference& method_r
// If compiling the apex image, filter out methods not in an apex file (the profile used
// for boot classpath is the same between the apex image and the boot image, so it includes
/// framewkro methods).
- if (compiler_options_->IsApexBootImage() &&
+ if (compiler_options_->IsApexBootImageExtension() &&
!android::base::StartsWith(method_ref.dex_file->GetLocation(), "/apex")) {
return false;
}