From f44d36c8423f81cbb5e9f55d8813e26ffa1a7f3b Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Tue, 14 Mar 2017 14:18:46 +0000 Subject: Revert^2 "Hash-based DexCache field array." Test: testrunner.py --host --interpreter Bug: 30627598 This reverts commit 6374c58f2ea403b3a05fb27376110fe4d0fc8e3f. Change-Id: I275508e288a85d3aa08f7405a1a4f362af43b775 --- runtime/class_linker-inl.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'runtime/class_linker-inl.h') diff --git a/runtime/class_linker-inl.h b/runtime/class_linker-inl.h index bd510ca0e1..9ddc6cf0ae 100644 --- a/runtime/class_linker-inl.h +++ b/runtime/class_linker-inl.h @@ -161,9 +161,15 @@ inline ArtMethod* ClassLinker::ResolveMethod(Thread* self, return resolved_method; } -inline ArtField* ClassLinker::GetResolvedField(uint32_t field_idx, - ObjPtr dex_cache) { - return dex_cache->GetResolvedField(field_idx, image_pointer_size_); +inline ArtField* ClassLinker::LookupResolvedField(uint32_t field_idx, + ArtMethod* referrer, + bool is_static) { + ObjPtr dex_cache = referrer->GetDexCache(); + ArtField* field = dex_cache->GetResolvedField(field_idx, image_pointer_size_); + if (field == nullptr) { + field = LookupResolvedField(field_idx, dex_cache, referrer->GetClassLoader(), is_static); + } + return field; } inline ArtField* ClassLinker::ResolveField(uint32_t field_idx, @@ -171,7 +177,8 @@ inline ArtField* ClassLinker::ResolveField(uint32_t field_idx, bool is_static) { Thread::PoisonObjectPointersIfDebug(); ObjPtr declaring_class = referrer->GetDeclaringClass(); - ArtField* resolved_field = GetResolvedField(field_idx, referrer->GetDexCache()); + ArtField* resolved_field = + referrer->GetDexCache()->GetResolvedField(field_idx, image_pointer_size_); if (UNLIKELY(resolved_field == nullptr)) { StackHandleScope<2> hs(Thread::Current()); Handle dex_cache(hs.NewHandle(referrer->GetDexCache())); -- cgit v1.2.3-59-g8ed1b