5#ifndef V8_HEAP_CPPGC_REMEMBERED_SET_H_
6#define V8_HEAP_CPPGC_REMEMBERED_SET_H_
8#if defined(CPPGC_YOUNG_GENERATION)
24class HeapObjectHeader;
25class MutatorMarkingState;
32 using WeakCallbackItem = MarkingWorklists::WeakCallbackItem;
34 explicit OldToNewRememberedSet(HeapBase&
heap)
35 :
heap_(
heap), remembered_weak_callbacks_(compare_parameter) {}
37 OldToNewRememberedSet(
const OldToNewRememberedSet&) =
delete;
38 OldToNewRememberedSet& operator=(
const OldToNewRememberedSet&) =
delete;
40 void AddSlot(
void* slot);
41 void AddUncompressedSlot(
void* slot);
42 void AddSourceObject(HeapObjectHeader& source_hoh);
43 void AddWeakCallback(WeakCallbackItem);
46 void AddInConstructionObjectToBeRetraced(HeapObjectHeader&);
48 void InvalidateRememberedSlotsInRange(
void* begin,
void*
end);
49 void InvalidateRememberedSourceObject(HeapObjectHeader& source_hoh);
51 void Visit(Visitor&, ConservativeTracingVisitor&, MutatorMarkingState&);
53 void ExecuteCustomCallbacks(LivenessBroker);
54 void ReleaseCustomCallbacks();
61 friend class MinorGCTest;
64 struct RememberedInConstructionObjects final {
67 std::set<HeapObjectHeader*>
previous;
68 std::set<HeapObjectHeader*>
current;
71 static constexpr struct {
72 bool operator()(
const WeakCallbackItem& lhs,
73 const WeakCallbackItem& rhs)
const {
74 return lhs.parameter < rhs.parameter;
76 } compare_parameter{};
79 std::set<HeapObjectHeader*> remembered_source_objects_;
80 std::set<WeakCallbackItem,
decltype(compare_parameter)>
81 remembered_weak_callbacks_;
84 std::set<void*> remembered_uncompressed_slots_;
85 std::set<void*> remembered_slots_for_verification_;
86 RememberedInConstructionObjects remembered_in_construction_objects_;
#define V8_EXPORT_PRIVATE