v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
cross-heap-remembered-set.h
Go to the documentation of this file.
1// Copyright 2022 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 V8_HEAP_CPPGC_JS_CROSS_HEAP_REMEMBERED_SET_H_
6#define V8_HEAP_CPPGC_JS_CROSS_HEAP_REMEMBERED_SET_H_
7
8#include <vector>
9
10#include "src/base/macros.h"
11#include "src/handles/handles.h"
12#include "src/objects/tagged.h"
13
14namespace cppgc::internal {
15class HeapBase;
16}
17
18namespace v8::internal {
19
20class JSObject;
21
22// The class is used to remember V8 to Oilpan references.
24 public:
26 : heap_base_(heap_base) {}
27
30
31 void RememberReferenceIfNeeded(Isolate& isolate, Tagged<JSObject> host_obj,
32 void* cppgc_object);
33 void Reset(Isolate& isolate);
34
35 template <typename F>
36 void Visit(Isolate&, F);
37
38 bool IsEmpty() const { return remembered_v8_to_cppgc_references_.empty(); }
39
40 private:
42 // The vector keeps handles to remembered V8 objects that have outgoing
43 // references to the cppgc heap. Please note that the handles are global.
44 std::vector<IndirectHandle<JSObject>> remembered_v8_to_cppgc_references_;
45};
46
47template <typename F>
49 for (auto& obj : remembered_v8_to_cppgc_references_) {
50 f(*obj);
51 }
52}
53
54} // namespace v8::internal
55
56#endif // V8_HEAP_CPPGC_JS_CROSS_HEAP_REMEMBERED_SET_H_
#define F(name, str)
CrossHeapRememberedSet(const CrossHeapRememberedSet &)=delete
CrossHeapRememberedSet(CrossHeapRememberedSet &&)=delete
CrossHeapRememberedSet(cppgc::internal::HeapBase &heap_base)
std::vector< IndirectHandle< JSObject > > remembered_v8_to_cppgc_references_
#define V8_EXPORT_PRIVATE
Definition macros.h:460