| // Copyright 2021 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "include/cppgc/object-size-trait.h" |
| |
| #include "src/heap/cppgc/heap-object-header.h" |
| #include "src/heap/cppgc/heap-page.h" |
| #include "src/heap/cppgc/object-view.h" |
| |
| namespace cppgc { |
| namespace internal { |
| |
| // static |
| size_t BaseObjectSizeTrait::GetObjectSizeForGarbageCollected( |
| const void* object) { |
| return ObjectView<AccessMode::kAtomic>(HeapObjectHeader::FromObject(object)) |
| .Size(); |
| } |
| |
| // static |
| size_t BaseObjectSizeTrait::GetObjectSizeForGarbageCollectedMixin( |
| const void* address) { |
| // `address` is guaranteed to be on a normal page because large object mixins |
| // are not supported. |
| const auto& header = |
| BasePage::FromPayload(address) |
| ->ObjectHeaderFromInnerAddress<AccessMode::kAtomic>(address); |
| DCHECK(!header.IsLargeObject<AccessMode::kAtomic>()); |
| return header.ObjectSize<AccessMode::kAtomic>(); |
| } |
| |
| } // namespace internal |
| } // namespace cppgc |