Commit 249d0ea4 authored by Dominik Inführ's avatar Dominik Inführ Committed by Commit Bot

[heap] Parallel marking for ephemerons

After marking ephemerons process the worklist in parallel.

Bug: chromium:844008
Change-Id: Id750c19d0f564675f051cc4f9933d41fa0afb42b
Reviewed-on: https://chromium-review.googlesource.com/1097490
Commit-Queue: Dominik Inführ <dinfuehr@google.com>
Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53694}
parent 7745c73a
......@@ -1458,6 +1458,18 @@ void MarkCompactCollector::MarkRoots(RootVisitor* root_visitor,
ProcessTopOptimizedFrame(custom_root_body_visitor);
}
void MarkCompactCollector::ProcessMarkingWorklistInParallel() {
if (FLAG_parallel_marking) {
DCHECK(FLAG_concurrent_marking);
heap_->concurrent_marking()->RescheduleTasksIfNeeded();
}
ProcessMarkingWorklist();
FinishConcurrentMarking(
ConcurrentMarking::StopRequest::COMPLETE_ONGOING_TASKS);
ProcessMarkingWorklist();
}
void MarkCompactCollector::ProcessMarkingWorklist() {
HeapObject* object;
MarkCompactMarkingVisitor visitor(this, marking_state());
......@@ -1495,7 +1507,7 @@ void MarkCompactCollector::ProcessEphemeronMarking() {
{
TRACE_GC(heap()->tracer(),
GCTracer::Scope::MC_MARK_WEAK_CLOSURE_EPHEMERON_MARKING);
ProcessMarkingWorklist();
ProcessMarkingWorklistInParallel();
}
}
CHECK(marking_worklist()->IsEmpty());
......
......@@ -701,6 +701,10 @@ class MarkCompactCollector final : public MarkCompactCollectorBase {
// if no concurrent threads are running.
void ProcessMarkingWorklist() override;
// Drains the main thread marking work list. Will mark all pending objects
// if no concurrent threads are running.
void ProcessMarkingWorklistInParallel();
// Callback function for telling whether the object *p is an unmarked
// heap object.
static bool IsUnmarkedHeapObject(Heap* heap, Object** p);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment