1// Copyright 2020 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/trace-trait.h" 6 7#include "src/heap/cppgc/gc-info-table.h" 8#include "src/heap/cppgc/heap-page.h" 9 10namespace cppgc { 11namespace internal { 12 13TraceDescriptor TraceTraitFromInnerAddressImpl::GetTraceDescriptor( 14 const void* address) { 15 // address is guaranteed to be on a normal page because this is used only for 16 // mixins. 17 const BasePage* page = BasePage::FromPayload(address); 18 page->SynchronizedLoad(); 19 const HeapObjectHeader& header = 20 page->ObjectHeaderFromInnerAddress<AccessMode::kAtomic>(address); 21 return {header.ObjectStart(), 22 GlobalGCInfoTable::GCInfoFromIndex( 23 header.GetGCInfoIndex<AccessMode::kAtomic>()) 24 .trace}; 25} 26 27} // namespace internal 28} // namespace cppgc 29