5#ifndef INCLUDE_CPPGC_INTERNAL_PERSISTENT_NODE_H_
6#define INCLUDE_CPPGC_INTERNAL_PERSISTENT_NODE_H_
19class CrossThreadPersistentRegion;
20class FatalOutOfMemoryHandler;
90 size_t NodesInUse()
const;
92 void ClearAllUsedNodes();
101 node = free_list_head_;
102 free_list_head_ = free_list_head_->FreeListNext();
104 node->InitializeAsUsedNode(owner, trace);
113 node->InitializeAsFreeNode(free_list_head_);
114 free_list_head_ =
node;
123 template <
typename PersistentBaseClass>
124 void ClearAllUsedNodes();
126 void RefillFreeList();
128 std::vector<std::unique_ptr<PersistentNodeSlots>>
nodes_;
130 size_t nodes_in_use_ = 0;
153 auto* node = TryAllocateNodeFromFreeList(owner, trace);
158 return RefillFreeListAndAllocateNode(owner, trace);
163 PersistentRegionBase::FreeNode(node);
167 bool IsCreationThread();
179 static void AssertLocked();
196 PersistentRegionLock::AssertLocked();
197 auto* node = TryAllocateNodeFromFreeList(owner, trace);
200 return RefillFreeListAndAllocateNode(owner, trace);
204 PersistentRegionLock::AssertLocked();
205 PersistentRegionBase::FreeNode(node);
210 size_t NodesInUse()
const;
212 void ClearAllUsedNodes();
CrossThreadPersistentRegion & operator=(const CrossThreadPersistentRegion &)=delete
V8_INLINE PersistentNode * AllocateNode(void *owner, TraceRootCallback trace)
V8_INLINE void FreeNode(PersistentNode *node)
CrossThreadPersistentRegion(const CrossThreadPersistentRegion &)=delete
void UpdateOwner(void *owner)
void InitializeAsFreeNode(PersistentNode *next)
void Trace(RootVisitor &root_visitor) const
PersistentNode(const PersistentNode &)=delete
PersistentNode * FreeListNext() const
void InitializeAsUsedNode(void *owner, TraceRootCallback trace)
PersistentNode & operator=(const PersistentNode &)=delete
const FatalOutOfMemoryHandler & oom_handler_
PersistentRegionBase & operator=(const PersistentRegionBase &)=delete
std::array< PersistentNode, 256u > PersistentNodeSlots
std::vector< std::unique_ptr< PersistentNodeSlots > > nodes_
PersistentNode * TryAllocateNodeFromFreeList(void *owner, TraceRootCallback trace)
void FreeNode(PersistentNode *node)
PersistentRegionBase(const PersistentRegionBase &)=delete
PersistentRegion(const PersistentRegion &)=delete
~PersistentRegion()=default
V8_INLINE PersistentNode * AllocateNode(void *owner, TraceRootCallback trace)
PersistentRegion & operator=(const PersistentRegion &)=delete
V8_INLINE void FreeNode(PersistentNode *node)
V8_INLINE PersistentRegion(const HeapBase &heap, const FatalOutOfMemoryHandler &oom_handler)
#define CPPGC_DCHECK(condition)
#define CPPGC_CHECK(condition)
void(*)(RootVisitor &, const void *object) TraceRootCallback
#define V8_LIKELY(condition)