5#ifndef V8_HEAP_MARKING_VISITOR_H_
6#define V8_HEAP_MARKING_VISITOR_H_
23 absl::flat_hash_map<Tagged<HeapObject>,
45template <
typename ConcreteVisitor>
52 unsigned mark_compact_epoch,
54 bool should_keep_ages_unchanged,
55 uint16_t code_flushing_increase)
65#ifdef V8_COMPRESS_POINTERS
67 external_pointer_table_(&
heap->isolate()->external_pointer_table()),
68 shared_external_pointer_table_(
69 &
heap->isolate()->shared_external_pointer_table()),
70 shared_external_pointer_space_(
71 heap->isolate()->shared_external_pointer_space()),
72 cpp_heap_pointer_table_(&
heap->isolate()->cpp_heap_pointer_table())
74#ifdef V8_ENABLE_SANDBOX
76 trusted_pointer_table_(&
heap->isolate()->trusted_pointer_table()),
77 shared_trusted_pointer_table_(
78 &
heap->isolate()->shared_trusted_pointer_table())
171#ifdef THREAD_SANITIZER
203 template <
typename THeapObjectSlot>
206 template <
typename THeapObjectSlot>
210 template <
typename TSlot>
214 template <
typename TSlot>
240#ifdef V8_COMPRESS_POINTERS
241 ExternalPointerTable*
const external_pointer_table_;
242 ExternalPointerTable*
const shared_external_pointer_table_;
243 ExternalPointerTable::Space*
const shared_external_pointer_space_;
244 CppHeapPointerTable*
const cpp_heap_pointer_table_;
246#ifdef V8_ENABLE_SANDBOX
247 TrustedPointerTable*
const trusted_pointer_table_;
248 TrustedPointerTable*
const shared_trusted_pointer_table_;
255template <
typename ConcreteVisitor>
260 unsigned mark_compact_epoch,
262 bool should_keep_ages_unchanged,
263 uint16_t code_flushing_increase)
265 local_marking_worklists, local_weak_objects,
heap,
266 mark_compact_epoch, code_flush_mode, should_keep_ages_unchanged,
267 code_flushing_increase),
MarkingState * marking_state() const
MarkingState * marking_state_
FullMarkingVisitorBase(MarkingWorklists::Local *local_marking_worklists, WeakObjects::Local *local_weak_objects, Heap *heap, unsigned mark_compact_epoch, base::EnumSet< CodeFlushMode > code_flush_mode, bool should_keep_ages_unchanged, uint16_t code_flushing_increase)
void MarkPointerTableEntry(Tagged< HeapObject > obj, IndirectPointerSlot slot)
V8_INLINE void AddStrongReferenceForReferenceSummarizer(Tagged< HeapObject > host, Tagged< HeapObject > obj)
constexpr bool CanUpdateValuesInHeap()
V8_INLINE void AddWeakReferenceForReferenceSummarizer(Tagged< HeapObject > host, Tagged< HeapObject > obj)
ConcreteVisitor * concrete_visitor()
KeyToValues * key_to_values_
V8_INLINE size_t VisitJSFunction(Tagged< Map > map, Tagged< JSFunction > object, MaybeObjectSize)
static V8_INLINE constexpr bool CanEncounterFillerOrFreeSpace()
V8_INLINE size_t VisitEphemeronHashTable(Tagged< Map > map, Tagged< EphemeronHashTable > object, MaybeObjectSize)
const base::EnumSet< CodeFlushMode > code_flush_mode_
bool IsOld(Tagged< SharedFunctionInfo > sfi) const
V8_INLINE void VisitPointer(Tagged< HeapObject > host, MaybeObjectSlot p) final
V8_INLINE void VisitPointer(Tagged< HeapObject > host, ObjectSlot p) final
V8_INLINE void VisitProtectedPointer(Tagged< TrustedObject > host, ProtectedMaybeObjectSlot slot) final
V8_INLINE bool MarkObject(Tagged< HeapObject > host, Tagged< HeapObject > obj, MarkingHelper::WorklistTarget target_worklist)
void SetKeyToValues(KeyToValues *key_to_values)
V8_INLINE void VisitPointers(Tagged< HeapObject > host, MaybeObjectSlot start, MaybeObjectSlot end) final
V8_INLINE size_t VisitFixedArrayWithProgressTracker(Tagged< Map > map, Tagged< FixedArray > object, MarkingProgressTracker &progress_tracker)
V8_INLINE size_t VisitTransitionArray(Tagged< Map > map, Tagged< TransitionArray > object, MaybeObjectSize)
V8_INLINE void VisitCodeTarget(Tagged< InstructionStream > host, RelocInfo *rinfo) final
static V8_INLINE constexpr bool ShouldVisitReadOnlyMapPointer()
void VisitMapPointer(Tagged< HeapObject > host) final
V8_INLINE size_t VisitWeakCell(Tagged< Map > map, Tagged< WeakCell > object, MaybeObjectSize)
V8_INLINE void VisitExternalPointer(Tagged< HeapObject > host, ExternalPointerSlot slot) override
V8_INLINE void VisitIndirectPointer(Tagged< HeapObject > host, IndirectPointerSlot slot, IndirectPointerMode mode) final
void VisitJSDispatchTableEntry(Tagged< HeapObject > host, JSDispatchHandle handle) override
bool HasBytecodeArrayForFlushing(Tagged< SharedFunctionInfo > sfi) const
V8_INLINE size_t VisitJSWeakRef(Tagged< Map > map, Tagged< JSWeakRef > object, MaybeObjectSize)
void ProcessWeakHeapObject(Tagged< HeapObject > host, THeapObjectSlot slot, Tagged< HeapObject > heap_object)
V8_INLINE void VisitPointers(Tagged< HeapObject > host, ObjectSlot start, ObjectSlot end) final
V8_INLINE size_t VisitFixedArray(Tagged< Map > map, Tagged< FixedArray > object, MaybeObjectSize)
void VisitTrustedPointerTableEntry(Tagged< HeapObject > host, IndirectPointerSlot slot) final
WeakObjects::Local *const local_weak_objects_
V8_INLINE void VisitDescriptorsForMap(Tagged< Map > map)
const uint16_t code_flushing_increase_
void VisitCustomWeakPointers(Tagged< HeapObject > host, ObjectSlot start, ObjectSlot end) final
void SynchronizePageAccess(Tagged< HeapObject > heap_object) const
V8_INLINE void VisitProtectedPointer(Tagged< TrustedObject > host, ProtectedPointerSlot slot) final
V8_INLINE void VisitPointersImpl(Tagged< HeapObject > host, TSlot start, TSlot end)
V8_INLINE size_t VisitDescriptorArrayStrongly(Tagged< Map > map, Tagged< DescriptorArray > object, MaybeObjectSize)
void MakeOlder(Tagged< SharedFunctionInfo > sfi) const
const bool should_keep_ages_unchanged_
V8_INLINE void VisitEmbeddedPointer(Tagged< InstructionStream > host, RelocInfo *rinfo) final
V8_INLINE void VisitCppHeapPointer(Tagged< HeapObject > host, CppHeapPointerSlot slot) override
V8_INLINE size_t VisitJSArrayBuffer(Tagged< Map > map, Tagged< JSArrayBuffer > object, MaybeObjectSize)
V8_INLINE size_t VisitSharedFunctionInfo(Tagged< Map > map, Tagged< SharedFunctionInfo > object, MaybeObjectSize)
void ProcessStrongHeapObject(Tagged< HeapObject > host, THeapObjectSlot slot, Tagged< HeapObject > heap_object)
V8_INLINE size_t VisitMap(Tagged< Map > map, Tagged< Map > object, MaybeObjectSize)
V8_INLINE size_t VisitDescriptorArray(Tagged< Map > map, Tagged< DescriptorArray > object, MaybeObjectSize)
MarkingVisitorBase(MarkingWorklists::Local *local_marking_worklists, WeakObjects::Local *local_weak_objects, Heap *heap, unsigned mark_compact_epoch, base::EnumSet< CodeFlushMode > code_flush_mode, bool should_keep_ages_unchanged, uint16_t code_flushing_increase)
bool ShouldFlushBaselineCode(Tagged< JSFunction > js_function) const
static V8_INLINE constexpr bool IsTrivialWeakReferenceValue(Tagged< HeapObject > host, Tagged< HeapObject > heap_object)
bool ShouldFlushCode(Tagged< SharedFunctionInfo > sfi) const
MarkingWorklists::Local *const local_marking_worklists_
V8_INLINE void VisitInstructionStreamPointer(Tagged< Code > host, InstructionStreamSlot slot) final
const bool isolate_in_background_
const unsigned mark_compact_epoch_
V8_INLINE void VisitStrongPointerImpl(Tagged< HeapObject > host, TSlot slot)
static V8_INLINE MemoryChunk * FromHeapObject(Tagged< HeapObject > object)
PtrComprCageBase cage_base() const
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
absl::flat_hash_map< Tagged< HeapObject >, base::SmallVector< Tagged< HeapObject >, 1 >, Object::Hasher, Object::KeyEqualSafe > KeyToValues