v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
cppgc::Visitor Class Reference

#include <visitor.h>

Inheritance diagram for cppgc::Visitor:
Collaboration diagram for cppgc::Visitor:

Classes

class  Key
 

Public Member Functions

 Visitor (Key)
 
virtual ~Visitor ()=default
 
template<typename T >
void Trace (const Member< T > &member)
 
template<typename T >
void Trace (const WeakMember< T > &weak_member)
 
template<typename T >
void TraceMultiple (const subtle::UncompressedMember< T > *start, size_t len)
 
template<typename T , std::enable_if_t<!std::is_same_v< Member< T >, subtle::UncompressedMember< T > > > * = nullptr>
void TraceMultiple (const Member< T > *start, size_t len)
 
template<typename T >
void Trace (const T &object)
 
template<typename T >
void TraceMultiple (const T *start, size_t len)
 
template<typename T , void(T::*)(const LivenessBroker &) method>
void RegisterWeakCallbackMethod (const T *object)
 
template<typename K , typename V >
void Trace (const EphemeronPair< K, V > &ephemeron_pair)
 
template<typename KeyType , typename ValueType >
void TraceEphemeron (const WeakMember< KeyType > &weak_member_key, const Member< ValueType > *member_value)
 
template<typename KeyType , typename ValueType >
void TraceEphemeron (const WeakMember< KeyType > &weak_member_key, const ValueType *value)
 
template<typename T >
void TraceStrongly (const WeakMember< T > &weak_member)
 
template<typename T >
void TraceStrongContainer (const T *object)
 
template<typename T >
void TraceWeakContainer (const T *object, WeakCallback callback, const void *callback_data)
 
template<typename T >
void RegisterMovableReference (const T **slot)
 
virtual void RegisterWeakCallback (WeakCallback callback, const void *data)
 
virtual V8_WARN_UNUSED_RESULT bool DeferTraceToMutatorThreadIfConcurrent (const void *parameter, TraceCallback callback, size_t deferred_size)
 

Protected Member Functions

virtual void Visit (const void *self, TraceDescriptor)
 
virtual void VisitWeak (const void *self, TraceDescriptor, WeakCallback, const void *weak_member)
 
virtual void VisitEphemeron (const void *key, const void *value, TraceDescriptor value_desc)
 
virtual void VisitWeakContainer (const void *self, TraceDescriptor strong_desc, TraceDescriptor weak_desc, WeakCallback callback, const void *data)
 
virtual void HandleMovableReference (const void **)
 
virtual void VisitMultipleUncompressedMember (const void *start, size_t len, TraceDescriptorCallback get_trace_descriptor)
 

Private Member Functions

template<typename T >
void TraceImpl (const T *t)
 

Static Private Member Functions

template<typename T , void(T::*)(const LivenessBroker &) method>
static void WeakCallbackMethodDelegate (const LivenessBroker &info, const void *self)
 
template<typename PointerType >
static void HandleWeak (const LivenessBroker &info, const void *object)
 

Friends

template<typename T , typename WeaknessPolicy , typename LocationPolicy , typename CheckingPolicy >
class internal::BasicCrossThreadPersistent
 
template<typename T , typename WeaknessPolicy , typename LocationPolicy , typename CheckingPolicy >
class internal::BasicPersistent
 
class internal::ConservativeTracingVisitor
 
class internal::VisitorBase
 

Detailed Description

Visitor passed to trace methods. All managed pointers must have called the Visitor's trace method on them.

class Foo final : public GarbageCollected<Foo> {
public:
void Trace(Visitor* visitor) const {
visitor->Trace(foo_);
visitor->Trace(weak_foo_);
}
private:
WeakMember<Foo> weak_foo_;
};
void Trace(const Member< T > &member)
Definition visitor.h:93

Definition at line 75 of file visitor.h.

Constructor & Destructor Documentation

◆ Visitor()

cppgc::Visitor::Visitor ( Key )
inlineexplicit

Definition at line 83 of file visitor.h.

◆ ~Visitor()

virtual cppgc::Visitor::~Visitor ( )
virtualdefault

Member Function Documentation

◆ DeferTraceToMutatorThreadIfConcurrent()

virtual V8_WARN_UNUSED_RESULT bool cppgc::Visitor::DeferTraceToMutatorThreadIfConcurrent ( const void * parameter,
TraceCallback callback,
size_t deferred_size )
inlinevirtual

Defers tracing an object from a concurrent thread to the mutator thread. Should be called by Trace methods of types that are not safe to trace concurrently.

Parameters
parametertells the trace callback which object was deferred.
callbackto be invoked for tracing on the mutator thread.
deferred_sizesize of deferred object.
Returns
false if the object does not need to be deferred (i.e. currently traced on the mutator thread) and true otherwise (i.e. currently traced on a concurrent thread).

Reimplemented in cppgc::internal::ConcurrentMarkingVisitor, and v8::internal::ConcurrentUnifiedHeapMarkingVisitor.

Definition at line 366 of file visitor.h.

◆ HandleMovableReference()

virtual void cppgc::Visitor::HandleMovableReference ( const void ** )
inlineprotectedvirtual

◆ HandleWeak()

template<typename PointerType >
static void cppgc::Visitor::HandleWeak ( const LivenessBroker & info,
const void * object )
inlinestaticprivate

Definition at line 426 of file visitor.h.

◆ RegisterMovableReference()

template<typename T >
void cppgc::Visitor::RegisterMovableReference ( const T ** slot)
inline

Registers a slot containing a reference to an object allocated on a compactable space. Such references maybe be arbitrarily moved by the GC.

Parameters
slotlocation of reference to object that might be moved by the GC. The slot must contain an uncompressed pointer.

Definition at line 336 of file visitor.h.

◆ RegisterWeakCallback()

virtual void cppgc::Visitor::RegisterWeakCallback ( WeakCallback callback,
const void * data )
inlinevirtual

Registers a weak callback that is invoked during garbage collection.

Parameters
callbackto be invoked.
datacustom data that is passed to the callback.

Reimplemented in cppgc::internal::MarkingVisitorBase, and v8::internal::UnifiedHeapMarkingVisitorBase.

Definition at line 351 of file visitor.h.

◆ RegisterWeakCallbackMethod()

template<typename T , void(T::*)(const LivenessBroker &) method>
void cppgc::Visitor::RegisterWeakCallbackMethod ( const T * object)
inline

Registers a weak callback method on the object of type T. See LivenessBroker for an usage example.

Parameters
objectof type T specifying a weak callback method.

Definition at line 207 of file visitor.h.

◆ Trace() [1/4]

template<typename K , typename V >
void cppgc::Visitor::Trace ( const EphemeronPair< K, V > & ephemeron_pair)
inline

Trace method for EphemeronPair.

Parameters
ephemeron_pairEphemeronPair reference weakly retaining a key object and strongly retaining a value object in case the key object is alive.

Definition at line 218 of file visitor.h.

◆ Trace() [2/4]

template<typename T >
void cppgc::Visitor::Trace ( const Member< T > & member)
inline

Trace method for Member.

Parameters
memberMember reference retaining an object.

Definition at line 93 of file visitor.h.

Here is the call graph for this function:

◆ Trace() [3/4]

template<typename T >
void cppgc::Visitor::Trace ( const T & object)
inline

Trace method for inlined objects that are not allocated themselves but otherwise follow managed heap layout and have a Trace() method.

Parameters
objectreference of the inlined object.

Definition at line 169 of file visitor.h.

◆ Trace() [4/4]

template<typename T >
void cppgc::Visitor::Trace ( const WeakMember< T > & weak_member)
inline

Trace method for WeakMember.

Parameters
weak_memberWeakMember reference weakly retaining an object.

Definition at line 105 of file visitor.h.

Here is the call graph for this function:

◆ TraceEphemeron() [1/2]

template<typename KeyType , typename ValueType >
void cppgc::Visitor::TraceEphemeron ( const WeakMember< KeyType > & weak_member_key,
const Member< ValueType > * member_value )
inline

Trace method for a single ephemeron. Used for tracing a raw ephemeron in which the key and value are kept separately.

Parameters
weak_member_keyWeakMember reference weakly retaining a key object.
member_valueMember reference with ephemeron semantics.

Definition at line 233 of file visitor.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TraceEphemeron() [2/2]

template<typename KeyType , typename ValueType >
void cppgc::Visitor::TraceEphemeron ( const WeakMember< KeyType > & weak_member_key,
const ValueType * value )
inline

Trace method for a single ephemeron. Used for tracing a raw ephemeron in which the key and value are kept separately. Note that this overload is for non-GarbageCollected values that can be traced though.

Parameters
keyWeakMember reference weakly retaining a key object.
valueReference weakly retaining a value object. Note that ValueType here should not be Member. It is expected that TraceTrait<ValueType>::GetTraceDescriptor(value) returns a TraceDescriptor with a null base pointer but a valid trace method.

Definition at line 266 of file visitor.h.

Here is the call graph for this function:

◆ TraceImpl()

template<typename T >
void cppgc::Visitor::TraceImpl ( const T * t)
inlineprivate

Definition at line 434 of file visitor.h.

Here is the caller graph for this function:

◆ TraceMultiple() [1/3]

template<typename T , std::enable_if_t<!std::is_same_v< Member< T >, subtle::UncompressedMember< T > > > * = nullptr>
void cppgc::Visitor::TraceMultiple ( const Member< T > * start,
size_t len )
inline

Definition at line 150 of file visitor.h.

◆ TraceMultiple() [2/3]

template<typename T >
void cppgc::Visitor::TraceMultiple ( const subtle::UncompressedMember< T > * start,
size_t len )
inline

Definition at line 139 of file visitor.h.

◆ TraceMultiple() [3/3]

template<typename T >
void cppgc::Visitor::TraceMultiple ( const T * start,
size_t len )
inline

Definition at line 181 of file visitor.h.

◆ TraceStrongContainer()

template<typename T >
void cppgc::Visitor::TraceStrongContainer ( const T * object)
inline

Trace method for retaining containers strongly.

Parameters
objectreference to the container.

Definition at line 307 of file visitor.h.

◆ TraceStrongly()

template<typename T >
void cppgc::Visitor::TraceStrongly ( const WeakMember< T > & weak_member)
inline

Trace method that strongifies a WeakMember.

Parameters
weak_memberWeakMember reference retaining an object.

Definition at line 295 of file visitor.h.

Here is the call graph for this function:

◆ TraceWeakContainer()

template<typename T >
void cppgc::Visitor::TraceWeakContainer ( const T * object,
WeakCallback callback,
const void * callback_data )
inline

Trace method for retaining containers weakly. Note that weak containers should emit write barriers.

Parameters
objectreference to the container.
callbackto be invoked.
callback_datacustom data that is passed to the callback.

Definition at line 320 of file visitor.h.

◆ Visit()

virtual void cppgc::Visitor::Visit ( const void * self,
TraceDescriptor  )
inlineprotectedvirtual

Reimplemented in cppgc::internal::MarkingVisitorBase, v8::internal::GraphBuildingVisitor, v8::internal::UnifiedHeapMarkingVisitorBase, and v8::internal::VisiblityVisitor.

Definition at line 373 of file visitor.h.

Here is the caller graph for this function:

◆ VisitEphemeron()

virtual void cppgc::Visitor::VisitEphemeron ( const void * key,
const void * value,
TraceDescriptor value_desc )
inlineprotectedvirtual

◆ VisitMultipleUncompressedMember()

virtual void cppgc::Visitor::VisitMultipleUncompressedMember ( const void * start,
size_t len,
TraceDescriptorCallback get_trace_descriptor )
inlineprotectedvirtual

Reimplemented in cppgc::internal::MarkingVisitorBase, and v8::internal::UnifiedHeapMarkingVisitorBase.

Definition at line 383 of file visitor.h.

Here is the call graph for this function:

◆ VisitWeak()

virtual void cppgc::Visitor::VisitWeak ( const void * self,
TraceDescriptor ,
WeakCallback ,
const void * weak_member )
inlineprotectedvirtual

◆ VisitWeakContainer()

virtual void cppgc::Visitor::VisitWeakContainer ( const void * self,
TraceDescriptor strong_desc,
TraceDescriptor weak_desc,
WeakCallback callback,
const void * data )
inlineprotectedvirtual

◆ WeakCallbackMethodDelegate()

template<typename T , void(T::*)(const LivenessBroker &) method>
static void cppgc::Visitor::WeakCallbackMethodDelegate ( const LivenessBroker & info,
const void * self )
inlinestaticprivate

Definition at line 418 of file visitor.h.

Friends And Related Symbol Documentation

◆ internal::BasicCrossThreadPersistent

template<typename T , typename WeaknessPolicy , typename LocationPolicy , typename CheckingPolicy >
friend class internal::BasicCrossThreadPersistent
friend

Definition at line 450 of file visitor.h.

◆ internal::BasicPersistent

template<typename T , typename WeaknessPolicy , typename LocationPolicy , typename CheckingPolicy >
friend class internal::BasicPersistent
friend

Definition at line 453 of file visitor.h.

◆ internal::ConservativeTracingVisitor

Definition at line 454 of file visitor.h.

◆ internal::VisitorBase

friend class internal::VisitorBase
friend

Definition at line 455 of file visitor.h.


The documentation for this class was generated from the following file: