Loading...
Searching...
No Matches
v8-cppgc.h
Go to the documentation of this file.
1// Copyright 2020 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#ifndef INCLUDE_V8_CPPGC_H_
6#define INCLUDE_V8_CPPGC_H_
7
8#include <cstdint>
9#include <memory>
10#include <vector>
11
12#include "cppgc/common.h"
13#include "cppgc/custom-space.h"
15#include "cppgc/visitor.h"
16#include "v8-internal.h" // NOLINT(build/include_directory)
17#include "v8-platform.h" // NOLINT(build/include_directory)
18#include "v8-traced-handle.h" // NOLINT(build/include_directory)
19
20namespace cppgc {
21class AllocationHandle;
22class AllocationSampler;
23class HeapHandle;
24} // namespace cppgc
25
26namespace v8 {
27
28class Object;
29
30namespace internal {
31class CppHeap;
32} // namespace internal
33
35
38 std::vector<std::unique_ptr<cppgc::CustomSpaceBase>> custom_spaces)
39 : custom_spaces(std::move(custom_spaces)) {}
40
43
44 std::vector<std::unique_ptr<cppgc::CustomSpaceBase>> custom_spaces;
49 cppgc::Heap::MarkingType marking_support =
55 cppgc::Heap::SweepingType sweeping_support =
61 std::optional<cppgc::StackStartMarker> stack_start_marker = std::nullopt;
65 cppgc::AllocationSampler* allocation_sampler = nullptr;
66};
67
76 public:
77 static std::unique_ptr<CppHeap> Create(v8::Platform* platform,
78 const CppHeapCreateParams& params);
79
80 virtual ~CppHeap() = default;
81
86 cppgc::AllocationHandle& GetAllocationHandle();
87
93
102
110 std::vector<cppgc::CustomSpaceIndex> custom_spaces,
111 std::unique_ptr<CustomSpaceStatisticsReceiver> receiver);
112
119
126
133 cppgc::EmbedderStackState stack_state);
134
151
156
157 private:
158 CppHeap() = default;
159
160 friend class internal::CppHeap;
161};
162
163class JSVisitor : public cppgc::Visitor {
164 public:
166 ~JSVisitor() override = default;
167
168 void Trace(const TracedReferenceBase& ref) {
169 if (ref.IsEmptyThreadSafe()) return;
170 Visit(ref);
171 }
172
173 protected:
175
176 virtual void Visit(const TracedReferenceBase& ref) {}
177};
178
185 public:
195 virtual void AllocatedBytes(cppgc::CustomSpaceIndex space_index,
196 size_t bytes) = 0;
197};
198
199} // namespace v8
200
201namespace cppgc {
202
203template <typename T>
204struct TraceTrait<v8::TracedReference<T>> {
206 return {nullptr, Trace};
207 }
208
209 static void Trace(Visitor* visitor, const void* self) {
210 static_cast<v8::JSVisitor*>(visitor)->Trace(
211 *static_cast<const v8::TracedReference<T>*>(self));
212 }
213};
214
215} // namespace cppgc
216
217#endif // INCLUDE_V8_CPPGC_H_
Definition: platform.h:34
Definition: heap-handle.h:21
MarkingType
Definition: heap.h:80
SweepingType
Definition: heap.h:100
Definition: visitor.h:80
Definition: visitor.h:78
virtual void Visit(const void *self, TraceDescriptor)
Definition: visitor.h:382
Visitor(Key)
Definition: visitor.h:86
Definition: v8-cppgc.h:75
void CollectCustomSpaceStatisticsAtLastGC(std::vector< cppgc::CustomSpaceIndex > custom_spaces, std::unique_ptr< CustomSpaceStatisticsReceiver > receiver)
void CollectGarbageForTesting(cppgc::EmbedderStackState stack_state)
void CollectGarbageInYoungGenerationForTesting(cppgc::EmbedderStackState stack_state)
virtual ~CppHeap()=default
static std::unique_ptr< CppHeap > Create(v8::Platform *platform, const CppHeapCreateParams &params)
void EnableDetachedGarbageCollectionsForTesting()
void FinishSweepingForTesting()
void SetForceIncrementalSweepingForTesting(bool value)
cppgc::HeapStatistics CollectStatistics(cppgc::HeapStatistics::DetailLevel detail_level)
cppgc::HeapHandle & GetHeapHandle()
cppgc::AllocationHandle & GetAllocationHandle()
Definition: v8-cppgc.h:184
virtual void AllocatedBytes(cppgc::CustomSpaceIndex space_index, size_t bytes)=0
virtual ~CustomSpaceStatisticsReceiver()=default
Definition: v8-cppgc.h:163
JSVisitor(cppgc::Visitor::Key key)
Definition: v8-cppgc.h:165
~JSVisitor() override=default
virtual void Visit(const TracedReferenceBase &ref)
Definition: v8-cppgc.h:176
void Trace(const TracedReferenceBase &ref)
Definition: v8-cppgc.h:168
Definition: v8-platform.h:1278
Definition: v8-traced-handle.h:54
bool IsEmptyThreadSafe() const
Definition: v8-traced-handle.h:77
Definition: v8-traced-handle.h:166
Definition: allocation.h:39
EmbedderStackState
Definition: common.h:15
Definition: libplatform.h:15
Definition: custom-space.h:15
Definition: heap-statistics.h:19
DetailLevel
Definition: heap-statistics.h:28
Definition: trace-trait.h:43
static cppgc::TraceDescriptor GetTraceDescriptor(const void *self)
Definition: v8-cppgc.h:205
static void Trace(Visitor *visitor, const void *self)
Definition: v8-cppgc.h:209
Definition: trace-trait.h:104
static void Trace(Visitor *visitor, const void *self)
Definition: trace-trait.h:96
Definition: v8-cppgc.h:36
std::vector< std::unique_ptr< cppgc::CustomSpaceBase > > custom_spaces
Definition: v8-cppgc.h:44
CppHeapCreateParams(const CppHeapCreateParams &)=delete
CppHeapCreateParams(std::vector< std::unique_ptr< cppgc::CustomSpaceBase > > custom_spaces)
Definition: v8-cppgc.h:37
CppHeapCreateParams & operator=(const CppHeapCreateParams &)=delete
#define V8_EXPORT
Definition: v8config.h:874