summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/heap/cppgc/testing-unittest.cc
blob: cf45fe02485f6187dfaa389f42b090e241962ccd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
57
58
59
60
61
62
63
// Copyright 2020 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 "include/cppgc/allocation.h"
#include "include/cppgc/garbage-collected.h"
#include "include/cppgc/persistent.h"
#include "test/unittests/heap/cppgc/tests.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cppgc {
namespace internal {

namespace {
class TestingTest : public testing::TestWithHeap {};

class GCed : public GarbageCollected<GCed> {
 public:
  void Trace(Visitor*) const {}
};
}  // namespace

TEST_F(TestingTest, OverrideEmbeddertackStateScope) {
  {
    auto* gced = MakeGarbageCollected<GCed>(GetHeap()->GetAllocationHandle());
    WeakPersistent<GCed> weak{gced};
    internal::Heap::From(GetHeap())->CollectGarbage(
        Heap::Config::PreciseAtomicConfig());
    EXPECT_FALSE(weak);
  }
  {
    auto* gced = MakeGarbageCollected<GCed>(GetHeap()->GetAllocationHandle());
    WeakPersistent<GCed> weak{gced};
    cppgc::testing::OverrideEmbedderStackStateScope override_stack(
        GetHeap()->GetHeapHandle(),
        EmbedderStackState::kMayContainHeapPointers);
    internal::Heap::From(GetHeap())->CollectGarbage(
        Heap::Config::PreciseAtomicConfig());
    EXPECT_TRUE(weak);
  }
  {
    auto* gced = MakeGarbageCollected<GCed>(GetHeap()->GetAllocationHandle());
    WeakPersistent<GCed> weak{gced};
    cppgc::testing::OverrideEmbedderStackStateScope override_stack(
        GetHeap()->GetHeapHandle(), EmbedderStackState::kNoHeapPointers);
    internal::Heap::From(GetHeap())->CollectGarbage(
        Heap::Config::ConservativeAtomicConfig());
    EXPECT_FALSE(weak);
  }
}

TEST_F(TestingTest, StandaloneTestingHeap) {
  // Perform garbage collection through the StandaloneTestingHeap API.
  cppgc::testing::StandaloneTestingHeap heap(GetHeap()->GetHeapHandle());
  heap.StartGarbageCollection();
  heap.PerformMarkingStep(EmbedderStackState::kNoHeapPointers);
  heap.FinalizeGarbageCollection(EmbedderStackState::kNoHeapPointers);
}

}  // namespace internal
}  // namespace cppgc