diff options
| author | 2019-12-02 18:50:16 +0000 | |
|---|---|---|
| committer | 2019-12-02 18:52:38 +0000 | |
| commit | 42c52f53b3c85b5e3c984bca8eaec2e03893dd2e (patch) | |
| tree | 1589dd3831503767b445734c02bf5e9e4abaaa0e /runtime/mirror/class_ext-inl.h | |
| parent | f1b809ce611e943f926fff97cefe0930226ffcc2 (diff) | |
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
Diffstat (limited to 'runtime/mirror/class_ext-inl.h')
| -rw-r--r-- | runtime/mirror/class_ext-inl.h | 100 |
1 files changed, 27 insertions, 73 deletions
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 <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::EnsureJniIdsArrayPresent(MemberOffset off, size_t count) { - ObjPtr<Object> existing( - GetFieldObject<Object, kVerifyFlags, kReadBarrierOption>(off)); +inline ObjPtr<PointerArray> ClassExt::EnsureJniIdsArrayPresent(MemberOffset off, size_t count) { + ObjPtr<PointerArray> existing( + GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>(off)); if (!existing.IsNull()) { - return true; + return existing; } Thread* self = Thread::Current(); StackHandleScope<2> hs(self); Handle<ClassExt> h_this(hs.NewHandle(this)); - MutableHandle<Object> new_arr(hs.NewHandle<Object>(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<PointerArray> 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<false>( off, nullptr, new_arr.Get(), CASMode::kStrong, std::memory_order_seq_cst); } - if (kIsDebugBuild) { - ObjPtr<Object> ret( - set ? new_arr.Get() - : h_this->GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>(off)); - CHECK(!ret.IsNull()); - } - return true; + ObjPtr<PointerArray> ret( + set ? new_arr.Get() + : h_this->GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>(off)); + CHECK(!ret.IsNull()); + return ret; } template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::EnsureJMethodIDsArrayPresent(size_t count) { +inline ObjPtr<PointerArray> ClassExt::EnsureJMethodIDsArrayPresent(size_t count) { return EnsureJniIdsArrayPresent<kVerifyFlags, kReadBarrierOption>( MemberOffset(OFFSET_OF_OBJECT_MEMBER(ClassExt, jmethod_ids_)), count); } template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::EnsureStaticJFieldIDsArrayPresent(size_t count) { +inline ObjPtr<PointerArray> ClassExt::EnsureStaticJFieldIDsArrayPresent(size_t count) { return EnsureJniIdsArrayPresent<kVerifyFlags, kReadBarrierOption>( MemberOffset(OFFSET_OF_OBJECT_MEMBER(ClassExt, static_jfield_ids_)), count); } template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::EnsureInstanceJFieldIDsArrayPresent(size_t count) { +inline ObjPtr<PointerArray> ClassExt::EnsureInstanceJFieldIDsArrayPresent(size_t count) { return EnsureJniIdsArrayPresent<kVerifyFlags, kReadBarrierOption>( MemberOffset(OFFSET_OF_OBJECT_MEMBER(ClassExt, instance_jfield_ids_)), count); } template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline ObjPtr<Object> ClassExt::GetInstanceJFieldIDs() { - return GetFieldObject<Object, kVerifyFlags, kReadBarrierOption>( +inline ObjPtr<PointerArray> ClassExt::GetInstanceJFieldIDs() { + return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>( OFFSET_OF_OBJECT_MEMBER(ClassExt, instance_jfield_ids_)); } -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::HasInstanceFieldPointerIdMarker() { - ObjPtr<Object> arr(GetInstanceJFieldIDs<kVerifyFlags, kReadBarrierOption>()); - return !arr.IsNull() && !arr->IsArrayInstance(); -} -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline ObjPtr<PointerArray> ClassExt::GetInstanceJFieldIDsPointerArray() { - DCHECK(!HasInstanceFieldPointerIdMarker()); - return down_cast<PointerArray*>(GetInstanceJFieldIDs<kVerifyFlags, kReadBarrierOption>().Ptr()); -} template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline ObjPtr<Object> ClassExt::GetStaticJFieldIDs() { - return GetFieldObject<Object, kVerifyFlags, kReadBarrierOption>( +inline ObjPtr<PointerArray> ClassExt::GetStaticJFieldIDs() { + return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>( OFFSET_OF_OBJECT_MEMBER(ClassExt, static_jfield_ids_)); } -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline ObjPtr<PointerArray> ClassExt::GetStaticJFieldIDsPointerArray() { - DCHECK(!HasStaticFieldPointerIdMarker()); - return down_cast<PointerArray*>(GetStaticJFieldIDs<kVerifyFlags, kReadBarrierOption>().Ptr()); -} -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::HasStaticFieldPointerIdMarker() { - ObjPtr<Object> arr(GetStaticJFieldIDs<kVerifyFlags, kReadBarrierOption>()); - return !arr.IsNull() && !arr->IsArrayInstance(); -} template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> inline ObjPtr<Class> ClassExt::GetObsoleteClass() { @@ -130,21 +98,10 @@ inline ObjPtr<Class> ClassExt::GetObsoleteClass() { } template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline ObjPtr<Object> ClassExt::GetJMethodIDs() { - return GetFieldObject<Object, kVerifyFlags, kReadBarrierOption>( +inline ObjPtr<PointerArray> ClassExt::GetJMethodIDs() { + return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>( OFFSET_OF_OBJECT_MEMBER(ClassExt, jmethod_ids_)); } -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline ObjPtr<PointerArray> ClassExt::GetJMethodIDsPointerArray() { - DCHECK(!HasMethodPointerIdMarker()); - return down_cast<PointerArray*>(GetJMethodIDs<kVerifyFlags, kReadBarrierOption>().Ptr()); -} -template <VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> -inline bool ClassExt::HasMethodPointerIdMarker() { - ObjPtr<Object> arr(GetJMethodIDs<kVerifyFlags, kReadBarrierOption>()); - return !arr.IsNull() && !arr->IsArrayInstance(); -} - inline ObjPtr<Object> ClassExt::GetVerifyError() { return GetFieldObject<ClassExt>(OFFSET_OF_OBJECT_MEMBER(ClassExt, verify_error_)); @@ -189,9 +146,8 @@ void ClassExt::VisitMethods(Visitor visitor, PointerSize pointer_size) { template<ReadBarrierOption kReadBarrierOption, class Visitor> void ClassExt::VisitJMethodIDs(Visitor v) { - ObjPtr<Object> arr(GetJMethodIDs<kDefaultVerifyFlags, kReadBarrierOption>()); - if (!arr.IsNull() && arr->IsArrayInstance()) { - ObjPtr<PointerArray> marr(down_cast<PointerArray*>(arr.Ptr())); + ObjPtr<PointerArray> marr(GetJMethodIDs<kDefaultVerifyFlags, kReadBarrierOption>()); + if (!marr.IsNull()) { int32_t len = marr->GetLength(); for (int32_t i = 0; i < len; i++) { jmethodID id = marr->GetElementPtrSize<jmethodID>(i, kRuntimePointerSize); @@ -203,9 +159,8 @@ void ClassExt::VisitJMethodIDs(Visitor v) { } template<ReadBarrierOption kReadBarrierOption, class Visitor> void ClassExt::VisitJFieldIDs(Visitor v) { - ObjPtr<Object> sarr_obj(GetStaticJFieldIDs<kDefaultVerifyFlags, kReadBarrierOption>()); - if (!sarr_obj.IsNull() && sarr_obj->IsArrayInstance()) { - ObjPtr<PointerArray> sarr(down_cast<PointerArray*>(sarr_obj->AsArray().Ptr())); + ObjPtr<PointerArray> sarr(GetStaticJFieldIDs<kDefaultVerifyFlags, kReadBarrierOption>()); + if (!sarr.IsNull()) { int32_t len = sarr->GetLength(); for (int32_t i = 0; i < len; i++) { jfieldID id = sarr->GetElementPtrSize<jfieldID>(i, kRuntimePointerSize); @@ -214,9 +169,8 @@ void ClassExt::VisitJFieldIDs(Visitor v) { } } } - ObjPtr<PointerArray> iarr_obj(GetInstanceJFieldIDs<kDefaultVerifyFlags, kReadBarrierOption>()); - if (!iarr_obj.IsNull() && iarr_obj->IsArrayInstance()) { - ObjPtr<PointerArray> iarr(down_cast<PointerArray*>(iarr_obj->AsArray().Ptr())); + ObjPtr<PointerArray> iarr(GetInstanceJFieldIDs<kDefaultVerifyFlags, kReadBarrierOption>()); + if (!iarr.IsNull()) { int32_t len = iarr->GetLength(); for (int32_t i = 0; i < len; i++) { jfieldID id = iarr->GetElementPtrSize<jfieldID>(i, kRuntimePointerSize); |