Loading...
Searching...
No Matches
v8-isolate.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 INCLUDE_V8_ISOLATE_H_
6#define INCLUDE_V8_ISOLATE_H_
7
8#include <stddef.h>
9#include <stdint.h>
10
11#include <functional>
12#include <memory>
13#include <string>
14#include <utility>
15
16#include "cppgc/common.h"
17#include "cppgc/macros.h"
18#include "v8-array-buffer.h" // NOLINT(build/include_directory)
19#include "v8-callbacks.h" // NOLINT(build/include_directory)
20#include "v8-data.h" // NOLINT(build/include_directory)
21#include "v8-debug.h" // NOLINT(build/include_directory)
22#include "v8-embedder-heap.h" // NOLINT(build/include_directory)
23#include "v8-exception.h" // NOLINT(build/include_directory)
24#include "v8-function-callback.h" // NOLINT(build/include_directory)
25#include "v8-internal.h" // NOLINT(build/include_directory)
26#include "v8-local-handle.h" // NOLINT(build/include_directory)
27#include "v8-microtask.h" // NOLINT(build/include_directory)
28#include "v8-persistent-handle.h" // NOLINT(build/include_directory)
29#include "v8-primitive.h" // NOLINT(build/include_directory)
30#include "v8-statistics.h" // NOLINT(build/include_directory)
31#include "v8-unwinder.h" // NOLINT(build/include_directory)
32#include "v8config.h" // NOLINT(build/include_directory)
33
34namespace v8 {
35
36class CppHeap;
37class HeapProfiler;
38class MicrotaskQueue;
39class StartupData;
40class ScriptOrModule;
41class SharedArrayBuffer;
42
43namespace internal {
44class MicrotaskQueue;
45class ThreadLocalTop;
46} // namespace internal
47
48namespace metrics {
49class Recorder;
50} // namespace metrics
51
67 public:
86 void ConfigureDefaultsFromHeapSize(size_t initial_heap_size_in_bytes,
87 size_t maximum_heap_size_in_bytes);
88
98 void ConfigureDefaults(uint64_t physical_memory,
99 uint64_t virtual_memory_limit);
100
104 uint32_t* stack_limit() const { return stack_limit_; }
105 void set_stack_limit(uint32_t* value) { stack_limit_ = value; }
106
116 size_t code_range_size_in_bytes() const { return code_range_size_; }
117 void set_code_range_size_in_bytes(size_t limit) { code_range_size_ = limit; }
118
127 return max_old_generation_size_;
128 }
130 max_old_generation_size_ = limit;
131 }
132
139 return max_young_generation_size_;
140 }
142 max_young_generation_size_ = limit;
143 }
144
146 return initial_old_generation_size_;
147 }
149 initial_old_generation_size_ = initial_size;
150 }
151
153 return initial_young_generation_size_;
154 }
156 initial_young_generation_size_ = initial_size;
157 }
158
160 return physical_memory_size_;
161 }
162
163 private:
164 static constexpr size_t kMB = 1048576u;
165 size_t code_range_size_ = 0;
166 size_t max_old_generation_size_ = 0;
167 size_t max_young_generation_size_ = 0;
168 size_t initial_old_generation_size_ = 0;
169 size_t initial_young_generation_size_ = 0;
170 uint64_t physical_memory_size_ = 0;
171 uint32_t* stack_limit_ = nullptr;
172};
173
183
194};
195
200
226 public:
234
239 static bool CanCreateNewGroups();
240
246
249
252
254
255 bool operator==(const IsolateGroup& other) const {
256 return isolate_group_ == other.isolate_group_;
257 }
258
259 bool operator!=(const IsolateGroup& other) const {
260 return !operator==(other);
261 }
262
263#ifdef V8_ENABLE_SANDBOX
268 bool SandboxContains(void* pointer) const;
269 VirtualAddressSpace* GetSandboxAddressSpace();
270#else
271 V8_INLINE bool SandboxContains(void* pointer) const { return true; }
272#endif
273
274 private:
275 friend class Isolate;
277
278 // The isolate_group pointer should be already acquired.
279 explicit IsolateGroup(internal::IsolateGroup*&& isolate_group);
280
281 internal::IsolateGroup* isolate_group_;
282};
283
293 public:
300
302
303
307 JitCodeEventHandler code_event_handler = nullptr;
308
313
318 const StartupData* snapshot_blob = nullptr;
319
324 CounterLookupCallback counter_lookup_callback = nullptr;
325
332 CreateHistogramCallback create_histogram_callback = nullptr;
333 AddHistogramSampleCallback add_histogram_sample_callback = nullptr;
334
344 ArrayBuffer::Allocator* array_buffer_allocator = nullptr;
345 std::shared_ptr<ArrayBuffer::Allocator> array_buffer_allocator_shared;
346
353 const intptr_t* external_references = nullptr;
354
359 bool allow_atomics_wait = true;
360
364 FatalErrorCallback fatal_error_callback = nullptr;
365 OOMErrorCallback oom_error_callback = nullptr;
366
371 CppHeap* cpp_heap = nullptr;
372 };
373
379 public:
380 explicit Scope(Isolate* isolate) : v8_isolate_(isolate) {
381 v8_isolate_->Enter();
382 }
383
384 ~Scope() { v8_isolate_->Exit(); }
385
386 // Prevent copying of Scope objects.
387 Scope(const Scope&) = delete;
388 Scope& operator=(const Scope&) = delete;
389
390 private:
391 Isolate* const v8_isolate_;
392 };
393
398 public:
399 enum OnFailure { CRASH_ON_FAILURE, THROW_ON_FAILURE, DUMP_ON_FAILURE };
400
403
404 // Prevent copying of Scope objects.
406 delete;
408 const DisallowJavascriptExecutionScope&) = delete;
409
410 private:
411 v8::Isolate* const v8_isolate_;
412 const OnFailure on_failure_;
413 bool was_execution_allowed_;
414 };
415
420 public:
423
424 // Prevent copying of Scope objects.
426 delete;
428 const AllowJavascriptExecutionScope&) = delete;
429
430 private:
431 Isolate* const v8_isolate_;
432 bool was_execution_allowed_assert_;
433 bool was_execution_allowed_throws_;
434 bool was_execution_allowed_dump_;
435 };
436
443
444 public:
446 Isolate* isolate, MicrotaskQueue* microtask_queue = nullptr);
448
449 // Prevent copying of Scope objects.
451 delete;
453 const SuppressMicrotaskExecutionScope&) = delete;
454
455 private:
456 internal::Isolate* const i_isolate_;
457 internal::MicrotaskQueue* const microtask_queue_;
458 internal::Address previous_stack_height_;
459
460 friend class internal::ThreadLocalTop;
461 };
462
469 kMinorGarbageCollection
470 };
471
481 kUseAsm = 0,
482 kBreakIterator = 1,
483 kOBSOLETE_LegacyConst = 2,
484 kOBSOLETE_MarkDequeOverflow = 3,
485 kOBSOLETE_StoreBufferOverflow = 4,
486 kOBSOLETE_SlotsBufferOverflow = 5,
487 kOBSOLETE_ObjectObserve = 6,
488 kForcedGC = 7,
489 kSloppyMode = 8,
490 kStrictMode = 9,
491 kOBSOLETE_StrongMode = 10,
492 kRegExpPrototypeStickyGetter = 11,
493 kRegExpPrototypeToString = 12,
494 kRegExpPrototypeUnicodeGetter = 13,
495 kOBSOLETE_IntlV8Parse = 14,
496 kOBSOLETE_IntlPattern = 15,
497 kOBSOLETE_IntlResolved = 16,
498 kOBSOLETE_PromiseChain = 17,
499 kOBSOLETE_PromiseAccept = 18,
500 kOBSOLETE_PromiseDefer = 19,
501 kHtmlCommentInExternalScript = 20,
502 kHtmlComment = 21,
503 kSloppyModeBlockScopedFunctionRedefinition = 22,
504 kForInInitializer = 23,
505 kOBSOLETE_ArrayProtectorDirtied = 24,
506 kArraySpeciesModified = 25,
507 kArrayPrototypeConstructorModified = 26,
508 kOBSOLETE_ArrayInstanceProtoModified = 27,
509 kArrayInstanceConstructorModified = 28,
510 kOBSOLETE_LegacyFunctionDeclaration = 29,
511 kOBSOLETE_RegExpPrototypeSourceGetter = 30,
512 kOBSOLETE_RegExpPrototypeOldFlagGetter = 31,
513 kDecimalWithLeadingZeroInStrictMode = 32,
514 kLegacyDateParser = 33,
515 kDefineGetterOrSetterWouldThrow = 34,
516 kFunctionConstructorReturnedUndefined = 35,
517 kAssigmentExpressionLHSIsCallInSloppy = 36,
518 kAssigmentExpressionLHSIsCallInStrict = 37,
519 kPromiseConstructorReturnedUndefined = 38,
520 kOBSOLETE_ConstructorNonUndefinedPrimitiveReturn = 39,
521 kOBSOLETE_LabeledExpressionStatement = 40,
522 kOBSOLETE_LineOrParagraphSeparatorAsLineTerminator = 41,
523 kIndexAccessor = 42,
524 kErrorCaptureStackTrace = 43,
525 kErrorPrepareStackTrace = 44,
526 kErrorStackTraceLimit = 45,
527 kWebAssemblyInstantiation = 46,
528 kDeoptimizerDisableSpeculation = 47,
529 kOBSOLETE_ArrayPrototypeSortJSArrayModifiedPrototype = 48,
530 kFunctionTokenOffsetTooLongForToString = 49,
531 kWasmSharedMemory = 50,
532 kWasmThreadOpcodes = 51,
533 kOBSOLETE_AtomicsNotify = 52,
534 kOBSOLETE_AtomicsWake = 53,
535 kCollator = 54,
536 kNumberFormat = 55,
537 kDateTimeFormat = 56,
538 kPluralRules = 57,
539 kRelativeTimeFormat = 58,
540 kLocale = 59,
541 kListFormat = 60,
542 kSegmenter = 61,
543 kStringLocaleCompare = 62,
544 kOBSOLETE_StringToLocaleUpperCase = 63,
545 kStringToLocaleLowerCase = 64,
546 kNumberToLocaleString = 65,
547 kDateToLocaleString = 66,
548 kDateToLocaleDateString = 67,
549 kDateToLocaleTimeString = 68,
550 kAttemptOverrideReadOnlyOnPrototypeSloppy = 69,
551 kAttemptOverrideReadOnlyOnPrototypeStrict = 70,
552 kOBSOLETE_OptimizedFunctionWithOneShotBytecode = 71,
553 kRegExpMatchIsTrueishOnNonJSRegExp = 72,
554 kRegExpMatchIsFalseishOnJSRegExp = 73,
555 kOBSOLETE_DateGetTimezoneOffset = 74,
556 kStringNormalize = 75,
557 kCallSiteAPIGetFunctionSloppyCall = 76,
558 kCallSiteAPIGetThisSloppyCall = 77,
559 kOBSOLETE_RegExpMatchAllWithNonGlobalRegExp = 78,
560 kRegExpExecCalledOnSlowRegExp = 79,
561 kRegExpReplaceCalledOnSlowRegExp = 80,
562 kDisplayNames = 81,
563 kSharedArrayBufferConstructed = 82,
564 kArrayPrototypeHasElements = 83,
565 kObjectPrototypeHasElements = 84,
566 kNumberFormatStyleUnit = 85,
567 kDateTimeFormatRange = 86,
568 kDateTimeFormatDateTimeStyle = 87,
569 kBreakIteratorTypeWord = 88,
570 kBreakIteratorTypeLine = 89,
571 kInvalidatedArrayBufferDetachingProtector = 90,
572 kInvalidatedArrayConstructorProtector V8_DEPRECATE_SOON(
573 "The ArrayConstructorProtector has been removed") = 91,
574 kInvalidatedArrayIteratorLookupChainProtector = 92,
575 kInvalidatedArraySpeciesLookupChainProtector = 93,
576 kInvalidatedIsConcatSpreadableLookupChainProtector = 94,
577 kInvalidatedMapIteratorLookupChainProtector = 95,
578 kInvalidatedNoElementsProtector = 96,
579 kInvalidatedPromiseHookProtector = 97,
580 kInvalidatedPromiseResolveLookupChainProtector = 98,
581 kInvalidatedPromiseSpeciesLookupChainProtector = 99,
582 kInvalidatedPromiseThenLookupChainProtector = 100,
583 kInvalidatedRegExpSpeciesLookupChainProtector = 101,
584 kInvalidatedSetIteratorLookupChainProtector = 102,
585 kInvalidatedStringIteratorLookupChainProtector = 103,
586 kInvalidatedStringLengthOverflowLookupChainProtector = 104,
587 kInvalidatedTypedArraySpeciesLookupChainProtector = 105,
588 kWasmSimdOpcodes = 106,
589 kVarRedeclaredCatchBinding = 107,
590 kWasmRefTypes = 108,
591 kWasmBulkMemory = 109,
592 kWasmMultiValue = 110,
593 kWasmExceptionHandling = 111,
594 kInvalidatedMegaDOMProtector = 112,
595 kFunctionPrototypeArguments = 113,
596 kFunctionPrototypeCaller = 114,
597 kTurboFanOsrCompileStarted = 115,
598 kAsyncStackTaggingCreateTaskCall = 116,
599 kDurationFormat = 117,
600 kInvalidatedNumberStringNotRegexpLikeProtector = 118,
601 kOBSOLETE_RegExpUnicodeSetIncompatibilitiesWithUnicodeMode = 119,
602 kOBSOLETE_ImportAssertionDeprecatedSyntax = 120,
603 kLocaleInfoObsoletedGetters = 121,
604 kLocaleInfoFunctions = 122,
605 kCompileHintsMagicAll = 123,
606 kInvalidatedNoProfilingProtector = 124,
607 kWasmMemory64 = 125,
608 kWasmMultiMemory = 126,
609 kWasmGC = 127,
610 kWasmImportedStrings = 128,
611 kSourceMappingUrlMagicCommentAtSign = 129,
612 kTemporalObject = 130,
613 kWasmModuleCompilation = 131,
614 kInvalidatedNoUndetectableObjectsProtector = 132,
615 kWasmJavaScriptPromiseIntegration = 133,
616 kWasmReturnCall = 134,
617 kWasmExtendedConst = 135,
618 kWasmRelaxedSimd = 136,
619 kWasmTypeReflection = 137,
620 kWasmExnRef = 138,
621 kWasmTypedFuncRef = 139,
622 kInvalidatedStringWrapperToPrimitiveProtector = 140,
623 kDocumentAllLegacyCall = 141,
624 kDocumentAllLegacyConstruct = 142,
625 kConsoleContext = 143,
626 kWasmImportedStringsUtf8 = 144,
627 kResizableArrayBuffer = 145,
628 kGrowableSharedArrayBuffer = 146,
629 kArrayByCopy = 147,
630 kArrayFromAsync = 148,
631 kIteratorMethods = 149,
632 kPromiseAny = 150,
633 kSetMethods = 151,
634 kArrayFindLast = 152,
635 kArrayGroup = 153,
636 kArrayBufferTransfer = 154,
637 kPromiseWithResolvers = 155,
638 kAtomicsWaitAsync = 156,
639 kExtendingNonExtensibleWithPrivate = 157,
640 kPromiseTry = 158,
641 kStringReplaceAll = 159,
642 kStringWellFormed = 160,
643 kWeakReferences = 161,
644 kErrorIsError = 162,
645 kInvalidatedTypedArrayLengthLookupChainProtector = 163,
646 kRegExpEscape = 164,
647 kFloat16Array = 165,
648 kExplicitResourceManagement = 166,
649 kWasmBranchHinting = 167,
650 kWasmMutableGlobals = 168,
651 kUint8ArrayToFromBase64AndHex = 169,
652 kAtomicsPause = 170,
653 kTopLevelAwait = 171,
654 kLogicalAssignment = 172,
655 kNullishCoalescing = 173,
656 kInvalidatedNoDateTimeConfigurationChangeProtector = 174,
657 kWasmNonTrappingFloatToInt = 175,
658 kWasmSignExtensionOps = 176,
659 kRegExpCompile = 177,
660 kRegExpStaticProperties = 178,
661 kRegExpStaticPropertiesWithLastMatch = 179,
662 kWithStatement = 180,
663 kHtmlWrapperMethods = 181,
664 kWasmCustomDescriptors = 182,
665 kOBSOLETE_WasmResizableBuffers = 183,
666 kInvalidatedArrayBufferMutableProtector = 184,
667 kHoleyArrayReadthrough = 185,
668
669 // If you add new values here, you'll also need to update Chromium's:
670 // web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to
671 // this list need to be landed first, then changes on the Chromium side.
672 kUseCounterFeatureCount // This enum value must be last.
673 };
674
676 kMessageLog = (1 << 0),
677 kMessageDebug = (1 << 1),
678 kMessageInfo = (1 << 2),
679 kMessageError = (1 << 3),
680 kMessageWarning = (1 << 4),
681 kMessageAll = kMessageLog | kMessageDebug | kMessageInfo | kMessageError |
682 kMessageWarning,
683 };
684
685 // The different priorities that an isolate can have.
686 enum class Priority {
687 // The isolate does not relate to content that is currently important
688 // to the user. Lowest priority.
690
691 // The isolate contributes to content that is visible to the user, like a
692 // visible iframe that's not interacted directly with. High priority.
694
695 // The isolate contributes to content that is of the utmost importance to
696 // the user, like visible content in the focused window. Highest priority.
698 };
699
700 using UseCounterCallback = void (*)(Isolate* isolate,
701 UseCounterFeature feature);
702
717 static Isolate* Allocate();
718 static Isolate* Allocate(const IsolateGroup& group);
719
724
728 static void Initialize(Isolate* isolate, const CreateParams& params);
729
739 static Isolate* New(const CreateParams& params);
740 static Isolate* New(const IsolateGroup& group, const CreateParams& params);
741
749
757
761 bool IsCurrent() const;
762
777
790
797
809
816
823
831
837
842
843#if defined(V8_OS_WIN)
847 V8_DEPRECATE_SOON("Use SetFilterETWSessionByURL2Callback instead")
848 void SetFilterETWSessionByURLCallback(FilterETWSessionByURLCallback callback);
849 void SetFilterETWSessionByURL2Callback(
850 FilterETWSessionByURL2Callback callback);
851#endif // V8_OS_WIN
852
860
865 bool RetryCustomAllocate(std::function<bool()> allocate);
866
873 void SetBatterySaverMode(bool battery_saver_mode_enabled);
874
881 void SetMemorySaverMode(bool memory_saver_mode_enabled);
882
889
900 void Enter();
901
909 void Exit();
910
915 void Dispose();
916
923
930 static void Free(Isolate* isolate);
931
937
946
951 V8_INLINE void SetData(uint32_t slot, void* data);
952
957 V8_INLINE void* GetData(uint32_t slot);
958
963 V8_INLINE static uint32_t GetNumberOfDataSlots();
964
970 template <class T>
971 V8_INLINE MaybeLocal<T> GetDataFromSnapshotOnce(size_t index);
972
977 V8_DEPRECATED("Use GetContinuationPreservedEmbedderDataV2 instead")
978 Local<Value> GetContinuationPreservedEmbedderData();
979
984 V8_DEPRECATED("Use SetContinuationPreservedEmbedderDataV2 instead")
985 void SetContinuationPreservedEmbedderData(Local<Value> data);
986
993 Local<Data> GetContinuationPreservedEmbedderDataV2();
994
1000 void SetContinuationPreservedEmbedderDataV2(Local<Data> data);
1001
1005 void GetHeapStatistics(HeapStatistics* heap_statistics);
1006
1010 size_t NumberOfHeapSpaces();
1011
1021 bool GetHeapSpaceStatistics(HeapSpaceStatistics* space_statistics,
1022 size_t index);
1023
1027 size_t NumberOfTrackedHeapObjectTypes();
1028
1038 bool GetHeapObjectStatisticsAtLastGC(HeapObjectStatistics* object_statistics,
1039 size_t type_index);
1040
1048 bool GetHeapCodeAndMetadataStatistics(HeapCodeStatistics* object_statistics);
1049
1062 bool MeasureMemory(
1063 std::unique_ptr<MeasureMemoryDelegate> delegate,
1064 MeasureMemoryExecution execution = MeasureMemoryExecution::kDefault);
1065
1078 void GetStackSample(const RegisterState& state, void** frames,
1079 size_t frames_limit, SampleInfo* sample_info);
1080
1089 int64_t AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes);
1090
1095 HeapProfiler* GetHeapProfiler();
1096
1100 void SetIdle(bool is_idle);
1101
1103 ArrayBuffer::Allocator* GetArrayBufferAllocator();
1104
1106 bool InContext();
1107
1112 Local<Context> GetCurrentContext();
1113
1120 Local<Context> GetEnteredOrMicrotaskContext();
1121
1126 Local<Context> GetIncumbentContext();
1127
1132 MaybeLocal<Data> GetCurrentHostDefinedOptions();
1133
1139 template <int N>
1140 Local<Value> ThrowError(const char (&message)[N]) {
1141 return ThrowError(String::NewFromUtf8Literal(this, message));
1142 }
1144
1152
1160
1161 using GCCallback = void (*)(Isolate* isolate, GCType type,
1162 GCCallbackFlags flags);
1163 using GCCallbackWithData = void (*)(Isolate* isolate, GCType type,
1164 GCCallbackFlags flags, void* data);
1165
1177 GCType gc_type_filter = kGCTypeAll);
1178
1184 void AddGCPrologueCallback(GCCallbackWithData callback, void* data = nullptr,
1185 GCType gc_type_filter = kGCTypeAll);
1186
1194
1201
1209 GCType gc_type_filter = kGCTypeAll);
1210
1216 void AddGCEpilogueCallback(GCCallbackWithData callback, void* data = nullptr,
1217 GCType gc_type_filter = kGCTypeAll);
1218
1226
1233 void* data = nullptr);
1234
1243
1244 using ReleaseCppHeapCallback = void (*)(std::unique_ptr<CppHeap>);
1245
1252
1258
1260
1269
1278
1288
1304
1313 void RequestInterrupt(InterruptCallback callback, void* data);
1314
1321
1332
1344 StackState stack_state);
1345
1350
1358
1363
1372
1377
1383
1389
1398
1406
1410 V8_DEPRECATE_SOON("Use *MicrotaskQueue::EnqueueMicrotask* instead")
1411 void EnqueueMicrotask(Local<Function> microtask);
1412
1416 V8_DEPRECATE_SOON("Use *MicrotaskQueue::EnqueueMicrotask* instead")
1417 void EnqueueMicrotask(MicrotaskCallback callback, void* data = nullptr);
1418
1422 void SetMicrotasksPolicy(MicrotasksPolicy policy);
1423
1427 MicrotasksPolicy GetMicrotasksPolicy() const;
1428
1442 void AddMicrotasksCompletedCallback(
1443 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1444
1448 void RemoveMicrotasksCompletedCallback(
1449 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1450
1454 void SetUseCounterCallback(UseCounterCallback callback);
1455
1460 void SetCounterFunction(CounterLookupCallback);
1461
1468 void SetCreateHistogramFunction(CreateHistogramCallback);
1469 void SetAddHistogramSampleFunction(AddHistogramSampleCallback);
1470
1480 void SetMetricsRecorder(
1481 const std::shared_ptr<metrics::Recorder>& metrics_recorder);
1482
1488 void SetAddCrashKeyCallback(AddCrashKeyCallback);
1489
1494 void SetCrashKeyStringCallbacks(AllocateCrashKeyStringCallback,
1496
1501 void LowMemoryNotification();
1502
1512 V8_DEPRECATE_SOON("Use version that passes ContextDependants.")
1513 int ContextDisposedNotification(bool dependant_context = true);
1514
1522 void ContextDisposedNotification(ContextDependants dependants);
1523
1528 V8_DEPRECATE_SOON("Use SetPriority(Priority::kUserBlocking) instead")
1529 void IsolateInForegroundNotification();
1530
1535 V8_DEPRECATE_SOON("Use SetPriority(Priority::kBestEffort) instead")
1536 void IsolateInBackgroundNotification();
1537
1542 void SetPriority(Priority priority);
1543
1556 void SetIsLoading(bool is_loading);
1557
1569 void SetIsInputHandling(bool is_input_handling);
1570
1577 void Freeze(bool is_frozen);
1578
1583 void IncreaseHeapLimitForDebugging();
1584
1588 void RestoreOriginalHeapLimit();
1589
1594 bool IsHeapLimitIncreasedForDebugging();
1595
1618 void SetJitCodeEventHandler(JitCodeEventOptions options,
1619 JitCodeEventHandler event_handler);
1620
1630 void SetStackLimit(uintptr_t stack_limit);
1631
1647 void GetCodeRange(void** start, size_t* length_in_bytes);
1648
1653 void GetEmbeddedCodeRange(const void** start, size_t* length_in_bytes);
1654
1658 JSEntryStubs GetJSEntryStubs();
1659
1660 static constexpr size_t kMinCodePagesBufferSize = 32;
1661
1675 size_t CopyCodePages(size_t capacity, MemoryRange* code_pages_out);
1676
1678 void SetFatalErrorHandler(FatalErrorCallback that);
1679
1681 void SetOOMErrorHandler(OOMErrorCallback that);
1682
1688 void SetOOMErrorHandler(OOMErrorCallbackWithData that, void* data);
1689
1695 void AddNearHeapLimitCallback(NearHeapLimitCallback callback, void* data);
1696
1704 void RemoveNearHeapLimitCallback(NearHeapLimitCallback callback,
1705 size_t heap_limit);
1706
1713 void AutomaticallyRestoreInitialHeapLimit(double threshold_percent = 0.5);
1714
1719 void SetModifyCodeGenerationFromStringsCallback(
1721
1726 void SetAllowWasmCodeGenerationCallback(
1728
1733 void SetWasmModuleCallback(ExtensionCallback callback);
1734 void SetWasmInstanceCallback(ExtensionCallback callback);
1735
1736 void SetWasmStreamingCallback(WasmStreamingCallback callback);
1737
1738 void SetWasmAsyncResolvePromiseCallback(
1740
1741 void SetWasmLoadSourceMapCallback(WasmLoadSourceMapCallback callback);
1742
1743 void SetWasmCustomDescriptorsEnabledCallback(
1745
1746 void SetSharedArrayBufferConstructorEnabledCallback(
1748
1754 void InstallConditionalFeatures(Local<Context> context);
1755
1760 bool IsDead();
1761
1771 bool AddMessageListener(MessageCallback callback,
1772 Local<Value> data = Local<Value>());
1773
1785 bool AddMessageListenerWithErrorLevel(MessageCallback callback,
1786 int message_levels,
1787 Local<Value> data = Local<Value>());
1788
1792 void RemoveMessageListeners(MessageCallback callback);
1793
1795 void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback);
1796
1801 void SetCaptureStackTraceForUncaughtExceptions(
1802 bool capture, int frame_limit = 10,
1803 StackTrace::StackTraceOptions options = StackTrace::kOverview);
1804
1809 bool IsInUse();
1810
1816 void SetAllowAtomicsWait(bool allow);
1817
1831 enum class TimeZoneDetection { kSkip, kRedetect };
1832
1844 TimeZoneDetection time_zone_detection = TimeZoneDetection::kSkip);
1845
1856
1861 std::string GetDefaultLocale();
1862
1877
1881 uint64_t GetHashSeed();
1882
1883 Isolate() = delete;
1884 ~Isolate() = delete;
1885 Isolate(const Isolate&) = delete;
1886 Isolate& operator=(const Isolate&) = delete;
1887 // Deleting operator new and delete here is allowed as ctor and dtor is also
1888 // deleted.
1889 void* operator new(size_t size) = delete;
1890 void* operator new[](size_t size) = delete;
1891 void operator delete(void*, size_t) = delete;
1892 void operator delete[](void*, size_t) = delete;
1893
1894 private:
1895 template <class K, class V, class Traits>
1898
1900 size_t index);
1901 int64_t AdjustAmountOfExternalAllocatedMemoryImpl(int64_t change_in_bytes);
1902};
1903
1904void Isolate::SetData(uint32_t slot, void* data) {
1905 using I = internal::Internals;
1906 I::SetEmbedderData(this, slot, data);
1907}
1908
1909void* Isolate::GetData(uint32_t slot) {
1910 using I = internal::Internals;
1911 return I::GetEmbedderData(this, slot);
1912}
1913
1914uint32_t Isolate::GetNumberOfDataSlots() {
1915 using I = internal::Internals;
1916 return I::kNumIsolateDataSlots;
1917}
1918
1919template <class T>
1920MaybeLocal<T> Isolate::GetDataFromSnapshotOnce(size_t index) {
1921 if (auto repr = GetDataFromSnapshotOnce(index);
1922 repr != internal::ValueHelper::kEmpty) {
1923 internal::PerformCastCheck(internal::ValueHelper::ReprAsValue<T>(repr));
1924 return Local<T>::FromRepr(repr);
1925 }
1926 return {};
1927}
1928
1929} // namespace v8
1930
1931#endif // INCLUDE_V8_ISOLATE_H_
Definition: v8-array-buffer.h:153
Definition: v8-array-buffer.h:136
Definition: v8-context.h:48
Definition: v8-cppgc.h:70
Definition: v8-data.h:18
Definition: v8-embedder-heap.h:22
Definition: v8-external-memory-accounter.h:23
Definition: v8-function.h:27
Definition: v8-statistics.h:227
Definition: v8-statistics.h:210
Definition: v8-profiler.h:1006
Definition: v8-statistics.h:191
Definition: v8-statistics.h:140
Definition: v8-isolate.h:225
static IsolateGroup Create()
static IsolateGroup GetDefault()
bool operator!=(const IsolateGroup &other) const
Definition: v8-isolate.h:259
bool SandboxContains(void *pointer) const
Definition: v8-isolate.h:271
IsolateGroup & operator=(const IsolateGroup &)
IsolateGroup(IsolateGroup &&other)
IsolateGroup(const IsolateGroup &)
bool operator==(const IsolateGroup &other) const
Definition: v8-isolate.h:255
static bool CanCreateNewGroups()
IsolateGroup & operator=(IsolateGroup &&other)
Definition: v8-isolate.h:419
AllowJavascriptExecutionScope(const AllowJavascriptExecutionScope &)=delete
AllowJavascriptExecutionScope & operator=(const AllowJavascriptExecutionScope &)=delete
DisallowJavascriptExecutionScope(Isolate *isolate, OnFailure on_failure)
DisallowJavascriptExecutionScope(const DisallowJavascriptExecutionScope &)=delete
DisallowJavascriptExecutionScope & operator=(const DisallowJavascriptExecutionScope &)=delete
@ CRASH_ON_FAILURE
Definition: v8-isolate.h:399
Definition: v8-isolate.h:378
Scope(Isolate *isolate)
Definition: v8-isolate.h:380
Scope(const Scope &)=delete
~Scope()
Definition: v8-isolate.h:384
Scope & operator=(const Scope &)=delete
SuppressMicrotaskExecutionScope(Isolate *isolate, MicrotaskQueue *microtask_queue=nullptr)
SuppressMicrotaskExecutionScope & operator=(const SuppressMicrotaskExecutionScope &)=delete
SuppressMicrotaskExecutionScope(const SuppressMicrotaskExecutionScope &)=delete
Definition: v8-isolate.h:292
int GetStackTraceLimit()
void RemoveGCEpilogueCallback(GCCallback callback)
void AddGCPrologueCallback(GCCallbackWithData callback, void *data=nullptr, GCType gc_type_filter=kGCTypeAll)
void RemoveGCEpilogueCallback(GCCallbackWithData callback, void *data=nullptr)
void Dispose()
void LocaleConfigurationChangeNotification()
void AddBeforeCallEnteredCallback(BeforeCallEnteredCallback callback)
void(*)(std::unique_ptr< CppHeap >) ReleaseCppHeapCallback
Definition: v8-isolate.h:1244
void SetEventLogger(LogEventCallback that)
Maybe< std::string > ValidateAndCanonicalizeUnicodeLocaleId(std::string_view locale)
void SetExceptionPropagationCallback(ExceptionPropagationCallback callback)
void RequestGarbageCollectionForTesting(GarbageCollectionType type, StackState stack_state)
void ClearKeptObjects()
void Deinitialize()
Local< Value > ThrowError(Local< String > message)
CppHeap * GetCppHeap() const
size_t(*)() GetExternallyAllocatedMemoryInBytesCallback
Definition: v8-isolate.h:1259
static Isolate * New(const CreateParams &params)
Isolate()=delete
static Isolate * GetCurrent()
void RemoveCallCompletedCallback(CallCompletedCallback callback)
static void Free(Isolate *isolate)
static void Initialize(Isolate *isolate, const CreateParams &params)
bool HasPendingException()
static Isolate * New(const IsolateGroup &group, const CreateParams &params)
TimeZoneDetection
Definition: v8-isolate.h:1831
void RequestGarbageCollectionForTesting(GarbageCollectionType type)
void SetMemorySaverMode(bool memory_saver_mode_enabled)
GarbageCollectionType
Definition: v8-isolate.h:467
@ kFullGarbageCollection
Definition: v8-isolate.h:468
void DumpAndResetStats()
void SetHostImportModuleDynamicallyCallback(HostImportModuleDynamicallyCallback callback)
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags) GCCallback
Definition: v8-isolate.h:1162
static Isolate * Allocate(const IsolateGroup &group)
void SetIsJSApiWrapperNativeErrorCallback(IsJSApiWrapperNativeErrorCallback callback)
void SetPromiseRejectCallback(PromiseRejectCallback callback)
void SetPromiseHook(PromiseHook hook)
bool RetryCustomAllocate(std::function< bool()> allocate)
void(*)(Isolate *isolate, UseCounterFeature feature) UseCounterCallback
Definition: v8-isolate.h:701
void CancelTerminateExecution()
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags, void *data) GCCallbackWithData
Definition: v8-isolate.h:1164
void SetHostCreateShadowRealmContextCallback(HostCreateShadowRealmContextCallback callback)
bool IsCurrent() const
void AddGCPrologueCallback(GCCallback callback, GCType gc_type_filter=kGCTypeAll)
void RemoveGCPrologueCallback(GCCallback callback)
void SetBatterySaverMode(bool battery_saver_mode_enabled)
void DateTimeConfigurationChangeNotification(TimeZoneDetection time_zone_detection=TimeZoneDetection::kSkip)
void AddCallCompletedCallback(CallCompletedCallback callback)
void SetEmbedderRootsHandler(EmbedderRootsHandler *handler)
void RemoveBeforeCallEnteredCallback(BeforeCallEnteredCallback callback)
void RequestInterrupt(InterruptCallback callback, void *data)
uint64_t GetHashSeed()
void AddGCEpilogueCallback(GCCallbackWithData callback, void *data=nullptr, GCType gc_type_filter=kGCTypeAll)
Isolate & operator=(const Isolate &)=delete
std::string GetDefaultLocale()
void PerformMicrotaskCheckpoint()
void SetPrepareStackTraceCallback(PrepareStackTraceCallback callback)
Priority
Definition: v8-isolate.h:686
Isolate(const Isolate &)=delete
void AddGCEpilogueCallback(GCCallback callback, GCType gc_type_filter=kGCTypeAll)
bool HasPendingBackgroundTasks()
void DiscardThreadSpecificMetadata()
static Isolate * TryGetCurrent()
Local< Value > ThrowException(Local< Value > exception)
static Isolate * Allocate()
MessageErrorLevel
Definition: v8-isolate.h:675
bool(*)(Isolate *) AbortOnUncaughtExceptionCallback
Definition: v8-isolate.h:787
void TerminateExecution()
void SetHostInitializeImportMetaObjectCallback(HostInitializeImportMetaObjectCallback callback)
void MemoryPressureNotification(MemoryPressureLevel level)
IsolateGroup GetGroup() const
void SetGetExternallyAllocatedMemoryInBytesCallback(GetExternallyAllocatedMemoryInBytesCallback callback)
void Enter()
UseCounterFeature
Definition: v8-isolate.h:480
bool IsExecutionTerminating()
void SetReleaseCppHeapCallbackForTesting(ReleaseCppHeapCallback callback)
~Isolate()=delete
void RemoveGCPrologueCallback(GCCallbackWithData, void *data=nullptr)
void SetAbortOnUncaughtExceptionCallback(AbortOnUncaughtExceptionCallback callback)
void ClearCachesForTesting()
void SetHostImportModuleWithPhaseDynamicallyCallback(HostImportModuleWithPhaseDynamicallyCallback callback)
Definition: v8-local-handle.h:366
Definition: v8-local-handle.h:734
Definition: v8-maybe.h:39
Definition: v8-statistics.h:55
Definition: v8-microtask-queue.h:51
Definition: v8-util.h:166
Definition: v8-isolate.h:66
void set_code_range_size_in_bytes(size_t limit)
Definition: v8-isolate.h:117
size_t max_old_generation_size_in_bytes() const
Definition: v8-isolate.h:126
void set_stack_limit(uint32_t *value)
Definition: v8-isolate.h:105
void set_initial_old_generation_size_in_bytes(size_t initial_size)
Definition: v8-isolate.h:148
void ConfigureDefaultsFromHeapSize(size_t initial_heap_size_in_bytes, size_t maximum_heap_size_in_bytes)
uint32_t * stack_limit() const
Definition: v8-isolate.h:104
size_t code_range_size_in_bytes() const
Definition: v8-isolate.h:116
void set_initial_young_generation_size_in_bytes(size_t initial_size)
Definition: v8-isolate.h:155
size_t initial_young_generation_size_in_bytes() const
Definition: v8-isolate.h:152
size_t max_young_generation_size_in_bytes() const
Definition: v8-isolate.h:138
void set_max_young_generation_size_in_bytes(size_t limit)
Definition: v8-isolate.h:141
size_t initial_old_generation_size_in_bytes() const
Definition: v8-isolate.h:145
uint64_t physical_memory_size_in_bytes() const
Definition: v8-isolate.h:159
void ConfigureDefaults(uint64_t physical_memory, uint64_t virtual_memory_limit)
void set_max_old_generation_size_in_bytes(size_t limit)
Definition: v8-isolate.h:129
Definition: v8-debug.h:119
Definition: v8-snapshot.h:21
Definition: v8-value.h:32
Definition: v8-platform.h:849
Definition: v8-internal.h:963
internal::Address * InternalRepresentationType
Definition: v8-internal.h:1794
Definition: v8-metrics.h:182
#define CPPGC_STACK_ALLOCATED()
Definition: macros.h:44
EmbedderStackState
Definition: common.h:15
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
void(*)(const JitCodeEvent *event) JitCodeEventHandler
Definition: v8-callbacks.h:142
JitCodeEventOptions
Definition: v8-callbacks.h:129
void(*)(const char *location, const OOMDetails &details) OOMErrorCallback
Definition: v8-callbacks.h:234
bool(*)(Local< Context > context) SharedArrayBufferConstructorEnabledCallback
Definition: v8-callbacks.h:343
void(*)(void *data) MicrotaskCallback
Definition: v8-microtask.h:17
GCCallbackFlags
Definition: v8-callbacks.h:179
bool(*)(Local< Context > context) WasmCustomDescriptorsEnabledCallback
Definition: v8-callbacks.h:339
MicrotasksPolicy
Definition: v8-microtask.h:28
void(*)(Isolate *isolate, Local< Context > context, Local< Promise::Resolver > resolver, Local< Value > result, WasmAsyncSuccess success) WasmAsyncResolvePromiseCallback
Definition: v8-callbacks.h:332
bool(*)(const FunctionCallbackInfo< Value > &) ExtensionCallback
Definition: v8-callbacks.h:315
void(*)(PromiseHookType type, Local< Promise > promise, Local< Value > parent) PromiseHook
Definition: v8-promise.h:155
void(*)(Isolate *, void *) MicrotasksCompletedCallbackWithData
Definition: v8-microtask.h:16
ContextDependants
Definition: v8-isolate.h:188
void(*)(ExceptionPropagationMessage message) ExceptionPropagationCallback
Definition: v8-exception.h:133
void(*)(const FunctionCallbackInfo< Value > &) WasmStreamingCallback
Definition: v8-callbacks.h:325
void *(*)(const char *name, int min, int max, size_t buckets) CreateHistogramCallback
Definition: v8-callbacks.h:220
void(*)(Local< Context > context, Local< Module > module, Local< Object > meta) HostInitializeImportMetaObjectCallback
Definition: v8-callbacks.h:449
void(*)(Local< Message > message, Local< Value > data) MessageCallback
Definition: v8-callbacks.h:240
void(*)(const char *location, const OOMDetails &details, void *data) OOMErrorCallbackWithData
Definition: v8-callbacks.h:238
void(*)(CrashKeyId id, const std::string &value) AddCrashKeyCallback
Definition: v8-callbacks.h:261
void(*)(Isolate *isolate, void *data) InterruptCallback
Definition: v8-callbacks.h:192
void(*)(Isolate *) CallCompletedCallback
Definition: v8-callbacks.h:274
void(*)(void *histogram, int sample) AddHistogramSampleCallback
Definition: v8-callbacks.h:222
size_t(*)(void *data, size_t current_heap_limit, size_t initial_heap_limit) NearHeapLimitCallback
Definition: v8-callbacks.h:205
void(*)(Isolate *) BeforeCallEnteredCallback
Definition: v8-callbacks.h:273
bool(*)(Local< Context > context, Local< String > source) AllowWasmCodeGenerationCallback
Definition: v8-callbacks.h:318
void(*)(const char *location, const char *message) FatalErrorCallback
Definition: v8-callbacks.h:226
void(*)(PromiseRejectMessage message) PromiseRejectCallback
Definition: v8-promise.h:181
GCType
Definition: v8-callbacks.h:154
std::function< void(CrashKey key, const std::string_view value)> SetCrashKeyStringCallback
Definition: v8-callbacks.h:270
ModifyCodeGenerationFromStringsResult(*)(Local< Context > context, Local< Value > source, bool is_code_like) ModifyCodeGenerationFromStringsCallback2
Definition: v8-callbacks.h:296
void(*)(Local< Object > target, AccessType type, Local< Value > data) FailedAccessCheckCallback
Definition: v8-callbacks.h:312
void(*)(const char *name, int status) LogEventCallback
Definition: v8-callbacks.h:246
MemoryPressureLevel
Definition: v8-isolate.h:182
MeasureMemoryExecution
Definition: v8-statistics.h:43
std::function< CrashKey(const char key[], CrashKeySize size)> AllocateCrashKeyStringCallback
Definition: v8-callbacks.h:268
int *(*)(const char *name) CounterLookupCallback
Definition: v8-callbacks.h:217
bool(*)(Isolate *isolate, Local< Object > obj) IsJSApiWrapperNativeErrorCallback
Definition: v8-callbacks.h:471
Definition: v8-isolate.h:297
Definition: v8-unwinder.h:82
Definition: v8-unwinder.h:73
Definition: v8-unwinder.h:21
Definition: v8-unwinder.h:63
#define V8_EXPORT
Definition: v8config.h:867
#define V8_INLINE
Definition: v8config.h:511
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:624
#define V8_DEPRECATED(message)
Definition: v8config.h:616
#define ALLOW_COPY_AND_MOVE_WITH_DEPRECATED_FIELDS(ClassName)
Definition: v8config.h:647
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:681
#define V8_NODISCARD
Definition: v8config.h:703