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 "v8-array-buffer.h" // NOLINT(build/include_directory)
18#include "v8-callbacks.h" // NOLINT(build/include_directory)
19#include "v8-data.h" // NOLINT(build/include_directory)
20#include "v8-debug.h" // NOLINT(build/include_directory)
21#include "v8-embedder-heap.h" // NOLINT(build/include_directory)
22#include "v8-exception.h" // NOLINT(build/include_directory)
23#include "v8-function-callback.h" // NOLINT(build/include_directory)
24#include "v8-internal.h" // NOLINT(build/include_directory)
25#include "v8-local-handle.h" // NOLINT(build/include_directory)
26#include "v8-microtask.h" // NOLINT(build/include_directory)
27#include "v8-persistent-handle.h" // NOLINT(build/include_directory)
28#include "v8-primitive.h" // NOLINT(build/include_directory)
29#include "v8-statistics.h" // NOLINT(build/include_directory)
30#include "v8-unwinder.h" // NOLINT(build/include_directory)
31#include "v8config.h" // NOLINT(build/include_directory)
32
33namespace v8 {
34
35class CppHeap;
36class HeapProfiler;
37class MicrotaskQueue;
38class StartupData;
39class ScriptOrModule;
40class SharedArrayBuffer;
41
42namespace internal {
43class MicrotaskQueue;
44class ThreadLocalTop;
45} // namespace internal
46
47namespace metrics {
48class Recorder;
49} // namespace metrics
50
66 public:
85 void ConfigureDefaultsFromHeapSize(size_t initial_heap_size_in_bytes,
86 size_t maximum_heap_size_in_bytes);
87
97 void ConfigureDefaults(uint64_t physical_memory,
98 uint64_t virtual_memory_limit);
99
103 uint32_t* stack_limit() const { return stack_limit_; }
104 void set_stack_limit(uint32_t* value) { stack_limit_ = value; }
105
115 size_t code_range_size_in_bytes() const { return code_range_size_; }
116 void set_code_range_size_in_bytes(size_t limit) { code_range_size_ = limit; }
117
126 return max_old_generation_size_;
127 }
129 max_old_generation_size_ = limit;
130 }
131
138 return max_young_generation_size_;
139 }
141 max_young_generation_size_ = limit;
142 }
143
145 return initial_old_generation_size_;
146 }
148 initial_old_generation_size_ = initial_size;
149 }
150
152 return initial_young_generation_size_;
153 }
155 initial_young_generation_size_ = initial_size;
156 }
157
159 return physical_memory_size_;
160 }
161
162 private:
163 static constexpr size_t kMB = 1048576u;
164 size_t code_range_size_ = 0;
165 size_t max_old_generation_size_ = 0;
166 size_t max_young_generation_size_ = 0;
167 size_t initial_old_generation_size_ = 0;
168 size_t initial_young_generation_size_ = 0;
169 uint64_t physical_memory_size_ = 0;
170 uint32_t* stack_limit_ = nullptr;
171};
172
182
193};
194
199
225 public:
233
238 static bool CanCreateNewGroups();
239
245
248
251
253
254 bool operator==(const IsolateGroup& other) const {
255 return isolate_group_ == other.isolate_group_;
256 }
257
258 bool operator!=(const IsolateGroup& other) const {
259 return !operator==(other);
260 }
261
262#ifdef V8_ENABLE_SANDBOX
267 bool SandboxContains(void* pointer) const;
268 VirtualAddressSpace* GetSandboxAddressSpace();
269#else
270 V8_INLINE bool SandboxContains(void* pointer) const { return true; }
271#endif
272
273 private:
274 friend class Isolate;
276
277 // The isolate_group pointer should be already acquired.
278 explicit IsolateGroup(internal::IsolateGroup*&& isolate_group);
279
280 internal::IsolateGroup* isolate_group_;
281};
282
292 public:
299
301
302
306 JitCodeEventHandler code_event_handler = nullptr;
307
312
317 const StartupData* snapshot_blob = nullptr;
318
323 CounterLookupCallback counter_lookup_callback = nullptr;
324
331 CreateHistogramCallback create_histogram_callback = nullptr;
332 AddHistogramSampleCallback add_histogram_sample_callback = nullptr;
333
343 ArrayBuffer::Allocator* array_buffer_allocator = nullptr;
344 std::shared_ptr<ArrayBuffer::Allocator> array_buffer_allocator_shared;
345
352 const intptr_t* external_references = nullptr;
353
358 bool allow_atomics_wait = true;
359
363 FatalErrorCallback fatal_error_callback = nullptr;
364 OOMErrorCallback oom_error_callback = nullptr;
365
370 CppHeap* cpp_heap = nullptr;
371 };
372
378 public:
379 explicit Scope(Isolate* isolate) : v8_isolate_(isolate) {
380 v8_isolate_->Enter();
381 }
382
383 ~Scope() { v8_isolate_->Exit(); }
384
385 // Prevent copying of Scope objects.
386 Scope(const Scope&) = delete;
387 Scope& operator=(const Scope&) = delete;
388
389 private:
390 Isolate* const v8_isolate_;
391 };
392
397 public:
398 enum OnFailure { CRASH_ON_FAILURE, THROW_ON_FAILURE, DUMP_ON_FAILURE };
399
402
403 // Prevent copying of Scope objects.
405 delete;
407 const DisallowJavascriptExecutionScope&) = delete;
408
409 private:
410 v8::Isolate* const v8_isolate_;
411 const OnFailure on_failure_;
412 bool was_execution_allowed_;
413 };
414
419 public:
422
423 // Prevent copying of Scope objects.
425 delete;
427 const AllowJavascriptExecutionScope&) = delete;
428
429 private:
430 Isolate* const v8_isolate_;
431 bool was_execution_allowed_assert_;
432 bool was_execution_allowed_throws_;
433 bool was_execution_allowed_dump_;
434 };
435
441 public:
443 Isolate* isolate, MicrotaskQueue* microtask_queue = nullptr);
445
446 // Prevent copying of Scope objects.
448 delete;
450 const SuppressMicrotaskExecutionScope&) = delete;
451
452 private:
453 internal::Isolate* const i_isolate_;
454 internal::MicrotaskQueue* const microtask_queue_;
455 internal::Address previous_stack_height_;
456
457 friend class internal::ThreadLocalTop;
458 };
459
466 kMinorGarbageCollection
467 };
468
478 kUseAsm = 0,
479 kBreakIterator = 1,
480 kOBSOLETE_LegacyConst = 2,
481 kOBSOLETE_MarkDequeOverflow = 3,
482 kOBSOLETE_StoreBufferOverflow = 4,
483 kOBSOLETE_SlotsBufferOverflow = 5,
484 kOBSOLETE_ObjectObserve = 6,
485 kForcedGC = 7,
486 kSloppyMode = 8,
487 kStrictMode = 9,
488 kOBSOLETE_StrongMode = 10,
489 kRegExpPrototypeStickyGetter = 11,
490 kRegExpPrototypeToString = 12,
491 kRegExpPrototypeUnicodeGetter = 13,
492 kOBSOLETE_IntlV8Parse = 14,
493 kOBSOLETE_IntlPattern = 15,
494 kOBSOLETE_IntlResolved = 16,
495 kOBSOLETE_PromiseChain = 17,
496 kOBSOLETE_PromiseAccept = 18,
497 kOBSOLETE_PromiseDefer = 19,
498 kHtmlCommentInExternalScript = 20,
499 kHtmlComment = 21,
500 kSloppyModeBlockScopedFunctionRedefinition = 22,
501 kForInInitializer = 23,
502 kOBSOLETE_ArrayProtectorDirtied = 24,
503 kArraySpeciesModified = 25,
504 kArrayPrototypeConstructorModified = 26,
505 kOBSOLETE_ArrayInstanceProtoModified = 27,
506 kArrayInstanceConstructorModified = 28,
507 kOBSOLETE_LegacyFunctionDeclaration = 29,
508 kOBSOLETE_RegExpPrototypeSourceGetter = 30,
509 kOBSOLETE_RegExpPrototypeOldFlagGetter = 31,
510 kDecimalWithLeadingZeroInStrictMode = 32,
511 kLegacyDateParser = 33,
512 kDefineGetterOrSetterWouldThrow = 34,
513 kFunctionConstructorReturnedUndefined = 35,
514 kAssigmentExpressionLHSIsCallInSloppy = 36,
515 kAssigmentExpressionLHSIsCallInStrict = 37,
516 kPromiseConstructorReturnedUndefined = 38,
517 kOBSOLETE_ConstructorNonUndefinedPrimitiveReturn = 39,
518 kOBSOLETE_LabeledExpressionStatement = 40,
519 kOBSOLETE_LineOrParagraphSeparatorAsLineTerminator = 41,
520 kIndexAccessor = 42,
521 kErrorCaptureStackTrace = 43,
522 kErrorPrepareStackTrace = 44,
523 kErrorStackTraceLimit = 45,
524 kWebAssemblyInstantiation = 46,
525 kDeoptimizerDisableSpeculation = 47,
526 kOBSOLETE_ArrayPrototypeSortJSArrayModifiedPrototype = 48,
527 kFunctionTokenOffsetTooLongForToString = 49,
528 kWasmSharedMemory = 50,
529 kWasmThreadOpcodes = 51,
530 kOBSOLETE_AtomicsNotify = 52,
531 kOBSOLETE_AtomicsWake = 53,
532 kCollator = 54,
533 kNumberFormat = 55,
534 kDateTimeFormat = 56,
535 kPluralRules = 57,
536 kRelativeTimeFormat = 58,
537 kLocale = 59,
538 kListFormat = 60,
539 kSegmenter = 61,
540 kStringLocaleCompare = 62,
541 kOBSOLETE_StringToLocaleUpperCase = 63,
542 kStringToLocaleLowerCase = 64,
543 kNumberToLocaleString = 65,
544 kDateToLocaleString = 66,
545 kDateToLocaleDateString = 67,
546 kDateToLocaleTimeString = 68,
547 kAttemptOverrideReadOnlyOnPrototypeSloppy = 69,
548 kAttemptOverrideReadOnlyOnPrototypeStrict = 70,
549 kOBSOLETE_OptimizedFunctionWithOneShotBytecode = 71,
550 kRegExpMatchIsTrueishOnNonJSRegExp = 72,
551 kRegExpMatchIsFalseishOnJSRegExp = 73,
552 kOBSOLETE_DateGetTimezoneOffset = 74,
553 kStringNormalize = 75,
554 kCallSiteAPIGetFunctionSloppyCall = 76,
555 kCallSiteAPIGetThisSloppyCall = 77,
556 kOBSOLETE_RegExpMatchAllWithNonGlobalRegExp = 78,
557 kRegExpExecCalledOnSlowRegExp = 79,
558 kRegExpReplaceCalledOnSlowRegExp = 80,
559 kDisplayNames = 81,
560 kSharedArrayBufferConstructed = 82,
561 kArrayPrototypeHasElements = 83,
562 kObjectPrototypeHasElements = 84,
563 kNumberFormatStyleUnit = 85,
564 kDateTimeFormatRange = 86,
565 kDateTimeFormatDateTimeStyle = 87,
566 kBreakIteratorTypeWord = 88,
567 kBreakIteratorTypeLine = 89,
568 kInvalidatedArrayBufferDetachingProtector = 90,
569 kInvalidatedArrayConstructorProtector V8_DEPRECATE_SOON(
570 "The ArrayConstructorProtector has been removed") = 91,
571 kInvalidatedArrayIteratorLookupChainProtector = 92,
572 kInvalidatedArraySpeciesLookupChainProtector = 93,
573 kInvalidatedIsConcatSpreadableLookupChainProtector = 94,
574 kInvalidatedMapIteratorLookupChainProtector = 95,
575 kInvalidatedNoElementsProtector = 96,
576 kInvalidatedPromiseHookProtector = 97,
577 kInvalidatedPromiseResolveLookupChainProtector = 98,
578 kInvalidatedPromiseSpeciesLookupChainProtector = 99,
579 kInvalidatedPromiseThenLookupChainProtector = 100,
580 kInvalidatedRegExpSpeciesLookupChainProtector = 101,
581 kInvalidatedSetIteratorLookupChainProtector = 102,
582 kInvalidatedStringIteratorLookupChainProtector = 103,
583 kInvalidatedStringLengthOverflowLookupChainProtector = 104,
584 kInvalidatedTypedArraySpeciesLookupChainProtector = 105,
585 kWasmSimdOpcodes = 106,
586 kVarRedeclaredCatchBinding = 107,
587 kWasmRefTypes = 108,
588 kWasmBulkMemory = 109,
589 kWasmMultiValue = 110,
590 kWasmExceptionHandling = 111,
591 kInvalidatedMegaDOMProtector = 112,
592 kFunctionPrototypeArguments = 113,
593 kFunctionPrototypeCaller = 114,
594 kTurboFanOsrCompileStarted = 115,
595 kAsyncStackTaggingCreateTaskCall = 116,
596 kDurationFormat = 117,
597 kInvalidatedNumberStringNotRegexpLikeProtector = 118,
598 kOBSOLETE_RegExpUnicodeSetIncompatibilitiesWithUnicodeMode = 119,
599 kOBSOLETE_ImportAssertionDeprecatedSyntax = 120,
600 kLocaleInfoObsoletedGetters = 121,
601 kLocaleInfoFunctions = 122,
602 kCompileHintsMagicAll = 123,
603 kInvalidatedNoProfilingProtector = 124,
604 kWasmMemory64 = 125,
605 kWasmMultiMemory = 126,
606 kWasmGC = 127,
607 kWasmImportedStrings = 128,
608 kSourceMappingUrlMagicCommentAtSign = 129,
609 kTemporalObject = 130,
610 kWasmModuleCompilation = 131,
611 kInvalidatedNoUndetectableObjectsProtector = 132,
612 kWasmJavaScriptPromiseIntegration = 133,
613 kWasmReturnCall = 134,
614 kWasmExtendedConst = 135,
615 kWasmRelaxedSimd = 136,
616 kWasmTypeReflection = 137,
617 kWasmExnRef = 138,
618 kWasmTypedFuncRef = 139,
619 kInvalidatedStringWrapperToPrimitiveProtector = 140,
620 kDocumentAllLegacyCall = 141,
621 kDocumentAllLegacyConstruct = 142,
622 kConsoleContext = 143,
623 kWasmImportedStringsUtf8 = 144,
624 kResizableArrayBuffer = 145,
625 kGrowableSharedArrayBuffer = 146,
626 kArrayByCopy = 147,
627 kArrayFromAsync = 148,
628 kIteratorMethods = 149,
629 kPromiseAny = 150,
630 kSetMethods = 151,
631 kArrayFindLast = 152,
632 kArrayGroup = 153,
633 kArrayBufferTransfer = 154,
634 kPromiseWithResolvers = 155,
635 kAtomicsWaitAsync = 156,
636 kExtendingNonExtensibleWithPrivate = 157,
637 kPromiseTry = 158,
638 kStringReplaceAll = 159,
639 kStringWellFormed = 160,
640 kWeakReferences = 161,
641 kErrorIsError = 162,
642 kInvalidatedTypedArrayLengthLookupChainProtector = 163,
643 kRegExpEscape = 164,
644 kFloat16Array = 165,
645 kExplicitResourceManagement = 166,
646 kWasmBranchHinting = 167,
647 kWasmMutableGlobals = 168,
648 kUint8ArrayToFromBase64AndHex = 169,
649 kAtomicsPause = 170,
650 kTopLevelAwait = 171,
651 kLogicalAssignment = 172,
652 kNullishCoalescing = 173,
653 kInvalidatedNoDateTimeConfigurationChangeProtector = 174,
654 kWasmNonTrappingFloatToInt = 175,
655 kWasmSignExtensionOps = 176,
656 kRegExpCompile = 177,
657 kRegExpStaticProperties = 178,
658 kRegExpStaticPropertiesWithLastMatch = 179,
659 kWithStatement = 180,
660 kHtmlWrapperMethods = 181,
661 kWasmCustomDescriptors = 182,
662 kWasmResizableBuffers = 183,
663
664 // If you add new values here, you'll also need to update Chromium's:
665 // web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to
666 // this list need to be landed first, then changes on the Chromium side.
667 kUseCounterFeatureCount // This enum value must be last.
668 };
669
671 kMessageLog = (1 << 0),
672 kMessageDebug = (1 << 1),
673 kMessageInfo = (1 << 2),
674 kMessageError = (1 << 3),
675 kMessageWarning = (1 << 4),
676 kMessageAll = kMessageLog | kMessageDebug | kMessageInfo | kMessageError |
677 kMessageWarning,
678 };
679
680 // The different priorities that an isolate can have.
681 enum class Priority {
682 // The isolate does not relate to content that is currently important
683 // to the user. Lowest priority.
685
686 // The isolate contributes to content that is visible to the user, like a
687 // visible iframe that's not interacted directly with. High priority.
689
690 // The isolate contributes to content that is of the utmost importance to
691 // the user, like visible content in the focused window. Highest priority.
693 };
694
695 using UseCounterCallback = void (*)(Isolate* isolate,
696 UseCounterFeature feature);
697
712 static Isolate* Allocate();
713 static Isolate* Allocate(const IsolateGroup& group);
714
719
723 static void Initialize(Isolate* isolate, const CreateParams& params);
724
734 static Isolate* New(const CreateParams& params);
735 static Isolate* New(const IsolateGroup& group, const CreateParams& params);
736
744
752
756 bool IsCurrent() const;
757
772
785
792
804
811
818
826
832
837
838#if defined(V8_OS_WIN)
842 V8_DEPRECATE_SOON("Use SetFilterETWSessionByURL2Callback instead")
843 void SetFilterETWSessionByURLCallback(FilterETWSessionByURLCallback callback);
844 void SetFilterETWSessionByURL2Callback(
845 FilterETWSessionByURL2Callback callback);
846#endif // V8_OS_WIN
847
855
860 bool RetryCustomAllocate(std::function<bool()> allocate);
861
868 void SetBatterySaverMode(bool battery_saver_mode_enabled);
869
876 void SetMemorySaverMode(bool memory_saver_mode_enabled);
877
884
895 void Enter();
896
904 void Exit();
905
910 void Dispose();
911
918
925 static void Free(Isolate* isolate);
926
932
941
946 V8_INLINE void SetData(uint32_t slot, void* data);
947
952 V8_INLINE void* GetData(uint32_t slot);
953
958 V8_INLINE static uint32_t GetNumberOfDataSlots();
959
965 template <class T>
966 V8_INLINE MaybeLocal<T> GetDataFromSnapshotOnce(size_t index);
967
972 V8_DEPRECATED("Use GetContinuationPreservedEmbedderDataV2 instead")
973 Local<Value> GetContinuationPreservedEmbedderData();
974
979 V8_DEPRECATED("Use SetContinuationPreservedEmbedderDataV2 instead")
980 void SetContinuationPreservedEmbedderData(Local<Value> data);
981
988 Local<Data> GetContinuationPreservedEmbedderDataV2();
989
995 void SetContinuationPreservedEmbedderDataV2(Local<Data> data);
996
1000 void GetHeapStatistics(HeapStatistics* heap_statistics);
1001
1005 size_t NumberOfHeapSpaces();
1006
1016 bool GetHeapSpaceStatistics(HeapSpaceStatistics* space_statistics,
1017 size_t index);
1018
1022 size_t NumberOfTrackedHeapObjectTypes();
1023
1033 bool GetHeapObjectStatisticsAtLastGC(HeapObjectStatistics* object_statistics,
1034 size_t type_index);
1035
1043 bool GetHeapCodeAndMetadataStatistics(HeapCodeStatistics* object_statistics);
1044
1057 bool MeasureMemory(
1058 std::unique_ptr<MeasureMemoryDelegate> delegate,
1059 MeasureMemoryExecution execution = MeasureMemoryExecution::kDefault);
1060
1073 void GetStackSample(const RegisterState& state, void** frames,
1074 size_t frames_limit, SampleInfo* sample_info);
1075
1084 int64_t AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes);
1085
1090 HeapProfiler* GetHeapProfiler();
1091
1095 void SetIdle(bool is_idle);
1096
1098 ArrayBuffer::Allocator* GetArrayBufferAllocator();
1099
1101 bool InContext();
1102
1107 Local<Context> GetCurrentContext();
1108
1115 Local<Context> GetEnteredOrMicrotaskContext();
1116
1121 Local<Context> GetIncumbentContext();
1122
1127 MaybeLocal<Data> GetCurrentHostDefinedOptions();
1128
1134 template <int N>
1135 Local<Value> ThrowError(const char (&message)[N]) {
1136 return ThrowError(String::NewFromUtf8Literal(this, message));
1137 }
1139
1147
1155
1156 using GCCallback = void (*)(Isolate* isolate, GCType type,
1157 GCCallbackFlags flags);
1158 using GCCallbackWithData = void (*)(Isolate* isolate, GCType type,
1159 GCCallbackFlags flags, void* data);
1160
1172 GCType gc_type_filter = kGCTypeAll);
1173
1179 void AddGCPrologueCallback(GCCallbackWithData callback, void* data = nullptr,
1180 GCType gc_type_filter = kGCTypeAll);
1181
1189
1196
1204 GCType gc_type_filter = kGCTypeAll);
1205
1211 void AddGCEpilogueCallback(GCCallbackWithData callback, void* data = nullptr,
1212 GCType gc_type_filter = kGCTypeAll);
1213
1221
1228 void* data = nullptr);
1229
1238
1239 using ReleaseCppHeapCallback = void (*)(std::unique_ptr<CppHeap>);
1240
1247
1253
1255
1264
1273
1283
1299
1308 void RequestInterrupt(InterruptCallback callback, void* data);
1309
1316
1327
1339 StackState stack_state);
1340
1345
1353
1358
1367
1372
1378
1384
1393
1401
1406
1410 void EnqueueMicrotask(MicrotaskCallback callback, void* data = nullptr);
1411
1416
1421
1436 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1437
1442 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1443
1448
1454
1463
1474 const std::shared_ptr<metrics::Recorder>& metrics_recorder);
1475
1482
1489
1495
1505 V8_DEPRECATE_SOON("Use version that passes ContextDependants.")
1506 int ContextDisposedNotification(bool dependant_context = true);
1507
1515 void ContextDisposedNotification(ContextDependants dependants);
1516
1521 V8_DEPRECATE_SOON("Use SetPriority(Priority::kUserBlocking) instead")
1522 void IsolateInForegroundNotification();
1523
1528 V8_DEPRECATE_SOON("Use SetPriority(Priority::kBestEffort) instead")
1529 void IsolateInBackgroundNotification();
1530
1535 void SetPriority(Priority priority);
1536
1549 void SetIsLoading(bool is_loading);
1550
1557 void Freeze(bool is_frozen);
1558
1563 void IncreaseHeapLimitForDebugging();
1564
1568 void RestoreOriginalHeapLimit();
1569
1574 bool IsHeapLimitIncreasedForDebugging();
1575
1598 void SetJitCodeEventHandler(JitCodeEventOptions options,
1599 JitCodeEventHandler event_handler);
1600
1610 void SetStackLimit(uintptr_t stack_limit);
1611
1627 void GetCodeRange(void** start, size_t* length_in_bytes);
1628
1633 void GetEmbeddedCodeRange(const void** start, size_t* length_in_bytes);
1634
1638 JSEntryStubs GetJSEntryStubs();
1639
1640 static constexpr size_t kMinCodePagesBufferSize = 32;
1641
1655 size_t CopyCodePages(size_t capacity, MemoryRange* code_pages_out);
1656
1658 void SetFatalErrorHandler(FatalErrorCallback that);
1659
1661 void SetOOMErrorHandler(OOMErrorCallback that);
1662
1668 void SetOOMErrorHandler(OOMErrorCallbackWithData that, void* data);
1669
1675 void AddNearHeapLimitCallback(NearHeapLimitCallback callback, void* data);
1676
1684 void RemoveNearHeapLimitCallback(NearHeapLimitCallback callback,
1685 size_t heap_limit);
1686
1693 void AutomaticallyRestoreInitialHeapLimit(double threshold_percent = 0.5);
1694
1699 void SetModifyCodeGenerationFromStringsCallback(
1701
1706 void SetAllowWasmCodeGenerationCallback(
1708
1713 void SetWasmModuleCallback(ExtensionCallback callback);
1714 void SetWasmInstanceCallback(ExtensionCallback callback);
1715
1716 void SetWasmStreamingCallback(WasmStreamingCallback callback);
1717
1718 void SetWasmAsyncResolvePromiseCallback(
1720
1721 void SetWasmLoadSourceMapCallback(WasmLoadSourceMapCallback callback);
1722
1723 void SetWasmCustomDescriptorsEnabledCallback(
1725
1726 void SetSharedArrayBufferConstructorEnabledCallback(
1728
1734 void InstallConditionalFeatures(Local<Context> context);
1735
1740 bool IsDead();
1741
1751 bool AddMessageListener(MessageCallback callback,
1752 Local<Value> data = Local<Value>());
1753
1765 bool AddMessageListenerWithErrorLevel(MessageCallback callback,
1766 int message_levels,
1767 Local<Value> data = Local<Value>());
1768
1772 void RemoveMessageListeners(MessageCallback callback);
1773
1775 void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback);
1776
1781 void SetCaptureStackTraceForUncaughtExceptions(
1782 bool capture, int frame_limit = 10,
1783 StackTrace::StackTraceOptions options = StackTrace::kOverview);
1784
1789 bool IsInUse();
1790
1796 void SetAllowAtomicsWait(bool allow);
1797
1811 enum class TimeZoneDetection { kSkip, kRedetect };
1812
1824 TimeZoneDetection time_zone_detection = TimeZoneDetection::kSkip);
1825
1836
1841 std::string GetDefaultLocale();
1842
1857
1861 uint64_t GetHashSeed();
1862
1863 Isolate() = delete;
1864 ~Isolate() = delete;
1865 Isolate(const Isolate&) = delete;
1866 Isolate& operator=(const Isolate&) = delete;
1867 // Deleting operator new and delete here is allowed as ctor and dtor is also
1868 // deleted.
1869 void* operator new(size_t size) = delete;
1870 void* operator new[](size_t size) = delete;
1871 void operator delete(void*, size_t) = delete;
1872 void operator delete[](void*, size_t) = delete;
1873
1874 private:
1875 template <class K, class V, class Traits>
1878
1880 size_t index);
1881 int64_t AdjustAmountOfExternalAllocatedMemoryImpl(int64_t change_in_bytes);
1882 void HandleExternalMemoryInterrupt();
1883};
1884
1885void Isolate::SetData(uint32_t slot, void* data) {
1886 using I = internal::Internals;
1887 I::SetEmbedderData(this, slot, data);
1888}
1889
1890void* Isolate::GetData(uint32_t slot) {
1891 using I = internal::Internals;
1892 return I::GetEmbedderData(this, slot);
1893}
1894
1895uint32_t Isolate::GetNumberOfDataSlots() {
1896 using I = internal::Internals;
1897 return I::kNumIsolateDataSlots;
1898}
1899
1900template <class T>
1901MaybeLocal<T> Isolate::GetDataFromSnapshotOnce(size_t index) {
1902 if (auto repr = GetDataFromSnapshotOnce(index);
1903 repr != internal::ValueHelper::kEmpty) {
1904 internal::PerformCastCheck(internal::ValueHelper::ReprAsValue<T>(repr));
1905 return Local<T>::FromRepr(repr);
1906 }
1907 return {};
1908}
1909
1910} // namespace v8
1911
1912#endif // INCLUDE_V8_ISOLATE_H_
Definition: v8-array-buffer.h:148
Definition: v8-array-buffer.h:131
Definition: v8-context.h:48
Definition: v8-cppgc.h:65
Definition: v8-data.h:18
Definition: v8-embedder-heap.h:22
Definition: v8-external-memory-accounter.h:23
Definition: v8-statistics.h:227
Definition: v8-statistics.h:210
Definition: v8-profiler.h:969
Definition: v8-statistics.h:191
Definition: v8-statistics.h:140
Definition: v8-isolate.h:224
static IsolateGroup Create()
static IsolateGroup GetDefault()
bool operator!=(const IsolateGroup &other) const
Definition: v8-isolate.h:258
bool SandboxContains(void *pointer) const
Definition: v8-isolate.h:270
IsolateGroup & operator=(const IsolateGroup &)
IsolateGroup(IsolateGroup &&other)
IsolateGroup(const IsolateGroup &)
bool operator==(const IsolateGroup &other) const
Definition: v8-isolate.h:254
static bool CanCreateNewGroups()
IsolateGroup & operator=(IsolateGroup &&other)
Definition: v8-isolate.h:418
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:398
Definition: v8-isolate.h:377
Scope(Isolate *isolate)
Definition: v8-isolate.h:379
Scope(const Scope &)=delete
~Scope()
Definition: v8-isolate.h:383
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:291
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 RemoveMicrotasksCompletedCallback(MicrotasksCompletedCallbackWithData callback, void *data=nullptr)
void(*)(std::unique_ptr< CppHeap >) ReleaseCppHeapCallback
Definition: v8-isolate.h:1239
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:1254
static Isolate * New(const CreateParams &params)
Isolate()=delete
void SetAddCrashKeyCallback(AddCrashKeyCallback)
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:1811
void RequestGarbageCollectionForTesting(GarbageCollectionType type)
void SetMemorySaverMode(bool memory_saver_mode_enabled)
GarbageCollectionType
Definition: v8-isolate.h:464
@ kFullGarbageCollection
Definition: v8-isolate.h:465
void DumpAndResetStats()
void SetHostImportModuleDynamicallyCallback(HostImportModuleDynamicallyCallback callback)
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags) GCCallback
Definition: v8-isolate.h:1157
static Isolate * Allocate(const IsolateGroup &group)
void SetMicrotasksPolicy(MicrotasksPolicy policy)
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:696
void CancelTerminateExecution()
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags, void *data) GCCallbackWithData
Definition: v8-isolate.h:1159
void SetHostCreateShadowRealmContextCallback(HostCreateShadowRealmContextCallback callback)
bool IsCurrent() const
void EnqueueMicrotask(Local< Function > microtask)
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
void SetCrashKeyStringCallbacks(AllocateCrashKeyStringCallback, SetCrashKeyStringCallback)
std::string GetDefaultLocale()
void PerformMicrotaskCheckpoint()
void SetPrepareStackTraceCallback(PrepareStackTraceCallback callback)
void LowMemoryNotification()
Priority
Definition: v8-isolate.h:681
Isolate(const Isolate &)=delete
void SetCounterFunction(CounterLookupCallback)
MicrotasksPolicy GetMicrotasksPolicy() const
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:670
bool(*)(Isolate *) AbortOnUncaughtExceptionCallback
Definition: v8-isolate.h:782
void AddMicrotasksCompletedCallback(MicrotasksCompletedCallbackWithData callback, void *data=nullptr)
void TerminateExecution()
void SetHostInitializeImportMetaObjectCallback(HostInitializeImportMetaObjectCallback callback)
void SetUseCounterCallback(UseCounterCallback callback)
void SetMetricsRecorder(const std::shared_ptr< metrics::Recorder > &metrics_recorder)
void MemoryPressureNotification(MemoryPressureLevel level)
void EnqueueMicrotask(MicrotaskCallback callback, void *data=nullptr)
void SetAddHistogramSampleFunction(AddHistogramSampleCallback)
IsolateGroup GetGroup() const
void SetGetExternallyAllocatedMemoryInBytesCallback(GetExternallyAllocatedMemoryInBytesCallback callback)
void Enter()
UseCounterFeature
Definition: v8-isolate.h:477
bool IsExecutionTerminating()
void SetReleaseCppHeapCallbackForTesting(ReleaseCppHeapCallback callback)
~Isolate()=delete
void RemoveGCPrologueCallback(GCCallbackWithData, void *data=nullptr)
void SetAbortOnUncaughtExceptionCallback(AbortOnUncaughtExceptionCallback callback)
void ClearCachesForTesting()
void SetHostImportModuleWithPhaseDynamicallyCallback(HostImportModuleWithPhaseDynamicallyCallback callback)
void SetCreateHistogramFunction(CreateHistogramCallback)
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:40
Definition: v8-util.h:166
Definition: v8-isolate.h:65
void set_code_range_size_in_bytes(size_t limit)
Definition: v8-isolate.h:116
size_t max_old_generation_size_in_bytes() const
Definition: v8-isolate.h:125
void set_stack_limit(uint32_t *value)
Definition: v8-isolate.h:104
void set_initial_old_generation_size_in_bytes(size_t initial_size)
Definition: v8-isolate.h:147
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:103
size_t code_range_size_in_bytes() const
Definition: v8-isolate.h:115
void set_initial_young_generation_size_in_bytes(size_t initial_size)
Definition: v8-isolate.h:154
size_t initial_young_generation_size_in_bytes() const
Definition: v8-isolate.h:151
size_t max_young_generation_size_in_bytes() const
Definition: v8-isolate.h:137
void set_max_young_generation_size_in_bytes(size_t limit)
Definition: v8-isolate.h:140
size_t initial_old_generation_size_in_bytes() const
Definition: v8-isolate.h:144
uint64_t physical_memory_size_in_bytes() const
Definition: v8-isolate.h:158
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:128
Definition: v8-debug.h:117
Definition: v8-snapshot.h:21
Definition: v8-value.h:32
Definition: v8-platform.h:778
Definition: v8-internal.h:878
internal::Address * InternalRepresentationType
Definition: v8-internal.h:1677
Definition: v8-metrics.h:180
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:14
GCCallbackFlags
Definition: v8-callbacks.h:179
bool(*)(Local< Context > context) WasmCustomDescriptorsEnabledCallback
Definition: v8-callbacks.h:339
MicrotasksPolicy
Definition: v8-microtask.h:24
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:13
ContextDependants
Definition: v8-isolate.h:187
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:445
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:181
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:467
Definition: v8-isolate.h:296
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:855
#define V8_INLINE
Definition: v8config.h:508
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:622
#define V8_DEPRECATED(message)
Definition: v8config.h:614
#define ALLOW_COPY_AND_MOVE_WITH_DEPRECATED_FIELDS(ClassName)
Definition: v8config.h:645
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:679
#define V8_NODISCARD
Definition: v8config.h:701