1 // Copyright 2021 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "include/cppgc/object-size-trait.h" 6 7 #include "src/heap/cppgc/heap-object-header.h" 8 #include "src/heap/cppgc/heap-page.h" 9 #include "src/heap/cppgc/object-view.h" 10 11 namespace cppgc { 12 namespace internal { 13 14 // static GetObjectSizeForGarbageCollected(const void * object)15size_t BaseObjectSizeTrait::GetObjectSizeForGarbageCollected( 16 const void* object) { 17 return ObjectView<AccessMode::kAtomic>(HeapObjectHeader::FromObject(object)) 18 .Size(); 19 } 20 21 // static GetObjectSizeForGarbageCollectedMixin(const void * address)22size_t BaseObjectSizeTrait::GetObjectSizeForGarbageCollectedMixin( 23 const void* address) { 24 // `address` is guaranteed to be on a normal page because large object mixins 25 // are not supported. 26 const auto& header = 27 BasePage::FromPayload(address) 28 ->ObjectHeaderFromInnerAddress<AccessMode::kAtomic>(address); 29 DCHECK(!header.IsLargeObject<AccessMode::kAtomic>()); 30 return header.ObjectSize<AccessMode::kAtomic>(); 31 } 32 33 } // namespace internal 34 } // namespace cppgc 35