From 42c52f53b3c85b5e3c984bca8eaec2e03893dd2e Mon Sep 17 00:00:00 2001 From: Alex Light Date: Mon, 2 Dec 2019 18:50:16 +0000 Subject: Revert "Make opaque-jni-ids:swapable more efficient" This reverts commit 4e7dd70e3ee7a25089bed791df8865966cb4b837. Reason for revert: Breaks art-jit column Change-Id: If1ea54c45f340a06b4601c1c8494b7dd7e8f7bf8 Test: Manual Test: count-fields.py Bug: 134162467 --- runtime/mirror/class_ext-inl.h | 100 +++++++++++------------------------------ 1 file changed, 27 insertions(+), 73 deletions(-) (limited to 'runtime/mirror/class_ext-inl.h') diff --git a/runtime/mirror/class_ext-inl.h b/runtime/mirror/class_ext-inl.h index 99f7f49fc5..fd81a2a3ed 100644 --- a/runtime/mirror/class_ext-inl.h +++ b/runtime/mirror/class_ext-inl.h @@ -22,40 +22,30 @@ #include "array-inl.h" #include "art_method-inl.h" #include "base/enums.h" -#include "base/globals.h" -#include "class_root.h" #include "handle_scope.h" -#include "jni/jni_internal.h" -#include "jni_id_type.h" -#include "mirror/array.h" #include "mirror/object.h" #include "object-inl.h" #include "verify_object.h" -#include "well_known_classes.h" namespace art { namespace mirror { template -inline bool ClassExt::EnsureJniIdsArrayPresent(MemberOffset off, size_t count) { - ObjPtr existing( - GetFieldObject(off)); +inline ObjPtr ClassExt::EnsureJniIdsArrayPresent(MemberOffset off, size_t count) { + ObjPtr existing( + GetFieldObject(off)); if (!existing.IsNull()) { - return true; + return existing; } Thread* self = Thread::Current(); StackHandleScope<2> hs(self); Handle h_this(hs.NewHandle(this)); - MutableHandle new_arr(hs.NewHandle(nullptr)); - if (UNLIKELY(Runtime::Current()->GetJniIdType() == JniIdType::kSwapablePointer)) { - new_arr.Assign(Runtime::Current()->GetJniIdManager()->GetPointerMarker()); - } else { - new_arr.Assign(Runtime::Current()->GetClassLinker()->AllocPointerArray(self, count)); - } + Handle new_arr( + hs.NewHandle(Runtime::Current()->GetClassLinker()->AllocPointerArray(self, count))); if (new_arr.IsNull()) { // Fail. self->AssertPendingOOMException(); - return false; + return nullptr; } bool set; // Set the ext_data_ field using CAS semantics. @@ -66,62 +56,40 @@ inline bool ClassExt::EnsureJniIdsArrayPresent(MemberOffset off, size_t count) { set = h_this->CasFieldObject( off, nullptr, new_arr.Get(), CASMode::kStrong, std::memory_order_seq_cst); } - if (kIsDebugBuild) { - ObjPtr ret( - set ? new_arr.Get() - : h_this->GetFieldObject(off)); - CHECK(!ret.IsNull()); - } - return true; + ObjPtr ret( + set ? new_arr.Get() + : h_this->GetFieldObject(off)); + CHECK(!ret.IsNull()); + return ret; } template -inline bool ClassExt::EnsureJMethodIDsArrayPresent(size_t count) { +inline ObjPtr ClassExt::EnsureJMethodIDsArrayPresent(size_t count) { return EnsureJniIdsArrayPresent( MemberOffset(OFFSET_OF_OBJECT_MEMBER(ClassExt, jmethod_ids_)), count); } template -inline bool ClassExt::EnsureStaticJFieldIDsArrayPresent(size_t count) { +inline ObjPtr ClassExt::EnsureStaticJFieldIDsArrayPresent(size_t count) { return EnsureJniIdsArrayPresent( MemberOffset(OFFSET_OF_OBJECT_MEMBER(ClassExt, static_jfield_ids_)), count); } template -inline bool ClassExt::EnsureInstanceJFieldIDsArrayPresent(size_t count) { +inline ObjPtr ClassExt::EnsureInstanceJFieldIDsArrayPresent(size_t count) { return EnsureJniIdsArrayPresent( MemberOffset(OFFSET_OF_OBJECT_MEMBER(ClassExt, instance_jfield_ids_)), count); } template -inline ObjPtr ClassExt::GetInstanceJFieldIDs() { - return GetFieldObject( +inline ObjPtr ClassExt::GetInstanceJFieldIDs() { + return GetFieldObject( OFFSET_OF_OBJECT_MEMBER(ClassExt, instance_jfield_ids_)); } -template -inline bool ClassExt::HasInstanceFieldPointerIdMarker() { - ObjPtr arr(GetInstanceJFieldIDs()); - return !arr.IsNull() && !arr->IsArrayInstance(); -} -template -inline ObjPtr ClassExt::GetInstanceJFieldIDsPointerArray() { - DCHECK(!HasInstanceFieldPointerIdMarker()); - return down_cast(GetInstanceJFieldIDs().Ptr()); -} template -inline ObjPtr ClassExt::GetStaticJFieldIDs() { - return GetFieldObject( +inline ObjPtr ClassExt::GetStaticJFieldIDs() { + return GetFieldObject( OFFSET_OF_OBJECT_MEMBER(ClassExt, static_jfield_ids_)); } -template -inline ObjPtr ClassExt::GetStaticJFieldIDsPointerArray() { - DCHECK(!HasStaticFieldPointerIdMarker()); - return down_cast(GetStaticJFieldIDs().Ptr()); -} -template -inline bool ClassExt::HasStaticFieldPointerIdMarker() { - ObjPtr arr(GetStaticJFieldIDs()); - return !arr.IsNull() && !arr->IsArrayInstance(); -} template inline ObjPtr ClassExt::GetObsoleteClass() { @@ -130,21 +98,10 @@ inline ObjPtr ClassExt::GetObsoleteClass() { } template -inline ObjPtr ClassExt::GetJMethodIDs() { - return GetFieldObject( +inline ObjPtr ClassExt::GetJMethodIDs() { + return GetFieldObject( OFFSET_OF_OBJECT_MEMBER(ClassExt, jmethod_ids_)); } -template -inline ObjPtr ClassExt::GetJMethodIDsPointerArray() { - DCHECK(!HasMethodPointerIdMarker()); - return down_cast(GetJMethodIDs().Ptr()); -} -template -inline bool ClassExt::HasMethodPointerIdMarker() { - ObjPtr arr(GetJMethodIDs()); - return !arr.IsNull() && !arr->IsArrayInstance(); -} - inline ObjPtr ClassExt::GetVerifyError() { return GetFieldObject(OFFSET_OF_OBJECT_MEMBER(ClassExt, verify_error_)); @@ -189,9 +146,8 @@ void ClassExt::VisitMethods(Visitor visitor, PointerSize pointer_size) { template void ClassExt::VisitJMethodIDs(Visitor v) { - ObjPtr arr(GetJMethodIDs()); - if (!arr.IsNull() && arr->IsArrayInstance()) { - ObjPtr marr(down_cast(arr.Ptr())); + ObjPtr marr(GetJMethodIDs()); + if (!marr.IsNull()) { int32_t len = marr->GetLength(); for (int32_t i = 0; i < len; i++) { jmethodID id = marr->GetElementPtrSize(i, kRuntimePointerSize); @@ -203,9 +159,8 @@ void ClassExt::VisitJMethodIDs(Visitor v) { } template void ClassExt::VisitJFieldIDs(Visitor v) { - ObjPtr sarr_obj(GetStaticJFieldIDs()); - if (!sarr_obj.IsNull() && sarr_obj->IsArrayInstance()) { - ObjPtr sarr(down_cast(sarr_obj->AsArray().Ptr())); + ObjPtr sarr(GetStaticJFieldIDs()); + if (!sarr.IsNull()) { int32_t len = sarr->GetLength(); for (int32_t i = 0; i < len; i++) { jfieldID id = sarr->GetElementPtrSize(i, kRuntimePointerSize); @@ -214,9 +169,8 @@ void ClassExt::VisitJFieldIDs(Visitor v) { } } } - ObjPtr iarr_obj(GetInstanceJFieldIDs()); - if (!iarr_obj.IsNull() && iarr_obj->IsArrayInstance()) { - ObjPtr iarr(down_cast(iarr_obj->AsArray().Ptr())); + ObjPtr iarr(GetInstanceJFieldIDs()); + if (!iarr.IsNull()) { int32_t len = iarr->GetLength(); for (int32_t i = 0; i < len; i++) { jfieldID id = iarr->GetElementPtrSize(i, kRuntimePointerSize); -- cgit v1.2.3-59-g8ed1b