From d1eaf0dc9abc42dbcbbd9c4b98bf930ae5f394f3 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Thu, 29 Oct 2015 12:18:29 +0000 Subject: Keep list of dex files for oat file in CompilerDriver. Use this list to improve invoke-static/-direct dispatch for intra-oat calls. Also fix a latent ArmBaseRelativePatcher::ReserveSpaceEnd() bug exposed by a buggy early version of this CL: when we have unresolved patches at the end of all code, we need to emit a final thunk. Though the OatWriter will try to patch the unresolved call to a trampoline at the beginning of the oat file, that trampoline may be too far and the relative patcher doesn't know about it anyway, so it needs to assume that a thunk is needed. This reduces the overall size of oat files present in dalvik cache on Nexus 9 after first boot by over 1MiB, AOSP ToT, aosp_flounder-userdebug build. Change-Id: I98604b70cb17377eed057c1c23971865cf344e43 --- compiler/driver/compiler_driver.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'compiler/driver/compiler_driver.h') diff --git a/compiler/driver/compiler_driver.h b/compiler/driver/compiler_driver.h index 485cdcfb1b..4ed4dc60d2 100644 --- a/compiler/driver/compiler_driver.h +++ b/compiler/driver/compiler_driver.h @@ -39,6 +39,7 @@ #include "runtime.h" #include "safe_map.h" #include "thread_pool.h" +#include "utils/array_ref.h" #include "utils/dex_cache_arrays_layout.h" namespace art { @@ -101,7 +102,20 @@ class CompilerDriver { ~CompilerDriver(); - void CompileAll(jobject class_loader, const std::vector& dex_files, + // Set dex files that will be stored in the oat file after being compiled. + void SetDexFilesForOatFile(const std::vector& dex_files) { + dex_files_for_oat_file_ = &dex_files; + } + + // Get dex file that will be stored in the oat file after being compiled. + ArrayRef GetDexFilesForOatFile() const { + return (dex_files_for_oat_file_ != nullptr) + ? ArrayRef(*dex_files_for_oat_file_) + : ArrayRef(); + } + + void CompileAll(jobject class_loader, + const std::vector& dex_files, TimingLogger* timings) REQUIRES(!Locks::mutator_lock_, !compiled_classes_lock_); @@ -661,6 +675,9 @@ class CompilerDriver { bool support_boot_image_fixup_; + // List of dex files that will be stored in the oat file. + const std::vector* dex_files_for_oat_file_; + CompiledMethodStorage compiled_method_storage_; friend class CompileClassVisitor; -- cgit v1.2.3-59-g8ed1b