Less redundant verification.
~3 less objects verified per object scanned in the GC. Helps the
irogers dogfood experience.
Change-Id: I6efeab7842a6c702adecef73fb573c19291fecf2
diff --git a/runtime/gc/collector/semi_space.cc b/runtime/gc/collector/semi_space.cc
index cd9e217..d4f47ef 100644
--- a/runtime/gc/collector/semi_space.cc
+++ b/runtime/gc/collector/semi_space.cc
@@ -669,7 +669,8 @@
void operator()(Object* obj, MemberOffset offset, bool /* is_static */) const ALWAYS_INLINE
EXCLUSIVE_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
- collector_->MarkObject(obj->GetFieldObjectReferenceAddr(offset));
+ // Object was already verified when we scanned it.
+ collector_->MarkObject(obj->GetFieldObjectReferenceAddr<kVerifyNone>(offset));
}
void operator()(mirror::Class* klass, mirror::Reference* ref) const
diff --git a/runtime/mirror/object-inl.h b/runtime/mirror/object-inl.h
index 281d4ec..527b8a6 100644
--- a/runtime/mirror/object-inl.h
+++ b/runtime/mirror/object-inl.h
@@ -612,17 +612,17 @@
const JavaLangRefVisitor& ref_visitor) {
mirror::Class* klass = GetClass<kVerifyFlags>();
if (UNLIKELY(klass == Class::GetJavaLangClass())) {
- DCHECK_EQ(klass->GetClass(), Class::GetJavaLangClass());
+ DCHECK_EQ(klass->GetClass<kVerifyNone>(), Class::GetJavaLangClass());
AsClass<kVerifyNone>()->VisitReferences<kVisitClass>(klass, visitor);
} else if (UNLIKELY(klass->IsArrayClass<kVerifyFlags>())) {
if (klass->IsObjectArrayClass<kVerifyNone>()) {
- AsObjectArray<mirror::Object>()->VisitReferences<kVisitClass>(visitor);
+ AsObjectArray<mirror::Object, kVerifyNone>()->VisitReferences<kVisitClass>(visitor);
} else if (kVisitClass) {
visitor(this, ClassOffset(), false);
}
} else {
- VisitFieldsReferences<kVisitClass, false>(klass->GetReferenceInstanceOffsets(), visitor);
- if (UNLIKELY(klass->IsReferenceClass())) {
+ VisitInstanceFieldsReferences<kVisitClass>(klass, visitor);
+ if (UNLIKELY(klass->IsReferenceClass<kVerifyNone>())) {
ref_visitor(klass, AsReference());
}
}