summaryrefslogtreecommitdiffstats
path: root/runtime/class_linker_test.cc
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-03-25 17:19:53 -0700
committerAndreas Gampe <agampe@google.com>2015-03-27 21:43:21 -0700
commit81c6f8db12b203878a7d72444ead2bc7cf5c47ad (patch)
tree11caae30b75b700ac648356fd30759a6154be997 /runtime/class_linker_test.cc
parentcac51526bbd03947676a8d49700425b19a57e447 (diff)
downloadart-81c6f8db12b203878a7d72444ead2bc7cf5c47ad.tar.gz
art-81c6f8db12b203878a7d72444ead2bc7cf5c47ad.tar.bz2
art-81c6f8db12b203878a7d72444ead2bc7cf5c47ad.zip
ART: PathClassLoader for compiler
Use an actual PathClassLoader when compiling apps, instead of a side structure and cutout. This CL sets up a minimal object 'cluster' that recreates the Java side of a regular ClassLoader such that the Class-Linker will recognize it and use the internal native fast-path. This CL removes the now unnecessary compile-time-classpath and replaces it with a single 'compiling-the-boot-image' flag in the compiler callbacks. Note: This functionality is *only* intended for the compiler, as the objects have not been completely initialized. Bug: 19781184 Change-Id: I7f36af12dd7852d21281110a25c119e8c0669c1d
Diffstat (limited to 'runtime/class_linker_test.cc')
-rw-r--r--runtime/class_linker_test.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc
index 1789ab12d2..a895a494a1 100644
--- a/runtime/class_linker_test.cc
+++ b/runtime/class_linker_test.cc
@@ -621,6 +621,20 @@ TEST_F(ClassLinkerTest, FindClassNonexistent) {
AssertNonExistentClass("LNoSuchClass;");
}
+TEST_F(ClassLinkerTest, GetDexFiles) {
+ ScopedObjectAccess soa(Thread::Current());
+
+ jobject jclass_loader = LoadDex("Nested");
+ std::vector<const DexFile*> dex_files(GetDexFiles(jclass_loader));
+ ASSERT_EQ(dex_files.size(), 1U);
+ EXPECT_TRUE(EndsWith(dex_files[0]->GetLocation(), "Nested.jar"));
+
+ jobject jclass_loader2 = LoadDex("MultiDex");
+ std::vector<const DexFile*> dex_files2(GetDexFiles(jclass_loader2));
+ ASSERT_EQ(dex_files2.size(), 2U);
+ EXPECT_TRUE(EndsWith(dex_files2[0]->GetLocation(), "MultiDex.jar"));
+}
+
TEST_F(ClassLinkerTest, FindClassNested) {
ScopedObjectAccess soa(Thread::Current());
StackHandleScope<1> hs(soa.Self());
@@ -985,11 +999,10 @@ TEST_F(ClassLinkerTest, ResolveVerifyAndClinit) {
ScopedObjectAccess soa(Thread::Current());
jobject jclass_loader = LoadDex("StaticsFromCode");
+ const DexFile* dex_file = GetFirstDexFile(jclass_loader);
StackHandleScope<1> hs(soa.Self());
Handle<mirror::ClassLoader> class_loader(
hs.NewHandle(soa.Decode<mirror::ClassLoader*>(jclass_loader)));
- const DexFile* dex_file = Runtime::Current()->GetCompileTimeClassPath(jclass_loader)[0];
- CHECK(dex_file != nullptr);
mirror::Class* klass = class_linker_->FindClass(soa.Self(), "LStaticsFromCode;", class_loader);
mirror::ArtMethod* clinit = klass->FindClassInitializer();
mirror::ArtMethod* getS0 = klass->FindDirectMethod("getS0", "()Ljava/lang/Object;");