5#ifndef INCLUDE_CPPGC_HEAP_CONSISTENCY_H_
6#define INCLUDE_CPPGC_HEAP_CONSISTENCY_H_
10#include "cppgc/internal/write-barrier.h"
11#include "cppgc/macros.h"
12#include "cppgc/member.h"
13#include "cppgc/trace-trait.h"
23
24
25
26
27
28class HeapConsistency
final {
34
35
36
37
38
39
40
41
42
43
44
45
47 const void* slot,
const void* value, WriteBarrierParams& params) {
52
53
54
55
56
57
58
59
60
61
62
63
64 template <
typename T,
typename WeaknessTag,
typename WriteBarrierPolicy,
65 typename CheckingPolicy,
typename StorageType>
68 CheckingPolicy, StorageType>& value,
69 WriteBarrierParams& params) {
70 return internal::WriteBarrier::GetWriteBarrierType(
71 value.GetRawSlot(), value.GetRawStorage(), params);
75
76
77
78
79
80
81
82
83
84
85
86
87
88 template <
typename HeapHandleCallback>
91 HeapHandleCallback callback) {
92 return internal::WriteBarrier::GetWriteBarrierType(slot, params, callback);
96
97
98
99
100
101
102
103
104
105
106
113
114
115
116
117
118
119
121 const void* object) {
126
127
128
129
130
131
132
133
134
135
136
137
138
140 const WriteBarrierParams& params,
const void* first_element,
141 size_t element_size, size_t number_of_elements,
142 TraceCallback trace_callback) {
143 internal::WriteBarrier::DijkstraMarkingBarrierRange(
144 params, first_element, element_size, number_of_elements,
149
150
151
152
153
154
155
156
158 const void* object) {
163
164
165
166
167
168
169
170
173 internal::WriteBarrier::GenerationalBarrier<
179
180
181
182
183
184
185
186
188 const WriteBarrierParams& params,
const void* uncompressed_slot) {
189 internal::WriteBarrier::GenerationalBarrier<
195
196
197
198
199
200
202 const WriteBarrierParams& params,
const void* inner_pointer) {
203 internal::WriteBarrier::GenerationalBarrier<
205 params, inner_pointer);
209 HeapConsistency() =
delete;
213
214
215
216
217
218
219
225
226
230
231
232
233
234
238
239
240
241
242
246
247
248
249
250
257 const DisallowGarbageCollectionScope&) =
delete;
264
265
266
267
268
269
275
276
277
278
279
283
284
285
286
287
291
292
293
294
295
300 NoGarbageCollectionScope&
operator=(
const NoGarbageCollectionScope&) =
delete;
static V8_INLINE Type GetWriteBarrierType(const void *value, Params ¶ms)
static V8_INLINE void DijkstraMarkingBarrier(const Params ¶ms, const void *object)
@ kPreciseUncompressedSlot
static V8_INLINE Type GetWriteBarrierType(const void *slot, const void *value, Params ¶ms)
static V8_INLINE void SteeleMarkingBarrier(const Params ¶ms, const void *object)
static void Enter(HeapHandle &heap_handle)
DisallowGarbageCollectionScope(const DisallowGarbageCollectionScope &)=delete
static bool IsGarbageCollectionAllowed(HeapHandle &heap_handle)
~DisallowGarbageCollectionScope()
DisallowGarbageCollectionScope(HeapHandle &heap_handle)
DisallowGarbageCollectionScope & operator=(const DisallowGarbageCollectionScope &)=delete
static void Leave(HeapHandle &heap_handle)
static V8_INLINE WriteBarrierType GetWriteBarrierType(const void *slot, const void *value, WriteBarrierParams ¶ms)
static V8_INLINE void GenerationalBarrier(const WriteBarrierParams ¶ms, const void *slot)
static V8_INLINE void SteeleWriteBarrier(const WriteBarrierParams ¶ms, const void *object)
static V8_INLINE WriteBarrierType GetWriteBarrierType(const void *value, WriteBarrierParams ¶ms)
static V8_INLINE void GenerationalBarrierForUncompressedSlot(const WriteBarrierParams ¶ms, const void *uncompressed_slot)
static V8_INLINE WriteBarrierType GetWriteBarrierType(const internal::BasicMember< T, WeaknessTag, WriteBarrierPolicy, CheckingPolicy, StorageType > &value, WriteBarrierParams ¶ms)
static V8_INLINE void DijkstraWriteBarrier(const WriteBarrierParams ¶ms, const void *object)
static V8_INLINE WriteBarrierType GetWriteBarrierType(const void *slot, WriteBarrierParams ¶ms, HeapHandleCallback callback)
static V8_INLINE void GenerationalBarrierForSourceObject(const WriteBarrierParams ¶ms, const void *inner_pointer)
static V8_INLINE void DijkstraWriteBarrierRange(const WriteBarrierParams ¶ms, const void *first_element, size_t element_size, size_t number_of_elements, TraceCallback trace_callback)
NoGarbageCollectionScope & operator=(const NoGarbageCollectionScope &)=delete
static void Enter(HeapHandle &heap_handle)
~NoGarbageCollectionScope()
NoGarbageCollectionScope(const NoGarbageCollectionScope &)=delete
NoGarbageCollectionScope(HeapHandle &heap_handle)
static void Leave(HeapHandle &heap_handle)
#define CPPGC_STACK_ALLOCATED()