summaryrefslogtreecommitdiff
path: root/runtime/mirror/class_ext-inl.h
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2019-12-02 18:50:16 +0000
committer Alex Light <allight@google.com> 2019-12-02 18:52:38 +0000
commit42c52f53b3c85b5e3c984bca8eaec2e03893dd2e (patch)
tree1589dd3831503767b445734c02bf5e9e4abaaa0e /runtime/mirror/class_ext-inl.h
parentf1b809ce611e943f926fff97cefe0930226ffcc2 (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.h100
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);