v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
marking-worklists.h
Go to the documentation of this file.
1// Copyright 2020 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_MARKING_WORKLISTS_H_
6#define V8_HEAP_CPPGC_MARKING_WORKLISTS_H_
7
8#include <unordered_set>
9
14
15namespace cppgc {
16namespace internal {
17
19 private:
21 public:
22 template <AccessMode = AccessMode::kNonAtomic>
23 void Push(HeapObjectHeader*);
24 template <AccessMode = AccessMode::kNonAtomic>
25 bool Contains(HeapObjectHeader*);
26 template <AccessMode = AccessMode::kNonAtomic>
27 std::unordered_set<HeapObjectHeader*> Extract();
28 template <AccessMode = AccessMode::kNonAtomic>
29 void Clear();
30 template <AccessMode = AccessMode::kNonAtomic>
31 bool IsEmpty();
32
34
35 private:
36 template <AccessMode>
38
39 void* operator new(size_t) = delete;
40 void* operator new[](size_t) = delete;
41 void operator delete(void*) = delete;
42 void operator delete[](void*) = delete;
43
45 std::unordered_set<HeapObjectHeader*> objects_;
46 };
47
48 public:
49 static constexpr int kMutatorThreadId = 0;
50
52
57
63
65 const void* key;
66 const void* value;
68 };
69
70 // Segment size of 512 entries necessary to avoid throughput regressions.
71 // Since the work list is currently a temporary object this is not a problem.
73 heap::base::Worklist<MarkingItem, 512 /* local entries */>;
76 heap::base::Worklist<HeapObjectHeader*, 16 /* local entries */>;
78 heap::base::Worklist<WeakCallbackItem, 64 /* local entries */>;
80 heap::base::Worklist<WeakCallbackItem, 16 /* local entries */>;
82 heap::base::Worklist<HeapObjectHeader*, 64 /*local entries */>;
85 64 /* local entries */>;
87 heap::base::Worklist<EphemeronPairItem, 64 /* local entries */>;
90 heap::base::Worklist<HeapObjectHeader*, 16 /* local entries */>;
91
131
132 void ClearForTesting();
133
134 private:
140 // Hold weak callbacks for weak containers (e.g. containers with WeakMembers).
142 // Hold weak custom callbacks (e.g. for containers with UntracedMembers).
144 // Hold weak callbacks which can invoke on main or worker thread (used for
145 // regular WeakMember).
152};
153
154template <>
159
160template <>
168
169template <AccessMode mode>
175
176template <AccessMode mode>
178 HeapObjectHeader* object) {
179 ConditionalMutexGuard<mode> guard(&lock_);
180 return objects_.find(object) != objects_.end();
181}
182
183template <AccessMode mode>
184std::unordered_set<HeapObjectHeader*>
186 ConditionalMutexGuard<mode> guard(&lock_);
187 std::unordered_set<HeapObjectHeader*> extracted;
188 std::swap(extracted, objects_);
189 DCHECK(objects_.empty());
190 return extracted;
191}
192
193template <AccessMode mode>
195 ConditionalMutexGuard<mode> guard(&lock_);
196 objects_.clear();
197}
198
199template <AccessMode mode>
201 ConditionalMutexGuard<mode> guard(&lock_);
202 return objects_.empty();
203}
204
205} // namespace internal
206} // namespace cppgc
207
208#endif // V8_HEAP_CPPGC_MARKING_WORKLISTS_H_
std::unordered_set< HeapObjectHeader * > Extract()
std::unordered_set< HeapObjectHeader * > objects_
WeakCallbackWorklist * weak_container_callback_worklist()
WeakCustomCallbackWorklist * weak_custom_callback_worklist()
EphemeronPairsWorklist * ephemeron_pairs_for_processing_worklist()
EphemeronPairsWorklist ephemeron_pairs_for_processing_worklist_
PreviouslyNotFullyConstructedWorklist * previously_not_fully_constructed_worklist()
RetraceMarkedObjectsWorklist * retrace_marked_objects_worklist()
RetraceMarkedObjectsWorklist retrace_marked_objects_worklist_
WeakCallbackWorklist weak_container_callback_worklist_
const ConcurrentMarkingBailoutWorklist * concurrent_marking_bailout_worklist() const
WeakContainersWorklist weak_containers_worklist_
WeakCallbackWorklist * parallel_weak_callback_worklist()
EphemeronPairsWorklist discovered_ephemeron_pairs_worklist_
WeakCallbackWorklist parallel_weak_callback_worklist_
ConcurrentMarkingBailoutWorklist * concurrent_marking_bailout_worklist()
NotFullyConstructedWorklist * not_fully_constructed_worklist()
heap::base::Worklist< HeapObjectHeader *, 16 > PreviouslyNotFullyConstructedWorklist
WeakContainersWorklist * weak_containers_worklist()
EphemeronPairsWorklist * discovered_ephemeron_pairs_worklist()
WriteBarrierWorklist * write_barrier_worklist()
WeakCustomCallbackWorklist weak_custom_callback_worklist_
ConcurrentMarkingBailoutWorklist concurrent_marking_bailout_worklist_
WriteBarrierWorklist write_barrier_worklist_
PreviouslyNotFullyConstructedWorklist previously_not_fully_constructed_worklist_
NotFullyConstructedWorklist not_fully_constructed_worklist_
void(*)(const LivenessBroker &, const void *) WeakCallback
Definition visitor.h:37
void(*)(Visitor *visitor, const void *object) TraceCallback
Definition trace-trait.h:38
#define DCHECK_NOT_NULL(val)
Definition logging.h:492
#define DCHECK(condition)
Definition logging.h:482
#define V8_EXPORT_PRIVATE
Definition macros.h:460