v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
references.h
Go to the documentation of this file.
1// Copyright 2018 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_SNAPSHOT_REFERENCES_H_
6#define V8_SNAPSHOT_REFERENCES_H_
7
9#include "src/base/hashmap.h"
12
13namespace v8 {
14namespace internal {
15
16// Values must be contiguous and start at 0 since they're directly used as
17// array indices.
18enum class SnapshotSpace : uint8_t {
19 kReadOnlyHeap = 0,
20 kOld = 1,
21 kCode = 2,
22 kTrusted = 3,
23};
24static constexpr int kNumberOfSnapshotSpaces = 4;
25
27 private:
34
36 : bit_field_(TypeBits::encode(type) | ValueBits::encode(value)) {}
37
38 public:
39 static SerializerReference BackReference(uint32_t index) {
41 }
42
46
47 static SerializerReference AttachedReference(uint32_t index) {
49 }
50
51 static SerializerReference BuiltinReference(uint32_t index) {
53 }
54
55 bool is_back_reference() const {
57 }
58
59 uint32_t back_ref_index() const {
62 }
63
67
72
76
81
85
86 uint32_t builtin_index() const {
89 }
90
91 private:
93 using ValueBits = TypeBits::Next<uint32_t, 32 - TypeBits::kSize>;
94
95 uint32_t bit_field_;
96
98};
99
100// SerializerReference has to fit in an IdentityMap value field.
101static_assert(sizeof(SerializerReference) <= sizeof(void*));
102
104 public:
106 : map_(isolate->heap()), attached_reference_index_(0) {}
107
109 return map_.Find(object);
110 }
111
113 DirectHandle<HeapObject> object) const {
114 return map_.Find(object);
115 }
116
117 const SerializerReference* LookupBackingStore(void* backing_store) const {
118 auto it = backing_store_map_.find(backing_store);
119 if (it == backing_store_map_.end()) return nullptr;
120 return &it->second;
121 }
122
125 map_.Insert(object, reference);
126 }
127
128 void AddBackingStore(void* backing_store, SerializerReference reference) {
129 DCHECK(backing_store_map_.find(backing_store) == backing_store_map_.end());
130 backing_store_map_.emplace(backing_store, reference);
131 }
132
134 SerializerReference reference =
136 map_.Insert(object, reference);
137 return reference;
138 }
139
140 private:
142 std::unordered_map<void*, SerializerReference> backing_store_map_;
144};
145
146} // namespace internal
147} // namespace v8
148
149#endif // V8_SNAPSHOT_REFERENCES_H_
static constexpr T decode(U value)
Definition bit-field.h:66
static constexpr int kSize
Definition bit-field.h:40
void AddBackingStore(void *backing_store, SerializerReference reference)
Definition references.h:128
const SerializerReference * LookupBackingStore(void *backing_store) const
Definition references.h:117
IdentityMap< SerializerReference, base::DefaultAllocationPolicy > map_
Definition references.h:141
const SerializerReference * LookupReference(Tagged< HeapObject > object) const
Definition references.h:108
SerializerReference AddAttachedReference(Tagged< HeapObject > object)
Definition references.h:133
SerializerReferenceMap(Isolate *isolate)
Definition references.h:105
std::unordered_map< void *, SerializerReference > backing_store_map_
Definition references.h:142
const SerializerReference * LookupReference(DirectHandle< HeapObject > object) const
Definition references.h:112
void Add(Tagged< HeapObject > object, SerializerReference reference)
Definition references.h:123
static SerializerReference BackReference(uint32_t index)
Definition references.h:39
uint32_t attached_reference_index() const
Definition references.h:77
static SerializerReference OffHeapBackingStoreReference(uint32_t index)
Definition references.h:43
static SerializerReference BuiltinReference(uint32_t index)
Definition references.h:51
uint32_t off_heap_backing_store_index() const
Definition references.h:68
SerializerReference(SpecialValueType type, uint32_t value)
Definition references.h:35
bool is_off_heap_backing_store_reference() const
Definition references.h:64
static SerializerReference AttachedReference(uint32_t index)
Definition references.h:47
static constexpr int kNumberOfSnapshotSpaces
Definition references.h:24
#define DCHECK_NULL(val)
Definition logging.h:491
#define DCHECK(condition)
Definition logging.h:482