v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
remembered-set.h
Go to the documentation of this file.
1// Copyright 2022 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#ifndef V8_HEAP_CPPGC_REMEMBERED_SET_H_
6#define V8_HEAP_CPPGC_REMEMBERED_SET_H_
7
8#if defined(CPPGC_YOUNG_GENERATION)
9
10#include <set>
11
12#include "src/base/macros.h"
15
16namespace cppgc {
17
18class Visitor;
19class LivenessBroker;
20
21namespace internal {
22
23class HeapBase;
24class HeapObjectHeader;
25class MutatorMarkingState;
26
27class SlotSet : public ::heap::base::BasicSlotSet<kSlotSize> {};
28
29// OldToNewRememberedSet represents a per-heap set of old-to-new references.
30class V8_EXPORT_PRIVATE OldToNewRememberedSet final {
31 public:
32 using WeakCallbackItem = MarkingWorklists::WeakCallbackItem;
33
34 explicit OldToNewRememberedSet(HeapBase& heap)
35 : heap_(heap), remembered_weak_callbacks_(compare_parameter) {}
36
37 OldToNewRememberedSet(const OldToNewRememberedSet&) = delete;
38 OldToNewRememberedSet& operator=(const OldToNewRememberedSet&) = delete;
39
40 void AddSlot(void* slot);
41 void AddUncompressedSlot(void* slot);
42 void AddSourceObject(HeapObjectHeader& source_hoh);
43 void AddWeakCallback(WeakCallbackItem);
44
45 // Remembers an in-construction object to be retraced on the next minor GC.
46 void AddInConstructionObjectToBeRetraced(HeapObjectHeader&);
47
48 void InvalidateRememberedSlotsInRange(void* begin, void* end);
49 void InvalidateRememberedSourceObject(HeapObjectHeader& source_hoh);
50
51 void Visit(Visitor&, ConservativeTracingVisitor&, MutatorMarkingState&);
52
53 void ExecuteCustomCallbacks(LivenessBroker);
54 void ReleaseCustomCallbacks();
55
56 void Reset();
57
58 bool IsEmpty() const;
59
60 private:
61 friend class MinorGCTest;
62
63 // The class keeps track of inconstruction objects that should be revisited.
64 struct RememberedInConstructionObjects final {
65 void Reset();
66
67 std::set<HeapObjectHeader*> previous;
68 std::set<HeapObjectHeader*> current;
69 };
70
71 static constexpr struct {
72 bool operator()(const WeakCallbackItem& lhs,
73 const WeakCallbackItem& rhs) const {
74 return lhs.parameter < rhs.parameter;
75 }
76 } compare_parameter{};
77
78 HeapBase& heap_;
79 std::set<HeapObjectHeader*> remembered_source_objects_;
80 std::set<WeakCallbackItem, decltype(compare_parameter)>
81 remembered_weak_callbacks_;
82 // Compressed slots are stored in slot-sets (per-page two-level bitmaps),
83 // whereas uncompressed are stored in std::set.
84 std::set<void*> remembered_uncompressed_slots_;
85 std::set<void*> remembered_slots_for_verification_;
86 RememberedInConstructionObjects remembered_in_construction_objects_;
87};
88
89} // namespace internal
90} // namespace cppgc
91
92#endif // defined(CPPGC_YOUNG_GENERATION)
93
94#endif // V8_HEAP_CPPGC_REMEMBERED_SET_H_
int end
LineAndColumn current
LineAndColumn previous
#define V8_EXPORT_PRIVATE
Definition macros.h:460
Heap * heap_