summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/marking-worklist-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/marking-worklist-inl.h')
-rw-r--r--deps/v8/src/heap/marking-worklist-inl.h38
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