v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
cross-heap-remembered-set.cc
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
#include "
src/heap/cppgc-js/cross-heap-remembered-set.h
"
6
7
#include "
src/api/api-inl.h
"
8
#include "
src/handles/global-handles-inl.h
"
9
#include "
src/heap/cppgc/heap-page.h
"
10
11
namespace
v8::internal
{
12
13
void
CrossHeapRememberedSet::RememberReferenceIfNeeded
(
14
Isolate
& isolate,
Tagged<JSObject>
host_obj,
void
* cppgc_object) {
15
DCHECK_NOT_NULL
(cppgc_object);
16
// Any in-cage pointer must point to a vaild, not freed cppgc object.
17
auto
* page =
18
cppgc::internal::BasePage::FromInnerAddress
(&
heap_base_
, cppgc_object);
19
// TODO(v8:13475): Better filter with on-cage check.
20
if
(!page)
return
;
21
auto
& value_hoh = page->ObjectHeaderFromInnerAddress(cppgc_object);
22
if
(!value_hoh.IsYoung())
return
;
23
remembered_v8_to_cppgc_references_
.push_back(
24
isolate.global_handles()->Create(host_obj));
25
}
26
27
void
CrossHeapRememberedSet::Reset
(
Isolate
& isolate) {
28
for
(
auto
& h :
remembered_v8_to_cppgc_references_
) {
29
isolate.global_handles()->Destroy(h.location());
30
}
31
remembered_v8_to_cppgc_references_
.clear();
32
remembered_v8_to_cppgc_references_
.shrink_to_fit();
33
}
34
35
}
// namespace v8::internal
api-inl.h
cppgc::internal::BasePage::FromInnerAddress
static BasePage * FromInnerAddress(const HeapBase *, void *)
Definition
heap-page.cc:40
v8::internal::CrossHeapRememberedSet::heap_base_
cppgc::internal::HeapBase & heap_base_
Definition
cross-heap-remembered-set.h:41
v8::internal::CrossHeapRememberedSet::RememberReferenceIfNeeded
void RememberReferenceIfNeeded(Isolate &isolate, Tagged< JSObject > host_obj, void *cppgc_object)
Definition
cross-heap-remembered-set.cc:13
v8::internal::CrossHeapRememberedSet::Reset
void Reset(Isolate &isolate)
Definition
cross-heap-remembered-set.cc:27
v8::internal::CrossHeapRememberedSet::remembered_v8_to_cppgc_references_
std::vector< IndirectHandle< JSObject > > remembered_v8_to_cppgc_references_
Definition
cross-heap-remembered-set.h:44
v8::internal::Isolate
Definition
isolate.h:586
v8::internal::Tagged
Definition
waiter-queue-node.h:21
cross-heap-remembered-set.h
global-handles-inl.h
heap-page.h
v8::internal
Definition
api-arguments-inl.h:20
DCHECK_NOT_NULL
#define DCHECK_NOT_NULL(val)
Definition
logging.h:492
src
heap
cppgc-js
cross-heap-remembered-set.cc
Generated on Sun Apr 6 2025 21:08:54 for v8 by
1.12.0