Deduplicate interned image strings.
Also fix a bug in relocation; even for -Xnorelocate we need
to relocate second and later extension if it's not compiled
against all previous boot image components.
Also clean up InternTable includes.
Test: New tests in image_space_test.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: aosp_taimen-userdebug boots.
Bug: 152037801
Change-Id: Ie6ae70721f4ffb48950bd248ffa123dee460bcd7
diff --git a/runtime/common_runtime_test.h b/runtime/common_runtime_test.h
index 2dc8744..711bc59 100644
--- a/runtime/common_runtime_test.h
+++ b/runtime/common_runtime_test.h
@@ -20,6 +20,7 @@
#include <gtest/gtest.h>
#include <jni.h>
+#include <functional>
#include <string>
#include <android-base/logging.h>
@@ -38,6 +39,9 @@
namespace art {
+class MethodReference;
+class TypeReference;
+
using LogSeverity = android::base::LogSeverity;
using ScopedLogSeverity = android::base::ScopedLogSeverity;
@@ -111,7 +115,8 @@
REQUIRES_SHARED(Locks::mutator_lock_);
bool StartDex2OatCommandLine(/*out*/std::vector<std::string>* argv,
- /*out*/std::string* error_msg);
+ /*out*/std::string* error_msg,
+ bool use_runtime_bcp_and_image = true);
bool CompileBootImage(const std::vector<std::string>& extra_args,
const std::string& image_file_name_prefix,
@@ -162,6 +167,17 @@
jobject parent_loader,
jobject shared_libraries = nullptr);
+ void VisitDexes(ArrayRef<const std::string> dexes,
+ const std::function<void(MethodReference)>& method_visitor,
+ const std::function<void(TypeReference)>& class_visitor,
+ size_t method_frequency = 1u,
+ size_t class_frequency = 1u);
+
+ void GenerateProfile(ArrayRef<const std::string> dexes,
+ File* out_file,
+ size_t method_frequency = 1u,
+ size_t type_frequency = 1u);
+
std::unique_ptr<Runtime> runtime_;
// The class_linker_, java_lang_dex_file_, and boot_class_path_ are all