blob: c1713f24020b0b288b75236cb1d474334f2df26c [file] [log] [blame]
// 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