v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
object-view.h
Go to the documentation of this file.
1
// Copyright 2021 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_OBJECT_VIEW_H_
6
#define V8_HEAP_CPPGC_OBJECT_VIEW_H_
7
8
#include "
include/v8config.h
"
9
#include "
src/heap/cppgc/globals.h
"
10
#include "
src/heap/cppgc/heap-object-header.h
"
11
#include "
src/heap/cppgc/heap-page.h
"
12
13
namespace
cppgc
{
14
namespace
internal
{
15
16
// ObjectView allows accessing a header within the bounds of the actual object.
17
// It is not exposed externally and does not keep the underlying object alive.
18
template
<AccessMode = AccessMode::kNonAtomic>
19
class
ObjectView
final {
20
public
:
21
V8_INLINE
explicit
ObjectView
(
const
HeapObjectHeader
& header);
22
23
V8_INLINE
Address
Start
()
const
;
24
V8_INLINE
ConstAddress
End
()
const
;
25
V8_INLINE
size_t
Size
()
const
;
26
27
private
:
28
const
HeapObjectHeader
&
header_
;
29
const
BasePage
*
base_page_
;
30
const
bool
is_large_object_
;
31
};
32
33
template
<AccessMode access_mode>
34
ObjectView<access_mode>::ObjectView
(
const
HeapObjectHeader
& header)
35
: header_(header),
36
base_page_(
37
BasePage
::FromPayload(const_cast<
HeapObjectHeader
*>(&header_))),
38
is_large_object_(header_.IsLargeObject<access_mode>()) {
39
DCHECK_EQ
(
Start
() +
Size
(),
End
());
40
}
41
42
template
<AccessMode access_mode>
43
Address
ObjectView<access_mode>::Start
()
const
{
44
return
header_.ObjectStart();
45
}
46
47
template
<AccessMode access_mode>
48
ConstAddress
ObjectView<access_mode>::End
()
const
{
49
return
is_large_object_ ?
LargePage::From
(base_page_)->
PayloadEnd
()
50
: header_.ObjectEnd<access_mode>();
51
}
52
53
template
<AccessMode access_mode>
54
size_t
ObjectView<access_mode>::Size
()
const
{
55
return
is_large_object_ ?
LargePage::From
(base_page_)->
ObjectSize
()
56
: header_.ObjectSize<access_mode>();
57
}
58
59
}
// namespace internal
60
}
// namespace cppgc
61
62
#endif
// V8_HEAP_CPPGC_OBJECT_VIEW_H_
cppgc::internal::BasePage
Definition
heap-page.h:30
cppgc::internal::HeapObjectHeader
Definition
heap-object-header.h:58
cppgc::internal::LargePage::From
static LargePage * From(BasePage *page)
Definition
heap-page.h:275
cppgc::internal::LargePage::PayloadEnd
Address PayloadEnd()
Definition
heap-page.cc:309
cppgc::internal::LargePage::ObjectSize
size_t ObjectSize() const
Definition
heap-page.h:292
cppgc::internal::ObjectView
Definition
object-view.h:19
cppgc::internal::ObjectView::Size
V8_INLINE size_t Size() const
Definition
object-view.h:54
cppgc::internal::ObjectView::Start
V8_INLINE Address Start() const
Definition
object-view.h:43
cppgc::internal::ObjectView::ObjectView
V8_INLINE ObjectView(const HeapObjectHeader &header)
Definition
object-view.h:34
cppgc::internal::ObjectView::is_large_object_
const bool is_large_object_
Definition
object-view.h:30
cppgc::internal::ObjectView::base_page_
const BasePage * base_page_
Definition
object-view.h:29
cppgc::internal::ObjectView::header_
const HeapObjectHeader & header_
Definition
object-view.h:28
cppgc::internal::ObjectView::End
V8_INLINE ConstAddress End() const
Definition
object-view.h:48
heap-object-header.h
heap-page.h
globals.h
cppgc::internal::Address
uint8_t * Address
Definition
globals.h:17
cppgc::internal::ConstAddress
const uint8_t * ConstAddress
Definition
globals.h:18
cppgc
Definition
cross-heap-remembered-set.h:14
v8::internal::internal
internal
Definition
wasm-objects-inl.h:458
DCHECK_EQ
#define DCHECK_EQ(v1, v2)
Definition
logging.h:485
v8config.h
V8_INLINE
#define V8_INLINE
Definition
v8config.h:500
src
heap
cppgc
object-view.h
Generated on Sun Apr 6 2025 21:08:54 for v8 by
1.12.0