diff options
Diffstat (limited to 'deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h')
-rw-r--r-- | deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h b/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h index 23294b4dca..3e52ae3c43 100644 --- a/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h +++ b/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h @@ -6,7 +6,9 @@ #define V8_HEAP_CPPGC_JS_CPP_MARKING_STATE_INL_H_ #include "src/heap/cppgc-js/cpp-marking-state.h" -#include "src/heap/embedder-tracing-inl.h" +#include "src/heap/cppgc-js/wrappable-info-inl.h" +#include "src/heap/cppgc-js/wrappable-info.h" +#include "src/heap/cppgc/heap-page.h" #include "src/objects/embedder-data-slot.h" #include "src/objects/js-objects.h" @@ -33,11 +35,25 @@ void CppMarkingState::MarkAndPush(const EmbedderDataSnapshot& snapshot) { void CppMarkingState::MarkAndPush(const EmbedderDataSlot type_slot, const EmbedderDataSlot instance_slot) { - LocalEmbedderHeapTracer::WrapperInfo info; - if (LocalEmbedderHeapTracer::ExtractWrappableInfo( - isolate_, wrapper_descriptor_, type_slot, instance_slot, &info)) { + const auto maybe_info = WrappableInfo::From( + isolate_, type_slot, instance_slot, wrapper_descriptor_); + if (maybe_info.has_value()) { marking_state_.MarkAndPush( - cppgc::internal::HeapObjectHeader::FromObject(info.second)); + cppgc::internal::HeapObjectHeader::FromObject(maybe_info->instance)); + } +} + +// TODO(v8:13796): Remove this if it doesn't flush out any issues. +void CppMarkingState::MarkAndPushForWriteBarrier( + const EmbedderDataSlot type_slot, const EmbedderDataSlot instance_slot) { + const auto maybe_info = WrappableInfo::From( + isolate_, type_slot, instance_slot, wrapper_descriptor_); + if (maybe_info.has_value()) { + cppgc::internal::HeapObjectHeader& header = + cppgc::internal::HeapObjectHeader::FromObject(maybe_info->instance); + CHECK_EQ(&header, &cppgc::internal::BasePage::FromPayload(&header) + ->ObjectHeaderFromInnerAddress(&header)); + marking_state_.MarkAndPush(header); } } |