• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)15 size_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)22 size_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