diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-11-24 18:29:54 -0800 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2014-11-25 16:02:04 -0800 |
commit | eace45873190a27302b3644c32ec82854b59d299 (patch) | |
tree | 73fbf327839263b6847bdc4359ac1dbea2b897e3 /runtime/class_linker_test.cc | |
parent | 8ac8d5556fae9c728bcebcc9036a1bbf40087c76 (diff) | |
download | art-eace45873190a27302b3644c32ec82854b59d299.tar.gz art-eace45873190a27302b3644c32ec82854b59d299.tar.bz2 art-eace45873190a27302b3644c32ec82854b59d299.zip |
Move dexCacheStrings from ArtMethod to Class
Adds one load for const strings which are not direct.
Saves >= 60KB of memory avg per app.
Image size: -350KB.
Bug: 17643507
Change-Id: I2d1a3253d9de09682be9bc6b420a29513d592cc8
(cherry picked from commit f521f423b66e952f746885dd9f6cf8ef2788955d)
Diffstat (limited to 'runtime/class_linker_test.cc')
-rw-r--r-- | runtime/class_linker_test.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc index 0c86761979..99d0746962 100644 --- a/runtime/class_linker_test.cc +++ b/runtime/class_linker_test.cc @@ -164,11 +164,8 @@ class ClassLinkerTest : public CommonRuntimeTest { EXPECT_TRUE(method->GetName() != nullptr); EXPECT_TRUE(method->GetSignature() != Signature::NoSignature()); - EXPECT_TRUE(method->GetDexCacheStrings() != nullptr); EXPECT_TRUE(method->HasDexCacheResolvedMethods()); EXPECT_TRUE(method->HasDexCacheResolvedTypes()); - EXPECT_EQ(method->GetDeclaringClass()->GetDexCache()->GetStrings(), - method->GetDexCacheStrings()); EXPECT_TRUE(method->HasSameDexCacheResolvedMethods( method->GetDeclaringClass()->GetDexCache()->GetResolvedMethods())); EXPECT_TRUE(method->HasSameDexCacheResolvedTypes( @@ -205,6 +202,8 @@ class ClassLinkerTest : public CommonRuntimeTest { EXPECT_FALSE(klass->IsArrayClass()); EXPECT_TRUE(klass->GetComponentType() == nullptr); EXPECT_TRUE(klass->IsInSamePackage(klass.Get())); + EXPECT_TRUE(klass->GetDexCacheStrings() != nullptr); + EXPECT_EQ(klass->GetDexCacheStrings(), klass->GetDexCache()->GetStrings()); std::string temp2; EXPECT_TRUE(mirror::Class::IsInSamePackage(klass->GetDescriptor(&temp), klass->GetDescriptor(&temp2))); @@ -399,7 +398,8 @@ struct CheckOffsets { bool error = false; - if (!klass->IsClassClass() && !is_static) { + // Art method have a different size due to the padding field. + if (!klass->IsArtMethodClass() && !klass->IsClassClass() && !is_static) { size_t expected_size = is_static ? klass->GetClassSize(): klass->GetObjectSize(); if (sizeof(T) != expected_size) { LOG(ERROR) << "Class size mismatch:" @@ -496,7 +496,6 @@ struct ArtMethodOffsets : public CheckOffsets<mirror::ArtMethod> { offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, declaring_class_), "declaringClass")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, dex_cache_resolved_methods_), "dexCacheResolvedMethods")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, dex_cache_resolved_types_), "dexCacheResolvedTypes")); - offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, dex_cache_strings_), "dexCacheStrings")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, dex_code_item_offset_), "dexCodeItemOffset")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, dex_method_index_), "dexMethodIndex")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::ArtMethod, method_index_), "methodIndex")); @@ -511,6 +510,7 @@ struct ClassOffsets : public CheckOffsets<mirror::Class> { offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, clinit_thread_id_), "clinitThreadId")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, component_type_), "componentType")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, dex_cache_), "dexCache")); + offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, dex_cache_strings_), "dexCacheStrings")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, dex_class_def_idx_), "dexClassDefIndex")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, dex_type_idx_), "dexTypeIndex")); offsets.push_back(CheckOffset(OFFSETOF_MEMBER(mirror::Class, direct_methods_), "directMethods")); |