Commit dfbd9edb authored by Michael Lippautz's avatar Michael Lippautz Committed by V8 LUCI CQ

cppgc-js: Make use of simple unmarker when young gen is enabled

Young generation collection requires that full GCs unmark before
starting marking.

Bug: v8:12324
Change-Id: Id6cc218057252cbf0664326126f34b07ac8ea247
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3229570
Auto-Submit: Michael Lippautz <mlippautz@chromium.org>
Commit-Queue: Anton Bikineev <bikineev@chromium.org>
Reviewed-by: 's avatarAnton Bikineev <bikineev@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77445}
parent 43633af0
......@@ -357,7 +357,7 @@ declare_args() {
v8_current_cpu == "x86" || v8_current_cpu == "x64" ||
v8_current_cpu == "arm" || v8_current_cpu == "arm64" ||
v8_current_cpu == "mips64el" || v8_current_cpu == "mipsel" ||
v8_current_cpu == "loong64" || v8_current_cpu == "riscv64"
v8_current_cpu == "loong64" || v8_current_cpu == "riscv64"
}
# Derived defaults.
......@@ -5504,6 +5504,7 @@ v8_source_set("cppgc_base") {
"src/heap/cppgc/sweeper.cc",
"src/heap/cppgc/sweeper.h",
"src/heap/cppgc/task-handle.h",
"src/heap/cppgc/unmarker.h",
# TODO(v8:11952): Remove the testing header here once depending on both,
# //v8:v8 and //v8:v8_for_testing does not result in ODR violations.
......
......@@ -37,6 +37,7 @@
#include "src/heap/cppgc/raw-heap.h"
#include "src/heap/cppgc/stats-collector.h"
#include "src/heap/cppgc/sweeper.h"
#include "src/heap/cppgc/unmarker.h"
#include "src/heap/embedder-tracing.h"
#include "src/heap/gc-tracer.h"
#include "src/heap/marking-worklist.h"
......@@ -417,6 +418,10 @@ bool ShouldReduceMemory(CppHeap::TraceFlags flags) {
void CppHeap::TracePrologue(TraceFlags flags) {
CHECK(!sweeper_.IsSweepingInProgress());
#if defined(CPPGC_YOUNG_GENERATION)
cppgc::internal::SequentialUnmarker unmarker(raw_heap());
#endif // defined(CPPGC_YOUNG_GENERATION)
current_flags_ = flags;
const UnifiedHeapMarker::MarkingConfig marking_config{
UnifiedHeapMarker::MarkingConfig::CollectionType::kMajor,
......
......@@ -15,6 +15,7 @@
#include "src/heap/cppgc/prefinalizer-handler.h"
#include "src/heap/cppgc/stats-collector.h"
#include "src/heap/cppgc/sweeper.h"
#include "src/heap/cppgc/unmarker.h"
namespace cppgc {
......@@ -61,19 +62,6 @@ namespace internal {
namespace {
class Unmarker final : private HeapVisitor<Unmarker> {
friend class HeapVisitor<Unmarker>;
public:
explicit Unmarker(RawHeap& heap) { Traverse(heap); }
private:
bool VisitHeapObjectHeader(HeapObjectHeader& header) {
if (header.IsMarked()) header.Unmark();
return true;
}
};
void CheckConfig(Heap::Config config, Heap::MarkingType marking_support,
Heap::SweepingType sweeping_support) {
CHECK_WITH_MSG(
......@@ -160,7 +148,7 @@ void Heap::StartGarbageCollection(Config config) {
#if defined(CPPGC_YOUNG_GENERATION)
if (config.collection_type == Config::CollectionType::kMajor)
Unmarker unmarker(raw_heap());
SequentialUnmarker unmarker(raw_heap());
#endif
const Marker::MarkingConfig marking_config{
......
// Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_HEAP_CPPGC_UNMARKER_H_
#define V8_HEAP_CPPGC_UNMARKER_H_
#include "src/heap/cppgc/heap-object-header.h"
#include "src/heap/cppgc/heap-visitor.h"
namespace cppgc {
namespace internal {
class SequentialUnmarker final : private HeapVisitor<SequentialUnmarker> {
friend class HeapVisitor<SequentialUnmarker>;
public:
explicit SequentialUnmarker(RawHeap& heap) { Traverse(heap); }
private:
bool VisitHeapObjectHeader(HeapObjectHeader& header) {
if (header.IsMarked()) header.Unmark();
return true;
}
};
} // namespace internal
} // namespace cppgc
#endif // V8_HEAP_CPPGC_UNMARKER_H_
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