diff options
Diffstat (limited to 'deps/v8/src/heap/marking-worklist-inl.h')
-rw-r--r-- | deps/v8/src/heap/marking-worklist-inl.h | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/deps/v8/src/heap/marking-worklist-inl.h b/deps/v8/src/heap/marking-worklist-inl.h index 7e4c49667f..8a1551f1a2 100644 --- a/deps/v8/src/heap/marking-worklist-inl.h +++ b/deps/v8/src/heap/marking-worklist-inl.h @@ -5,9 +5,11 @@ #define V8_HEAP_MARKING_WORKLIST_INL_H_ #include <unordered_map> -#include <vector> +#include "src/heap/cppgc-js/cpp-marking-state-inl.h" #include "src/heap/marking-worklist.h" +#include "src/objects/embedder-data-slot.h" +#include "src/objects/js-objects-inl.h" namespace v8 { namespace internal { @@ -16,7 +18,7 @@ template <typename Callback> void MarkingWorklists::Update(Callback callback) { shared_.Update(callback); on_hold_.Update(callback); - embedder_.Update(callback); + wrapper_.Update(callback); other_.Update(callback); for (auto cw : context_worklists_) { if (cw.context == kSharedContext || cw.context == kOtherContext) { @@ -45,12 +47,30 @@ bool MarkingWorklists::Local::PopOnHold(HeapObject* object) { return on_hold_.Pop(object); } -void MarkingWorklists::Local::PushEmbedder(HeapObject object) { - embedder_.Push(object); +bool MarkingWorklists::Local::SupportsExtractWrapper() { + return cpp_marking_state_.get(); } -bool MarkingWorklists::Local::PopEmbedder(HeapObject* object) { - return embedder_.Pop(object); +bool MarkingWorklists::Local::ExtractWrapper(Map map, JSObject object, + WrapperSnapshot& snapshot) { + DCHECK_NOT_NULL(cpp_marking_state_); + return cpp_marking_state_->ExtractEmbedderDataSnapshot(map, object, snapshot); +} + +void MarkingWorklists::Local::PushExtractedWrapper( + const WrapperSnapshot& snapshot) { + DCHECK_NOT_NULL(cpp_marking_state_); + cpp_marking_state_->MarkAndPush(snapshot); +} + +void MarkingWorklists::Local::PushWrapper(HeapObject object) { + DCHECK_NULL(cpp_marking_state_); + wrapper_.Push(object); +} + +bool MarkingWorklists::Local::PopWrapper(HeapObject* object) { + DCHECK_NULL(cpp_marking_state_); + return wrapper_.Pop(object); } Address MarkingWorklists::Local::SwitchToContext(Address context) { @@ -72,6 +92,12 @@ void MarkingWorklists::Local::SwitchToContext( active_context_ = context; } +bool MarkingWorklists::Local::PublishWrapper() { + if (!cpp_marking_state_) return false; + cpp_marking_state_->Publish(); + return true; +} + } // namespace internal } // namespace v8 |