summaryrefslogtreecommitdiff
path: root/runtime/mirror/array-inl.h
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2019-03-21 17:09:40 +0000
committer Vladimir Marko <vmarko@google.com> 2019-04-03 08:07:46 +0000
commitd355acfaf613d4020f1c2f4b526275c624fe887a (patch)
treec40094e3a866cdc27426c713108a67e5eda260b9 /runtime/mirror/array-inl.h
parentdf1a7d458e3f4b5410562e7d86a3343155a44ce0 (diff)
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
Diffstat (limited to 'runtime/mirror/array-inl.h')
-rw-r--r--runtime/mirror/array-inl.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h
index 19d35a89ec..34925f52e2 100644
--- a/runtime/mirror/array-inl.h
+++ b/runtime/mirror/array-inl.h
@@ -35,14 +35,16 @@ inline uint32_t Array::ClassSize(PointerSize pointer_size) {
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;