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 10 namespace cppgc { 11 namespace internal { 12 GetTraceDescriptor( const void* address)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