v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
marking-state.cc
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
6
7#include <unordered_set>
8
11
12namespace cppgc {
13namespace internal {
14
16
18 MarkingWorklists& marking_worklists,
19 CompactionWorklists* compaction_worklists)
20 : MarkingStateBase(heap, marking_worklists),
21 previously_not_fully_constructed_worklist_(
22 *marking_worklists.previously_not_fully_constructed_worklist()),
23 weak_container_callback_worklist_(
24 *marking_worklists.weak_container_callback_worklist()),
25 parallel_weak_callback_worklist_(
26 *marking_worklists.parallel_weak_callback_worklist()),
27 weak_custom_callback_worklist_(
28 *marking_worklists.weak_custom_callback_worklist()),
29 write_barrier_worklist_(*marking_worklists.write_barrier_worklist()),
30 concurrent_marking_bailout_worklist_(
31 *marking_worklists.concurrent_marking_bailout_worklist()),
32 discovered_ephemeron_pairs_worklist_(
33 *marking_worklists.discovered_ephemeron_pairs_worklist()),
34 ephemeron_pairs_for_processing_worklist_(
35 *marking_worklists.ephemeron_pairs_for_processing_worklist()),
36 weak_containers_worklist_(*marking_worklists.weak_containers_worklist()) {
37 if (compaction_worklists) {
39 std::make_unique<CompactionWorklists::MovableReferencesWorklist::Local>(
40 *compaction_worklists->movable_slots_worklist());
41 }
42}
43
47
59
60 for (const auto& entry : marked_bytes_map_.Take()) {
61 entry.first->IncrementMarkedBytes(static_cast<size_t>(entry.second));
62 }
63}
64
66 std::unordered_set<HeapObjectHeader*> objects =
68 for (HeapObjectHeader* object : objects) {
69 if (MarkNoPush(*object))
71 }
72}
73
83
88
89} // namespace internal
90} // namespace cppgc
BasicMarkingState(HeapBase &heap, MarkingWorklists &, CompactionWorklists *)
MarkingWorklists::EphemeronPairsWorklist::Local discovered_ephemeron_pairs_worklist_
V8_EXPORT_PRIVATE void Publish() override
heap::base::CachedUnorderedMap< BasePage *, int64_t, v8::base::hash< BasePage * > > marked_bytes_map_
std::unique_ptr< CompactionWorklists::MovableReferencesWorklist::Local > movable_slots_worklist_
MarkingWorklists::WriteBarrierWorklist::Local write_barrier_worklist_
MarkingWorklists::PreviouslyNotFullyConstructedWorklist::Local previously_not_fully_constructed_worklist_
MarkingWorklists::EphemeronPairsWorklist::Local ephemeron_pairs_for_processing_worklist_
MarkingWorklists::WeakCustomCallbackWorklist::Local weak_custom_callback_worklist_
MarkingWorklists::ConcurrentMarkingBailoutWorklist::Local concurrent_marking_bailout_worklist_
MarkingWorklists::WeakCallbackWorklist::Local weak_container_callback_worklist_
MarkingWorklists::WeakCallbackWorklist::Local parallel_weak_callback_worklist_
MovableReferencesWorklist * movable_slots_worklist()
StatsCollector * stats_collector()
Definition heap-base.h:118
virtual V8_EXPORT_PRIVATE void Publish()
MarkingWorklists::MarkingWorklist::Local marking_worklist_
MarkingWorklists::NotFullyConstructedWorklist & not_fully_constructed_worklist_
std::unordered_set< HeapObjectHeader * > Extract()
V8_EXPORT_PRIVATE void Publish() override
bool MarkNoPush(HeapObjectHeader &header)
MarkingWorklists::RetraceMarkedObjectsWorklist::Local retrace_marked_objects_worklist_
#define DCHECK_EQ(v1, v2)
Definition logging.h:485