| Index: src/heap/mark-compact.cc
|
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
|
| index e537689c4a5ca4ba35530fc8d81a55f3bfd37596..914ea899053b31ce57477c2f7f67d893bbcb50d4 100644
|
| --- a/src/heap/mark-compact.cc
|
| +++ b/src/heap/mark-compact.cc
|
| @@ -1961,7 +1961,6 @@ void MarkCompactCollector::ProcessMarkingDeque() {
|
| }
|
| }
|
|
|
| -
|
| // Mark all objects reachable (transitively) from objects on the marking
|
| // stack including references only considered in the atomic marking pause.
|
| void MarkCompactCollector::ProcessEphemeralMarking(
|
| @@ -1969,7 +1968,11 @@ void MarkCompactCollector::ProcessEphemeralMarking(
|
| bool work_to_do = true;
|
| DCHECK(marking_deque_.IsEmpty() && !marking_deque_.overflowed());
|
| while (work_to_do) {
|
| - if (!only_process_harmony_weak_collections) {
|
| + if (heap()->UsingEmbedderHeapTracer()) {
|
| + heap()->embedder_heap_tracer()->TraceWrappableFrom(
|
| + reinterpret_cast<v8::Isolate*>(isolate()), wrappers_to_trace_);
|
| + wrappers_to_trace_.clear();
|
| + } else if (!only_process_harmony_weak_collections) {
|
| isolate()->global_handles()->IterateObjectGroups(
|
| visitor, &IsUnmarkedHeapObjectWithHeap);
|
| MarkImplicitRefGroups(&MarkCompactMarkingVisitor::MarkObject);
|
| @@ -1980,7 +1983,6 @@ void MarkCompactCollector::ProcessEphemeralMarking(
|
| }
|
| }
|
|
|
| -
|
| void MarkCompactCollector::ProcessTopOptimizedFrame(ObjectVisitor* visitor) {
|
| for (StackFrameIterator it(isolate(), isolate()->thread_local_top());
|
| !it.done(); it.Advance()) {
|
| @@ -2135,6 +2137,10 @@ void MarkCompactCollector::MarkLiveObjects() {
|
| {
|
| TRACE_GC(heap()->tracer(),
|
| GCTracer::Scope::MC_MARK_WEAK_CLOSURE_EPHEMERAL);
|
| + if (heap()->UsingEmbedderHeapTracer()) {
|
| + heap()->embedder_heap_tracer()->TraceRoots(
|
| + reinterpret_cast<v8::Isolate*>(isolate()));
|
| + }
|
| ProcessEphemeralMarking(&root_visitor, false);
|
| ProcessMarkingDeque();
|
| }
|
| @@ -2171,6 +2177,10 @@ void MarkCompactCollector::MarkLiveObjects() {
|
| TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_MARK_WEAK_CLOSURE_HARMONY);
|
| ProcessEphemeralMarking(&root_visitor, true);
|
| ProcessMarkingDeque();
|
| + if (heap()->UsingEmbedderHeapTracer()) {
|
| + heap()->embedder_heap_tracer()->ClearTracingMarks(
|
| + reinterpret_cast<v8::Isolate*>(isolate()));
|
| + }
|
| }
|
| }
|
|
|
|
|