summaryrefslogtreecommitdiff
path: root/runtime/mirror/object-refvisitor-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/mirror/object-refvisitor-inl.h')
-rw-r--r--runtime/mirror/object-refvisitor-inl.h18
1 files changed, 8 insertions, 10 deletions
diff --git a/runtime/mirror/object-refvisitor-inl.h b/runtime/mirror/object-refvisitor-inl.h
index 7010263c71..72aff4b686 100644
--- a/runtime/mirror/object-refvisitor-inl.h
+++ b/runtime/mirror/object-refvisitor-inl.h
@@ -89,7 +89,7 @@ inline void Object::VisitReferences(const Visitor& visitor,
return;
}
- if (class_flags == kClassFlagObjectArray) {
+ if ((class_flags & kClassFlagObjectArray) != 0) {
DCHECK((klass->IsObjectArrayClass<kVerifyFlags, kReadBarrierOption>()));
AsObjectArray<mirror::Object, kVerifyNone>()->VisitReferences(visitor);
return;
@@ -147,13 +147,11 @@ inline size_t Object::VisitRefsForCompaction(const Visitor& visitor,
} else if ((class_flags & kClassFlagNoReferenceFields) != 0) {
if ((class_flags & kClassFlagString) != 0) {
size = kFetchObjSize ? static_cast<String*>(this)->SizeOf<kSizeOfFlags>() : 0;
- } else if (klass->IsArrayClass<kVerifyFlags>()) {
- // TODO: We can optimize this by implementing a SizeOf() version which takes
- // component-size-shift as an argument, thereby avoiding multiple loads of
- // component_type.
- size = kFetchObjSize
- ? static_cast<Array*>(this)->SizeOf<kSizeOfFlags, kReadBarrierOption>()
- : 0;
+ } else if ((class_flags & kClassFlagPrimitiveArray) != 0) {
+ ObjPtr<Array> arr = ObjPtr<Array>::DownCast(this);
+ size = kFetchObjSize ?
+ arr->SizeOf<kSizeOfFlags>(class_flags >> kArrayComponentSizeShiftShift) :
+ 0;
} else {
// Only possibility left is of a normal klass instance with no references.
size = kFetchObjSize ? klass->GetObjectSize<kSizeOfFlags>() : 0;
@@ -164,11 +162,11 @@ inline size_t Object::VisitRefsForCompaction(const Visitor& visitor,
as_klass->VisitReferences<kVisitNativeRoots, kVerifyFlags, kReadBarrierOption>(klass,
visitor);
size = kFetchObjSize ? as_klass->SizeOf<kSizeOfFlags>() : 0;
- } else if (class_flags == kClassFlagObjectArray) {
+ } else if ((class_flags & kClassFlagObjectArray) != 0) {
ObjPtr<ObjectArray<Object>> obj_arr = ObjPtr<ObjectArray<Object>>::DownCast(this);
obj_arr->VisitReferences(visitor, begin, end);
size = kFetchObjSize ?
- obj_arr->SizeOf<kSizeOfFlags, kReadBarrierOption, /*kIsObjArray*/ true>() :
+ obj_arr->SizeOf<kSizeOfFlags>(class_flags >> kArrayComponentSizeShiftShift) :
0;
} else if ((class_flags & kClassFlagReference) != 0) {
VisitInstanceFieldsReferences<kVerifyFlags, kReadBarrierOption>(klass, visitor);