xref: /third_party/node/deps/v8/src/heap/cppgc/testing.cc (revision 1cb0ef41)
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "include/cppgc/testing.h"
6
7#include "src/base/logging.h"
8#include "src/heap/cppgc/heap-base.h"
9
10namespace cppgc {
11namespace testing {
12
13OverrideEmbedderStackStateScope::OverrideEmbedderStackStateScope(
14    HeapHandle& heap_handle, EmbedderStackState state)
15    : heap_handle_(heap_handle) {
16  auto& heap = internal::HeapBase::From(heap_handle_);
17  CHECK_NULL(heap.override_stack_state_.get());
18  heap.override_stack_state_ = std::make_unique<EmbedderStackState>(state);
19}
20
21OverrideEmbedderStackStateScope::~OverrideEmbedderStackStateScope() {
22  internal::HeapBase::From(heap_handle_).override_stack_state_.reset();
23}
24
25StandaloneTestingHeap::StandaloneTestingHeap(HeapHandle& heap_handle)
26    : heap_handle_(heap_handle) {}
27
28void StandaloneTestingHeap::StartGarbageCollection() {
29  internal::HeapBase::From(heap_handle_)
30      .StartIncrementalGarbageCollectionForTesting();
31}
32
33bool StandaloneTestingHeap::PerformMarkingStep(EmbedderStackState stack_state) {
34  return internal::HeapBase::From(heap_handle_)
35      .marker()
36      ->IncrementalMarkingStepForTesting(stack_state);
37}
38
39void StandaloneTestingHeap::FinalizeGarbageCollection(
40    EmbedderStackState stack_state) {
41  internal::HeapBase::From(heap_handle_)
42      .FinalizeIncrementalGarbageCollectionForTesting(stack_state);
43}
44
45void StandaloneTestingHeap::ToggleMainThreadMarking(bool should_mark) {
46  internal::HeapBase::From(heap_handle_)
47      .marker()
48      ->SetMainThreadMarkingDisabledForTesting(!should_mark);
49}
50
51void StandaloneTestingHeap::ForceCompactionForNextGarbageCollection() {
52  internal::HeapBase::From(heap_handle_)
53      .compactor()
54      .EnableForNextGCForTesting();
55}
56
57bool IsHeapObjectOld(void* object) {
58#if defined(CPPGC_YOUNG_GENERATION)
59  return internal::HeapObjectHeader::FromObject(object).IsMarked();
60#else
61  return true;
62#endif
63}
64
65}  // namespace testing
66}  // namespace cppgc
67