node-aix-ppc64 19.8.1 → 20.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +211 -1516
- package/README.md +28 -23
- package/bin/node +0 -0
- package/include/node/common.gypi +1 -1
- package/include/node/config.gypi +13 -6
- package/include/node/libplatform/v8-tracing.h +2 -2
- package/include/node/node.exp +8394 -4909
- package/include/node/node.h +22 -35
- package/include/node/node_api.h +17 -59
- package/include/node/node_version.h +4 -4
- package/include/node/openssl/archs/BSD-x86/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/BSD-x86/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/BSD-x86/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/BSD-x86_64/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/BSD-x86_64/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN32/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN32/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN64A/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/VC-WIN64A/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/aix64-gcc-as/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/aix64-gcc-as/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/aix64-gcc-as/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin-i386-cc/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-aarch64/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-aarch64/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-armv4/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-armv4/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-armv4/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-elf/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-elf/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-elf/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-ppc64le/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-ppc64le/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-x86_64/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux-x86_64/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux32-s390x/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux32-s390x/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-mips64/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-mips64/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-riscv64/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-s390x/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/linux64-s390x/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/solaris-x86-gcc/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h +1 -1
- package/include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h +1 -1
- package/include/node/v8-array-buffer.h +59 -0
- package/include/node/v8-callbacks.h +14 -1
- package/include/node/v8-context.h +50 -3
- package/include/node/v8-data.h +1 -1
- package/include/node/v8-embedder-heap.h +0 -169
- package/include/node/v8-function-callback.h +69 -42
- package/include/node/v8-function.h +1 -0
- package/include/node/v8-internal.h +242 -150
- package/include/node/v8-isolate.h +30 -40
- package/include/node/v8-local-handle.h +81 -48
- package/include/node/v8-microtask-queue.h +5 -0
- package/include/node/v8-object.h +21 -3
- package/include/node/v8-persistent-handle.h +25 -16
- package/include/node/v8-platform.h +79 -10
- package/include/node/v8-primitive.h +19 -12
- package/include/node/v8-profiler.h +49 -31
- package/include/node/v8-script.h +29 -1
- package/include/node/v8-snapshot.h +4 -8
- package/include/node/v8-template.h +3 -1
- package/include/node/v8-traced-handle.h +22 -28
- package/include/node/v8-value.h +31 -4
- package/include/node/v8-version.h +4 -4
- package/include/node/v8-wasm.h +2 -1
- package/include/node/v8config.h +73 -2
- package/package.json +1 -1
- package/share/doc/node/gdbinit +4 -3
- package/share/man/man1/node.1 +17 -1
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
#define PLATFORM "platform: solaris64-x86_64-gcc"
|
|
14
|
-
#define DATE "built on:
|
|
14
|
+
#define DATE "built on: Mon Feb 13 14:12:08 2023 UTC"
|
|
15
15
|
|
|
16
16
|
/*
|
|
17
17
|
* Generate compiler_flags as an array of individual characters. This is a
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
#define PLATFORM "platform: solaris64-x86_64-gcc"
|
|
14
|
-
#define DATE "built on:
|
|
14
|
+
#define DATE "built on: Mon Feb 13 14:12:22 2023 UTC"
|
|
15
15
|
|
|
16
16
|
/*
|
|
17
17
|
* Generate compiler_flags as an array of individual characters. This is a
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
#define PLATFORM "platform: solaris64-x86_64-gcc"
|
|
14
|
-
#define DATE "built on:
|
|
14
|
+
#define DATE "built on: Mon Feb 13 14:12:36 2023 UTC"
|
|
15
15
|
|
|
16
16
|
/*
|
|
17
17
|
* Generate compiler_flags as an array of individual characters. This is a
|
|
@@ -53,12 +53,28 @@ class V8_EXPORT BackingStore : public v8::internal::BackingStoreBase {
|
|
|
53
53
|
*/
|
|
54
54
|
size_t ByteLength() const;
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* The maximum length (in bytes) that this backing store may grow to.
|
|
58
|
+
*
|
|
59
|
+
* If this backing store was created for a resizable ArrayBuffer or a growable
|
|
60
|
+
* SharedArrayBuffer, it is >= ByteLength(). Otherwise it is ==
|
|
61
|
+
* ByteLength().
|
|
62
|
+
*/
|
|
63
|
+
size_t MaxByteLength() const;
|
|
64
|
+
|
|
56
65
|
/**
|
|
57
66
|
* Indicates whether the backing store was created for an ArrayBuffer or
|
|
58
67
|
* a SharedArrayBuffer.
|
|
59
68
|
*/
|
|
60
69
|
bool IsShared() const;
|
|
61
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Indicates whether the backing store was created for a resizable ArrayBuffer
|
|
73
|
+
* or a growable SharedArrayBuffer, and thus may be resized by user JavaScript
|
|
74
|
+
* code.
|
|
75
|
+
*/
|
|
76
|
+
bool IsResizableByUserJavaScript() const;
|
|
77
|
+
|
|
62
78
|
/**
|
|
63
79
|
* Prevent implicit instantiation of operator delete with size_t argument.
|
|
64
80
|
* The size_t argument would be incorrect because ptr points to the
|
|
@@ -189,6 +205,11 @@ class V8_EXPORT ArrayBuffer : public Object {
|
|
|
189
205
|
*/
|
|
190
206
|
size_t ByteLength() const;
|
|
191
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Maximum length in bytes.
|
|
210
|
+
*/
|
|
211
|
+
size_t MaxByteLength() const;
|
|
212
|
+
|
|
192
213
|
/**
|
|
193
214
|
* Create a new ArrayBuffer. Allocate |byte_length| bytes.
|
|
194
215
|
* Allocated memory will be owned by a created ArrayBuffer and
|
|
@@ -235,6 +256,21 @@ class V8_EXPORT ArrayBuffer : public Object {
|
|
|
235
256
|
void* data, size_t byte_length, v8::BackingStore::DeleterCallback deleter,
|
|
236
257
|
void* deleter_data);
|
|
237
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Returns a new resizable standalone BackingStore that is allocated using the
|
|
261
|
+
* array buffer allocator of the isolate. The result can be later passed to
|
|
262
|
+
* ArrayBuffer::New.
|
|
263
|
+
*
|
|
264
|
+
* |byte_length| must be <= |max_byte_length|.
|
|
265
|
+
*
|
|
266
|
+
* This function is usable without an isolate. Unlike |NewBackingStore| calls
|
|
267
|
+
* with an isolate, GCs cannot be triggered, and there are no
|
|
268
|
+
* retries. Allocation failure will cause the function to crash with an
|
|
269
|
+
* out-of-memory error.
|
|
270
|
+
*/
|
|
271
|
+
static std::unique_ptr<BackingStore> NewResizableBackingStore(
|
|
272
|
+
size_t byte_length, size_t max_byte_length);
|
|
273
|
+
|
|
238
274
|
/**
|
|
239
275
|
* Returns true if this ArrayBuffer may be detached.
|
|
240
276
|
*/
|
|
@@ -251,8 +287,26 @@ class V8_EXPORT ArrayBuffer : public Object {
|
|
|
251
287
|
* preventing JavaScript from ever accessing underlying backing store.
|
|
252
288
|
* ArrayBuffer should have been externalized and must be detachable.
|
|
253
289
|
*/
|
|
290
|
+
V8_DEPRECATE_SOON(
|
|
291
|
+
"Use the version which takes a key parameter (passing a null handle is "
|
|
292
|
+
"ok).")
|
|
254
293
|
void Detach();
|
|
255
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Detaches this ArrayBuffer and all its views (typed arrays).
|
|
297
|
+
* Detaching sets the byte length of the buffer and all typed arrays to zero,
|
|
298
|
+
* preventing JavaScript from ever accessing underlying backing store.
|
|
299
|
+
* ArrayBuffer should have been externalized and must be detachable. Returns
|
|
300
|
+
* Nothing if the key didn't pass the [[ArrayBufferDetachKey]] check,
|
|
301
|
+
* Just(true) otherwise.
|
|
302
|
+
*/
|
|
303
|
+
V8_WARN_UNUSED_RESULT Maybe<bool> Detach(v8::Local<v8::Value> key);
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Sets the ArrayBufferDetachKey.
|
|
307
|
+
*/
|
|
308
|
+
void SetDetachKey(v8::Local<v8::Value> key);
|
|
309
|
+
|
|
256
310
|
/**
|
|
257
311
|
* Get a shared pointer to the backing store of this array buffer. This
|
|
258
312
|
* pointer coordinates the lifetime management of the internal storage
|
|
@@ -374,6 +428,11 @@ class V8_EXPORT SharedArrayBuffer : public Object {
|
|
|
374
428
|
*/
|
|
375
429
|
size_t ByteLength() const;
|
|
376
430
|
|
|
431
|
+
/**
|
|
432
|
+
* Maximum length in bytes.
|
|
433
|
+
*/
|
|
434
|
+
size_t MaxByteLength() const;
|
|
435
|
+
|
|
377
436
|
/**
|
|
378
437
|
* Create a new SharedArrayBuffer. Allocate |byte_length| bytes.
|
|
379
438
|
* Allocated memory will be owned by a created SharedArrayBuffer and
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#include <stddef.h>
|
|
9
9
|
|
|
10
|
+
#include <functional>
|
|
10
11
|
#include <string>
|
|
11
12
|
|
|
12
13
|
#include "cppgc/common.h"
|
|
@@ -237,7 +238,8 @@ using LogEventCallback = void (*)(const char* name,
|
|
|
237
238
|
enum class CrashKeyId {
|
|
238
239
|
kIsolateAddress,
|
|
239
240
|
kReadonlySpaceFirstPageAddress,
|
|
240
|
-
kMapSpaceFirstPageAddress,
|
|
241
|
+
kMapSpaceFirstPageAddress V8_ENUM_DEPRECATE_SOON("Map space got removed"),
|
|
242
|
+
kOldSpaceFirstPageAddress,
|
|
241
243
|
kCodeRangeBaseAddress,
|
|
242
244
|
kCodeSpaceFirstPageAddress,
|
|
243
245
|
kDumpType,
|
|
@@ -327,6 +329,10 @@ using WasmSimdEnabledCallback = bool (*)(Local<Context> context);
|
|
|
327
329
|
// --- Callback for checking if WebAssembly exceptions are enabled ---
|
|
328
330
|
using WasmExceptionsEnabledCallback = bool (*)(Local<Context> context);
|
|
329
331
|
|
|
332
|
+
// --- Callback for checking if WebAssembly GC is enabled ---
|
|
333
|
+
// If the callback returns true, it will also enable Wasm stringrefs.
|
|
334
|
+
using WasmGCEnabledCallback = bool (*)(Local<Context> context);
|
|
335
|
+
|
|
330
336
|
// --- Callback for checking if the SharedArrayBuffer constructor is enabled ---
|
|
331
337
|
using SharedArrayBufferConstructorEnabledCallback =
|
|
332
338
|
bool (*)(Local<Context> context);
|
|
@@ -367,6 +373,13 @@ using HostImportModuleDynamicallyCallback = MaybeLocal<Promise> (*)(
|
|
|
367
373
|
Local<Value> resource_name, Local<String> specifier,
|
|
368
374
|
Local<FixedArray> import_assertions);
|
|
369
375
|
|
|
376
|
+
/**
|
|
377
|
+
* Callback for requesting a compile hint for a function from the embedder. The
|
|
378
|
+
* first parameter is the position of the function in source code and the second
|
|
379
|
+
* parameter is embedder data to be passed back.
|
|
380
|
+
*/
|
|
381
|
+
using CompileHintCallback = bool (*)(int, void*);
|
|
382
|
+
|
|
370
383
|
/**
|
|
371
384
|
* HostInitializeImportMetaObjectCallback is called the first time import.meta
|
|
372
385
|
* is accessed for a module. Subsequent access will reuse the same value.
|
|
@@ -7,8 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
#include <stdint.h>
|
|
9
9
|
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
10
12
|
#include "v8-data.h" // NOLINT(build/include_directory)
|
|
11
13
|
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
|
14
|
+
#include "v8-maybe.h" // NOLINT(build/include_directory)
|
|
12
15
|
#include "v8-snapshot.h" // NOLINT(build/include_directory)
|
|
13
16
|
#include "v8config.h" // NOLINT(build/include_directory)
|
|
14
17
|
|
|
@@ -163,12 +166,51 @@ class V8_EXPORT Context : public Data {
|
|
|
163
166
|
*/
|
|
164
167
|
void Exit();
|
|
165
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Delegate to help with Deep freezing embedder-specific objects (such as
|
|
171
|
+
* JSApiObjects) that can not be frozen natively.
|
|
172
|
+
*/
|
|
173
|
+
class DeepFreezeDelegate {
|
|
174
|
+
public:
|
|
175
|
+
/**
|
|
176
|
+
* Performs embedder-specific operations to freeze the provided embedder
|
|
177
|
+
* object. The provided object *will* be frozen by DeepFreeze after this
|
|
178
|
+
* function returns, so only embedder-specific objects need to be frozen.
|
|
179
|
+
* This function *may not* create new JS objects or perform JS allocations.
|
|
180
|
+
* Any v8 objects reachable from the provided embedder object that should
|
|
181
|
+
* also be considered for freezing should be added to the children_out
|
|
182
|
+
* parameter. Returns true if the operation completed successfully.
|
|
183
|
+
*/
|
|
184
|
+
virtual bool FreezeEmbedderObjectAndGetChildren(
|
|
185
|
+
Local<Object> obj, std::vector<Local<Object>>& children_out) = 0;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Attempts to recursively freeze all objects reachable from this context.
|
|
190
|
+
* Some objects (generators, iterators, non-const closures) can not be frozen
|
|
191
|
+
* and will cause this method to throw an error. An optional delegate can be
|
|
192
|
+
* provided to help freeze embedder-specific objects.
|
|
193
|
+
*
|
|
194
|
+
* Freezing occurs in two steps:
|
|
195
|
+
* 1. "Marking" where we iterate through all objects reachable by this
|
|
196
|
+
* context, accumulating a list of objects that need to be frozen and
|
|
197
|
+
* looking for objects that can't be frozen. This step is separated because
|
|
198
|
+
* it is more efficient when we can assume there is no garbage collection.
|
|
199
|
+
* 2. "Freezing" where we go through the list of objects and freezing them.
|
|
200
|
+
* This effectively requires copying them so it may trigger garbage
|
|
201
|
+
* collection.
|
|
202
|
+
*/
|
|
203
|
+
Maybe<void> DeepFreeze(DeepFreezeDelegate* delegate = nullptr);
|
|
204
|
+
|
|
166
205
|
/** Returns the isolate associated with a current context. */
|
|
167
206
|
Isolate* GetIsolate();
|
|
168
207
|
|
|
169
208
|
/** Returns the microtask queue associated with a current context. */
|
|
170
209
|
MicrotaskQueue* GetMicrotaskQueue();
|
|
171
210
|
|
|
211
|
+
/** Sets the microtask queue associated with the current context. */
|
|
212
|
+
void SetMicrotaskQueue(MicrotaskQueue* queue);
|
|
213
|
+
|
|
172
214
|
/**
|
|
173
215
|
* The field at kDebugIdIndex used to be reserved for the inspector.
|
|
174
216
|
* It now serves no purpose.
|
|
@@ -362,13 +404,18 @@ Local<Value> Context::GetEmbedderData(int index) {
|
|
|
362
404
|
#ifdef V8_COMPRESS_POINTERS
|
|
363
405
|
// We read the full pointer value and then decompress it in order to avoid
|
|
364
406
|
// dealing with potential endiannes issues.
|
|
365
|
-
value =
|
|
366
|
-
I::DecompressTaggedAnyField(embedder_data, static_cast<uint32_t>(value));
|
|
407
|
+
value = I::DecompressTaggedField(embedder_data, static_cast<uint32_t>(value));
|
|
367
408
|
#endif
|
|
409
|
+
|
|
410
|
+
#ifdef V8_ENABLE_CONSERVATIVE_STACK_SCANNING
|
|
411
|
+
return Local<Value>(reinterpret_cast<Value*>(value));
|
|
412
|
+
#else
|
|
368
413
|
internal::Isolate* isolate = internal::IsolateFromNeverReadOnlySpaceObject(
|
|
369
414
|
*reinterpret_cast<A*>(this));
|
|
370
415
|
A* result = HandleScope::CreateHandle(isolate, value);
|
|
371
416
|
return Local<Value>(reinterpret_cast<Value*>(result));
|
|
417
|
+
#endif
|
|
418
|
+
|
|
372
419
|
#else
|
|
373
420
|
return SlowGetEmbedderData(index);
|
|
374
421
|
#endif
|
|
@@ -378,7 +425,7 @@ void* Context::GetAlignedPointerFromEmbedderData(int index) {
|
|
|
378
425
|
#if !defined(V8_ENABLE_CHECKS)
|
|
379
426
|
using A = internal::Address;
|
|
380
427
|
using I = internal::Internals;
|
|
381
|
-
A ctx =
|
|
428
|
+
A ctx = internal::ValueHelper::ValueAsAddress(this);
|
|
382
429
|
A embedder_data =
|
|
383
430
|
I::ReadTaggedPointerField(ctx, I::kNativeContextEmbedderDataOffset);
|
|
384
431
|
int value_offset = I::kEmbedderDataArrayHeaderSize +
|
package/include/node/v8-data.h
CHANGED
|
@@ -5,27 +5,14 @@
|
|
|
5
5
|
#ifndef INCLUDE_V8_EMBEDDER_HEAP_H_
|
|
6
6
|
#define INCLUDE_V8_EMBEDDER_HEAP_H_
|
|
7
7
|
|
|
8
|
-
#include <stddef.h>
|
|
9
|
-
#include <stdint.h>
|
|
10
|
-
|
|
11
|
-
#include <utility>
|
|
12
|
-
#include <vector>
|
|
13
|
-
|
|
14
|
-
#include "cppgc/common.h"
|
|
15
|
-
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
|
16
8
|
#include "v8-traced-handle.h" // NOLINT(build/include_directory)
|
|
17
9
|
#include "v8config.h" // NOLINT(build/include_directory)
|
|
18
10
|
|
|
19
11
|
namespace v8 {
|
|
20
12
|
|
|
21
|
-
class Data;
|
|
22
13
|
class Isolate;
|
|
23
14
|
class Value;
|
|
24
15
|
|
|
25
|
-
namespace internal {
|
|
26
|
-
class LocalEmbedderHeapTracer;
|
|
27
|
-
} // namespace internal
|
|
28
|
-
|
|
29
16
|
/**
|
|
30
17
|
* Handler for embedder roots on non-unified heap garbage collections.
|
|
31
18
|
*/
|
|
@@ -62,162 +49,6 @@ class V8_EXPORT EmbedderRootsHandler {
|
|
|
62
49
|
virtual void ResetRoot(const v8::TracedReference<v8::Value>& handle) = 0;
|
|
63
50
|
};
|
|
64
51
|
|
|
65
|
-
/**
|
|
66
|
-
* Interface for tracing through the embedder heap. During a V8 garbage
|
|
67
|
-
* collection, V8 collects hidden fields of all potential wrappers, and at the
|
|
68
|
-
* end of its marking phase iterates the collection and asks the embedder to
|
|
69
|
-
* trace through its heap and use reporter to report each JavaScript object
|
|
70
|
-
* reachable from any of the given wrappers.
|
|
71
|
-
*/
|
|
72
|
-
class V8_EXPORT
|
|
73
|
-
// GCC doesn't like combining __attribute__(()) with [[deprecated]].
|
|
74
|
-
#ifdef __clang__
|
|
75
|
-
V8_DEPRECATE_SOON("Use CppHeap when working with v8::TracedReference.")
|
|
76
|
-
#endif // __clang__
|
|
77
|
-
EmbedderHeapTracer {
|
|
78
|
-
public:
|
|
79
|
-
using EmbedderStackState = cppgc::EmbedderStackState;
|
|
80
|
-
|
|
81
|
-
enum TraceFlags : uint64_t {
|
|
82
|
-
kNoFlags = 0,
|
|
83
|
-
kReduceMemory = 1 << 0,
|
|
84
|
-
kForced = 1 << 2,
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Interface for iterating through |TracedReference| handles.
|
|
89
|
-
*/
|
|
90
|
-
class V8_EXPORT TracedGlobalHandleVisitor {
|
|
91
|
-
public:
|
|
92
|
-
virtual ~TracedGlobalHandleVisitor() = default;
|
|
93
|
-
virtual void VisitTracedReference(const TracedReference<Value>& handle) {}
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Summary of a garbage collection cycle. See |TraceEpilogue| on how the
|
|
98
|
-
* summary is reported.
|
|
99
|
-
*/
|
|
100
|
-
struct TraceSummary {
|
|
101
|
-
/**
|
|
102
|
-
* Time spent managing the retained memory in milliseconds. This can e.g.
|
|
103
|
-
* include the time tracing through objects in the embedder.
|
|
104
|
-
*/
|
|
105
|
-
double time = 0.0;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Memory retained by the embedder through the |EmbedderHeapTracer|
|
|
109
|
-
* mechanism in bytes.
|
|
110
|
-
*/
|
|
111
|
-
size_t allocated_size = 0;
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
virtual ~EmbedderHeapTracer() = default;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Iterates all |TracedReference| handles created for the |v8::Isolate| the
|
|
118
|
-
* tracer is attached to.
|
|
119
|
-
*/
|
|
120
|
-
void IterateTracedGlobalHandles(TracedGlobalHandleVisitor* visitor);
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Called by the embedder to set the start of the stack which is e.g. used by
|
|
124
|
-
* V8 to determine whether handles are used from stack or heap.
|
|
125
|
-
*/
|
|
126
|
-
void SetStackStart(void* stack_start);
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Called by v8 to register internal fields of found wrappers.
|
|
130
|
-
*
|
|
131
|
-
* The embedder is expected to store them somewhere and trace reachable
|
|
132
|
-
* wrappers from them when called through |AdvanceTracing|.
|
|
133
|
-
*/
|
|
134
|
-
virtual void RegisterV8References(
|
|
135
|
-
const std::vector<std::pair<void*, void*>>& embedder_fields) = 0;
|
|
136
|
-
|
|
137
|
-
void RegisterEmbedderReference(const BasicTracedReference<v8::Data>& ref);
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Called at the beginning of a GC cycle.
|
|
141
|
-
*/
|
|
142
|
-
virtual void TracePrologue(TraceFlags flags) {}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Called to advance tracing in the embedder.
|
|
146
|
-
*
|
|
147
|
-
* The embedder is expected to trace its heap starting from wrappers reported
|
|
148
|
-
* by RegisterV8References method, and report back all reachable wrappers.
|
|
149
|
-
* Furthermore, the embedder is expected to stop tracing by the given
|
|
150
|
-
* deadline. A deadline of infinity means that tracing should be finished.
|
|
151
|
-
*
|
|
152
|
-
* Returns |true| if tracing is done, and false otherwise.
|
|
153
|
-
*/
|
|
154
|
-
virtual bool AdvanceTracing(double deadline_in_ms) = 0;
|
|
155
|
-
|
|
156
|
-
/*
|
|
157
|
-
* Returns true if there no more tracing work to be done (see AdvanceTracing)
|
|
158
|
-
* and false otherwise.
|
|
159
|
-
*/
|
|
160
|
-
virtual bool IsTracingDone() = 0;
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Called at the end of a GC cycle.
|
|
164
|
-
*
|
|
165
|
-
* Note that allocation is *not* allowed within |TraceEpilogue|. Can be
|
|
166
|
-
* overriden to fill a |TraceSummary| that is used by V8 to schedule future
|
|
167
|
-
* garbage collections.
|
|
168
|
-
*/
|
|
169
|
-
virtual void TraceEpilogue(TraceSummary* trace_summary) {}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Called upon entering the final marking pause. No more incremental marking
|
|
173
|
-
* steps will follow this call.
|
|
174
|
-
*/
|
|
175
|
-
virtual void EnterFinalPause(EmbedderStackState stack_state) = 0;
|
|
176
|
-
|
|
177
|
-
/*
|
|
178
|
-
* Called by the embedder to request immediate finalization of the currently
|
|
179
|
-
* running tracing phase that has been started with TracePrologue and not
|
|
180
|
-
* yet finished with TraceEpilogue.
|
|
181
|
-
*
|
|
182
|
-
* Will be a noop when currently not in tracing.
|
|
183
|
-
*
|
|
184
|
-
* This is an experimental feature.
|
|
185
|
-
*/
|
|
186
|
-
void FinalizeTracing();
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* See documentation on EmbedderRootsHandler.
|
|
190
|
-
*/
|
|
191
|
-
virtual bool IsRootForNonTracingGC(
|
|
192
|
-
const v8::TracedReference<v8::Value>& handle);
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* See documentation on EmbedderRootsHandler.
|
|
196
|
-
*/
|
|
197
|
-
virtual void ResetHandleInNonTracingGC(
|
|
198
|
-
const v8::TracedReference<v8::Value>& handle);
|
|
199
|
-
|
|
200
|
-
/*
|
|
201
|
-
* Called by the embedder to signal newly allocated or freed memory. Not bound
|
|
202
|
-
* to tracing phases. Embedders should trade off when increments are reported
|
|
203
|
-
* as V8 may consult global heuristics on whether to trigger garbage
|
|
204
|
-
* collection on this change.
|
|
205
|
-
*/
|
|
206
|
-
void IncreaseAllocatedSize(size_t bytes);
|
|
207
|
-
void DecreaseAllocatedSize(size_t bytes);
|
|
208
|
-
|
|
209
|
-
/*
|
|
210
|
-
* Returns the v8::Isolate this tracer is attached too and |nullptr| if it
|
|
211
|
-
* is not attached to any v8::Isolate.
|
|
212
|
-
*/
|
|
213
|
-
v8::Isolate* isolate() const { return v8_isolate_; }
|
|
214
|
-
|
|
215
|
-
protected:
|
|
216
|
-
v8::Isolate* v8_isolate_ = nullptr;
|
|
217
|
-
|
|
218
|
-
friend class internal::LocalEmbedderHeapTracer;
|
|
219
|
-
};
|
|
220
|
-
|
|
221
52
|
} // namespace v8
|
|
222
53
|
|
|
223
54
|
#endif // INCLUDE_V8_EMBEDDER_HEAP_H_
|