Clean up Object size related read barriers.

Test: m test-art-host-gtest
Test: testrunner.py --host --interpreter
Test: testrunner.py --host --interpreter --gcstress
Bug: 119486698
Change-Id: I831838f230ebdd9e540462b2de56271895a01fad
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h
index 19d35a8..34925f5 100644
--- a/runtime/mirror/array-inl.h
+++ b/runtime/mirror/array-inl.h
@@ -35,14 +35,16 @@
   return Class::ComputeClassSize(true, vtable_entries, 0, 0, 0, 0, 0, pointer_size);
 }
 
-template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption>
+template<VerifyObjectFlags kVerifyFlags>
 inline size_t Array::SizeOf() {
-  // This is safe from overflow because the array was already allocated, so we know it's sane.
-  size_t component_size_shift = GetClass<kVerifyFlags, kReadBarrierOption>()->
-      template GetComponentSizeShift<kReadBarrierOption>();
+  // No read barrier is needed for reading a constant primitive field through
+  // constant reference field chain. See ReadBarrierOption.
+  size_t component_size_shift =
+      GetClass<kVerifyFlags, kWithoutReadBarrier>()->GetComponentSizeShift();
   // Don't need to check this since we already check this in GetClass.
   int32_t component_count =
       GetLength<static_cast<VerifyObjectFlags>(kVerifyFlags & ~kVerifyThis)>();
+  // This is safe from overflow because the array was already allocated, so we know it's sane.
   size_t header_size = DataOffset(1U << component_size_shift).SizeValue();
   size_t data_size = component_count << component_size_shift;
   return header_size + data_size;