diff options
| author | 2019-03-21 17:09:40 +0000 | |
|---|---|---|
| committer | 2019-04-03 08:07:46 +0000 | |
| commit | d355acfaf613d4020f1c2f4b526275c624fe887a (patch) | |
| tree | c40094e3a866cdc27426c713108a67e5eda260b9 /runtime/mirror/array-inl.h | |
| parent | df1a7d458e3f4b5410562e7d86a3343155a44ce0 (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.h | 10 |
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; |