testing.cc 2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 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.

#include "include/cppgc/testing.h"

#include "src/base/logging.h"
#include "src/heap/cppgc/heap-base.h"

namespace cppgc {
namespace testing {

OverrideEmbedderStackStateScope::OverrideEmbedderStackStateScope(
    HeapHandle& heap_handle, EmbedderStackState state)
    : heap_handle_(heap_handle) {
16
  auto& heap = internal::HeapBase::From(heap_handle_);
17 18 19 20 21
  CHECK_NULL(heap.override_stack_state_.get());
  heap.override_stack_state_ = std::make_unique<EmbedderStackState>(state);
}

OverrideEmbedderStackStateScope::~OverrideEmbedderStackStateScope() {
22
  internal::HeapBase::From(heap_handle_).override_stack_state_.reset();
23 24
}

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
StandaloneTestingHeap::StandaloneTestingHeap(HeapHandle& heap_handle)
    : heap_handle_(heap_handle) {}

void StandaloneTestingHeap::StartGarbageCollection() {
  internal::HeapBase::From(heap_handle_)
      .StartIncrementalGarbageCollectionForTesting();
}

bool StandaloneTestingHeap::PerformMarkingStep(EmbedderStackState stack_state) {
  return internal::HeapBase::From(heap_handle_)
      .marker()
      ->IncrementalMarkingStepForTesting(stack_state);
}

void StandaloneTestingHeap::FinalizeGarbageCollection(
    EmbedderStackState stack_state) {
  internal::HeapBase::From(heap_handle_)
      .FinalizeIncrementalGarbageCollectionForTesting(stack_state);
}

void StandaloneTestingHeap::ToggleMainThreadMarking(bool should_mark) {
  internal::HeapBase::From(heap_handle_)
      .marker()
      ->SetMainThreadMarkingDisabledForTesting(!should_mark);
}

void StandaloneTestingHeap::ForceCompactionForNextGarbageCollection() {
  internal::HeapBase::From(heap_handle_)
      .compactor()
      .EnableForNextGCForTesting();
}

57 58 59 60 61 62 63 64
bool IsHeapObjectOld(void* object) {
#if defined(CPPGC_YOUNG_GENERATION)
  return internal::HeapObjectHeader::FromObject(object).IsMarked();
#else
  return true;
#endif
}

65 66
}  // namespace testing
}  // namespace cppgc