Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(359)

Unified Diff: src/heap/mark-compact.cc

Issue 1844413002: Use EmbedderHeapTracer instead of object grouping when trace_embedder_heap flag is set (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove flag, presence of heap tracer is enough Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()) {
Hannes Payer (out of office) 2016/04/07 20:38:31 This piece of code and the code below need separat
Marcel Hlopko 2016/04/08 08:08:10 Let's not make this method more complicated than i
+ 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()));
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698