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
207
233 public:
241
246 static bool CanCreateNewGroups();
247
253
256
259
261
262 bool operator==(const IsolateGroup& other) const {
263 return isolate_group_ == other.isolate_group_;
264 }
265
266 bool operator!=(const IsolateGroup& other) const {
267 return !operator==(other);
268 }
269
270#ifdef V8_ENABLE_SANDBOX
275 bool SandboxContains(void* pointer) const;
276 VirtualAddressSpace* GetSandboxAddressSpace();
277
282 void SetInSandboxAllocator(std::shared_ptr<Allocator> allocator);
283#else
284 V8_INLINE bool SandboxContains(void* pointer) const { return true; }
285#endif
286
287 private:
288 friend class Isolate;
290
291 // The isolate_group pointer should be already acquired.
292 explicit IsolateGroup(internal::IsolateGroup*&& isolate_group);
293
294 internal::IsolateGroup* isolate_group_;
295};
296
306 public:
313
315
316
320 JitCodeEventHandler code_event_handler = nullptr;
321
326
331 const StartupData* snapshot_blob = nullptr;
332
337 CounterLookupCallback counter_lookup_callback = nullptr;
338
345 CreateHistogramCallback create_histogram_callback = nullptr;
346 AddHistogramSampleCallback add_histogram_sample_callback = nullptr;
347
357 ArrayBuffer::Allocator* array_buffer_allocator = nullptr;
358 std::shared_ptr<ArrayBuffer::Allocator> array_buffer_allocator_shared;
359
366 const intptr_t* external_references = nullptr;
367
372 bool allow_atomics_wait = true;
373
377 FatalErrorCallback fatal_error_callback = nullptr;
378 OOMErrorCallback oom_error_callback = nullptr;
379
384 CppHeap* cpp_heap = nullptr;
385 };
386
392 public:
393 explicit Scope(Isolate* isolate) : v8_isolate_(isolate) {
394 v8_isolate_->Enter();
395 }
396
397 ~Scope() { v8_isolate_->Exit(); }
398
399 // Prevent copying of Scope objects.
400 Scope(const Scope&) = delete;
401 Scope& operator=(const Scope&) = delete;
402
403 private:
404 Isolate* const v8_isolate_;
405 };
406
411 public:
412 enum OnFailure { CRASH_ON_FAILURE, THROW_ON_FAILURE, DUMP_ON_FAILURE };
413
416
417 // Prevent copying of Scope objects.
419 delete;
421 const DisallowJavascriptExecutionScope&) = delete;
422
423 private:
424 v8::Isolate* const v8_isolate_;
425 const OnFailure on_failure_;
426 bool was_execution_allowed_;
427 };
428
433 public:
436
437 // Prevent copying of Scope objects.
439 delete;
441 const AllowJavascriptExecutionScope&) = delete;
442
443 private:
444 Isolate* const v8_isolate_;
445 bool was_execution_allowed_assert_;
446 bool was_execution_allowed_throws_;
447 bool was_execution_allowed_dump_;
448 };
449
456
457 public:
459 Isolate* isolate, MicrotaskQueue* microtask_queue = nullptr);
461
462 // Prevent copying of Scope objects.
464 delete;
466 const SuppressMicrotaskExecutionScope&) = delete;
467
468 private:
469 internal::Isolate* const i_isolate_;
470 internal::MicrotaskQueue* const microtask_queue_;
471 internal::Address previous_stack_height_;
472
473 friend class internal::ThreadLocalTop;
474 };
475
482 kMinorGarbageCollection
483 };
484
494 kUseAsm = 0,
495 kBreakIterator = 1,
496 kOBSOLETE_LegacyConst = 2,
497 kOBSOLETE_MarkDequeOverflow = 3,
498 kOBSOLETE_StoreBufferOverflow = 4,
499 kOBSOLETE_SlotsBufferOverflow = 5,
500 kOBSOLETE_ObjectObserve = 6,
501 kForcedGC = 7,
502 kSloppyMode = 8,
503 kStrictMode = 9,
504 kOBSOLETE_StrongMode = 10,
505 kRegExpPrototypeStickyGetter = 11,
506 kRegExpPrototypeToString = 12,
507 kRegExpPrototypeUnicodeGetter = 13,
508 kOBSOLETE_IntlV8Parse = 14,
509 kOBSOLETE_IntlPattern = 15,
510 kOBSOLETE_IntlResolved = 16,
511 kOBSOLETE_PromiseChain = 17,
512 kOBSOLETE_PromiseAccept = 18,
513 kOBSOLETE_PromiseDefer = 19,
514 kHtmlCommentInExternalScript = 20,
515 kHtmlComment = 21,
516 kSloppyModeBlockScopedFunctionRedefinition = 22,
517 kForInInitializer = 23,
518 kOBSOLETE_ArrayProtectorDirtied = 24,
519 kArraySpeciesModified = 25,
520 kArrayPrototypeConstructorModified = 26,
521 kOBSOLETE_ArrayInstanceProtoModified = 27,
522 kArrayInstanceConstructorModified = 28,
523 kOBSOLETE_LegacyFunctionDeclaration = 29,
524 kOBSOLETE_RegExpPrototypeSourceGetter = 30,
525 kOBSOLETE_RegExpPrototypeOldFlagGetter = 31,
526 kDecimalWithLeadingZeroInStrictMode = 32,
527 kLegacyDateParser = 33,
528 kDefineGetterOrSetterWouldThrow = 34,
529 kFunctionConstructorReturnedUndefined = 35,
530 kAssigmentExpressionLHSIsCallInSloppy = 36,
531 kAssigmentExpressionLHSIsCallInStrict = 37,
532 kPromiseConstructorReturnedUndefined = 38,
533 kOBSOLETE_ConstructorNonUndefinedPrimitiveReturn = 39,
534 kOBSOLETE_LabeledExpressionStatement = 40,
535 kOBSOLETE_LineOrParagraphSeparatorAsLineTerminator = 41,
536 kIndexAccessor = 42,
537 kErrorCaptureStackTrace = 43,
538 kErrorPrepareStackTrace = 44,
539 kErrorStackTraceLimit = 45,
540 kWebAssemblyInstantiation = 46,
541 kDeoptimizerDisableSpeculation = 47,
542 kOBSOLETE_ArrayPrototypeSortJSArrayModifiedPrototype = 48,
543 kFunctionTokenOffsetTooLongForToString = 49,
544 kWasmSharedMemory = 50,
545 kWasmThreadOpcodes = 51,
546 kOBSOLETE_AtomicsNotify = 52,
547 kOBSOLETE_AtomicsWake = 53,
548 kCollator = 54,
549 kNumberFormat = 55,
550 kDateTimeFormat = 56,
551 kPluralRules = 57,
552 kRelativeTimeFormat = 58,
553 kLocale = 59,
554 kListFormat = 60,
555 kSegmenter = 61,
556 kStringLocaleCompare = 62,
557 kOBSOLETE_StringToLocaleUpperCase = 63,
558 kStringToLocaleLowerCase = 64,
559 kNumberToLocaleString = 65,
560 kDateToLocaleString = 66,
561 kDateToLocaleDateString = 67,
562 kDateToLocaleTimeString = 68,
563 kAttemptOverrideReadOnlyOnPrototypeSloppy = 69,
564 kAttemptOverrideReadOnlyOnPrototypeStrict = 70,
565 kOBSOLETE_OptimizedFunctionWithOneShotBytecode = 71,
566 kRegExpMatchIsTrueishOnNonJSRegExp = 72,
567 kRegExpMatchIsFalseishOnJSRegExp = 73,
568 kOBSOLETE_DateGetTimezoneOffset = 74,
569 kStringNormalize = 75,
570 kCallSiteAPIGetFunctionSloppyCall = 76,
571 kCallSiteAPIGetThisSloppyCall = 77,
572 kOBSOLETE_RegExpMatchAllWithNonGlobalRegExp = 78,
573 kRegExpExecCalledOnSlowRegExp = 79,
574 kRegExpReplaceCalledOnSlowRegExp = 80,
575 kDisplayNames = 81,
576 kSharedArrayBufferConstructed = 82,
577 kArrayPrototypeHasElements = 83,
578 kObjectPrototypeHasElements = 84,
579 kNumberFormatStyleUnit = 85,
580 kDateTimeFormatRange = 86,
581 kDateTimeFormatDateTimeStyle = 87,
582 kBreakIteratorTypeWord = 88,
583 kBreakIteratorTypeLine = 89,
584 kInvalidatedArrayBufferDetachingProtector = 90,
585 kInvalidatedArrayConstructorProtector V8_DEPRECATE_SOON(
586 "The ArrayConstructorProtector has been removed") = 91,
587 kInvalidatedArrayIteratorLookupChainProtector = 92,
588 kInvalidatedArraySpeciesLookupChainProtector = 93,
589 kInvalidatedIsConcatSpreadableLookupChainProtector = 94,
590 kInvalidatedMapIteratorLookupChainProtector = 95,
591 kInvalidatedNoElementsProtector = 96,
592 kInvalidatedPromiseHookProtector = 97,
593 kInvalidatedPromiseResolveLookupChainProtector = 98,
594 kInvalidatedPromiseSpeciesLookupChainProtector = 99,
595 kInvalidatedPromiseThenLookupChainProtector = 100,
596 kInvalidatedRegExpSpeciesLookupChainProtector = 101,
597 kInvalidatedSetIteratorLookupChainProtector = 102,
598 kInvalidatedStringIteratorLookupChainProtector = 103,
599 kInvalidatedStringLengthOverflowLookupChainProtector = 104,
600 kInvalidatedTypedArraySpeciesLookupChainProtector = 105,
601 kWasmSimdOpcodes = 106,
602 kVarRedeclaredCatchBinding = 107,
603 kWasmRefTypes = 108,
604 kWasmBulkMemory = 109,
605 kWasmMultiValue = 110,
606 kWasmExceptionHandling = 111,
607 kInvalidatedMegaDOMProtector = 112,
608 kFunctionPrototypeArguments = 113,
609 kFunctionPrototypeCaller = 114,
610 kTurboFanOsrCompileStarted = 115,
611 kAsyncStackTaggingCreateTaskCall = 116,
612 kDurationFormat = 117,
613 kInvalidatedNumberStringNotRegexpLikeProtector = 118,
614 kOBSOLETE_RegExpUnicodeSetIncompatibilitiesWithUnicodeMode = 119,
615 kOBSOLETE_ImportAssertionDeprecatedSyntax = 120,
616 kLocaleInfoObsoletedGetters = 121,
617 kLocaleInfoFunctions = 122,
618 kCompileHintsMagicAll = 123,
619 kInvalidatedNoProfilingProtector = 124,
620 kWasmMemory64 = 125,
621 kWasmMultiMemory = 126,
622 kWasmGC = 127,
623 kWasmImportedStrings = 128,
624 kSourceMappingUrlMagicCommentAtSign = 129,
625 kTemporalObject = 130,
626 kWasmModuleCompilation = 131,
627 kInvalidatedNoUndetectableObjectsProtector = 132,
628 kWasmJavaScriptPromiseIntegration = 133,
629 kWasmReturnCall = 134,
630 kWasmExtendedConst = 135,
631 kWasmRelaxedSimd = 136,
632 kWasmTypeReflection = 137,
633 kWasmExnRef = 138,
634 kWasmTypedFuncRef = 139,
635 kInvalidatedStringWrapperToPrimitiveProtector = 140,
636 kDocumentAllLegacyCall = 141,
637 kDocumentAllLegacyConstruct = 142,
638 kConsoleContext = 143,
639 kWasmImportedStringsUtf8 = 144,
640 kResizableArrayBuffer = 145,
641 kGrowableSharedArrayBuffer = 146,
642 kArrayByCopy = 147,
643 kArrayFromAsync = 148,
644 kIteratorMethods = 149,
645 kPromiseAny = 150,
646 kSetMethods = 151,
647 kArrayFindLast = 152,
648 kArrayGroup = 153,
649 kArrayBufferTransfer = 154,
650 kPromiseWithResolvers = 155,
651 kAtomicsWaitAsync = 156,
652 kExtendingNonExtensibleWithPrivate = 157,
653 kPromiseTry = 158,
654 kStringReplaceAll = 159,
655 kStringWellFormed = 160,
656 kWeakReferences = 161,
657 kErrorIsError = 162,
658 kInvalidatedTypedArrayLengthLookupChainProtector = 163,
659 kRegExpEscape = 164,
660 kFloat16Array = 165,
661 kExplicitResourceManagement = 166,
662 kWasmBranchHinting = 167,
663 kWasmMutableGlobals = 168,
664 kUint8ArrayToFromBase64AndHex = 169,
665 kAtomicsPause = 170,
666 kTopLevelAwait = 171,
667 kLogicalAssignment = 172,
668 kNullishCoalescing = 173,
669 kInvalidatedNoDateTimeConfigurationChangeProtector = 174,
670 kWasmNonTrappingFloatToInt = 175,
671 kWasmSignExtensionOps = 176,
672 kRegExpCompile = 177,
673 kRegExpStaticProperties = 178,
674 kRegExpStaticPropertiesWithLastMatch = 179,
675 kWithStatement = 180,
676 kHtmlWrapperMethods = 181,
677 kWasmCustomDescriptors = 182,
678 kOBSOLETE_WasmResizableBuffers = 183,
679 kInvalidatedArrayBufferMutableProtector = 184,
680 kHoleyArrayReadthrough = 185,
681 kWasmGCAllocation = 186,
682 kModuleNamespaceMissingDefaultWithStarExport = 187,
683 kRegExpMatcherFlagsMismatch = 188,
684 kRegExpCustomSpecies = 189,
685 kWasmWideArithmetic = 190,
686 kBigInt = 191,
687
688 // If you add new values here, you'll also need to update Chromium's:
689 // web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to
690 // this list need to be landed first, then changes on the Chromium side.
691 kUseCounterFeatureCount // This enum value must be last.
692 };
693
695 kMessageLog = (1 << 0),
696 kMessageDebug = (1 << 1),
697 kMessageInfo = (1 << 2),
698 kMessageError = (1 << 3),
699 kMessageWarning = (1 << 4),
700 kMessageAll = kMessageLog | kMessageDebug | kMessageInfo | kMessageError |
701 kMessageWarning,
702 };
703
704 // The different priorities that an isolate can have.
705 enum class Priority {
706 // The isolate does not relate to content that is currently important
707 // to the user. Lowest priority.
709
710 // The isolate contributes to content that is visible to the user, like a
711 // visible iframe that's not interacted directly with. High priority.
713
714 // The isolate contributes to content that is of the utmost importance to
715 // the user, like visible content in the focused window. Highest priority.
717 };
718
719 using UseCounterCallback = void (*)(Isolate* isolate,
720 UseCounterFeature feature);
721
736 static Isolate* Allocate();
737 static Isolate* Allocate(const IsolateGroup& group);
738
743
747 static void Initialize(Isolate* isolate, const CreateParams& params);
748
758 static Isolate* New(const CreateParams& params);
759 static Isolate* New(const IsolateGroup& group, const CreateParams& params);
760
768
776
780 bool IsCurrent() const;
781
796
809
816
828
835
842
850
856
862
867
868#if defined(V8_OS_WIN)
872 V8_DEPRECATE_SOON("Use SetFilterETWSessionByURL2Callback instead")
873 void SetFilterETWSessionByURLCallback(FilterETWSessionByURLCallback callback);
874 void SetFilterETWSessionByURL2Callback(
875 FilterETWSessionByURL2Callback callback);
876#endif // V8_OS_WIN
877
885
890 bool RetryCustomAllocate(std::function<bool()> allocate);
891
898 void SetBatterySaverMode(bool battery_saver_mode_enabled);
899
906 void SetMemorySaverMode(bool memory_saver_mode_enabled);
907
914
925 void Enter();
926
934 void Exit();
935
940 void Dispose();
941
948
955 static void Free(Isolate* isolate);
956
962
971
976 V8_INLINE void SetData(uint32_t slot, void* data);
977
982 V8_INLINE void* GetData(uint32_t slot);
983
988 V8_INLINE static uint32_t GetNumberOfDataSlots();
989
995 template <class T>
996 V8_INLINE MaybeLocal<T> GetDataFromSnapshotOnce(size_t index);
997
1005
1012
1019 V8_DEPRECATE_SOON("Use GetContinuationPreservedEmbedderData instead")
1020 Local<Data> GetContinuationPreservedEmbedderDataV2();
1021
1027 V8_DEPRECATE_SOON("Use SetContinuationPreservedEmbedderData instead")
1028 void SetContinuationPreservedEmbedderDataV2(Local<Data> data);
1029
1033 void GetHeapStatistics(HeapStatistics* heap_statistics);
1034
1038 size_t NumberOfHeapSpaces();
1039
1049 bool GetHeapSpaceStatistics(HeapSpaceStatistics* space_statistics,
1050 size_t index);
1051
1055 size_t NumberOfTrackedHeapObjectTypes();
1056
1066 bool GetHeapObjectStatisticsAtLastGC(HeapObjectStatistics* object_statistics,
1067 size_t type_index);
1068
1076 bool GetHeapCodeAndMetadataStatistics(HeapCodeStatistics* object_statistics);
1077
1090 bool MeasureMemory(
1091 std::unique_ptr<MeasureMemoryDelegate> delegate,
1092 MeasureMemoryExecution execution = MeasureMemoryExecution::kDefault);
1093
1106 void GetStackSample(const RegisterState& state, void** frames,
1107 size_t frames_limit, SampleInfo* sample_info);
1108
1117 int64_t AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes);
1118
1123 HeapProfiler* GetHeapProfiler();
1124
1128 void SetIdle(bool is_idle);
1129
1131 ArrayBuffer::Allocator* GetArrayBufferAllocator();
1132
1134 bool InContext();
1135
1140 Local<Context> GetCurrentContext();
1141
1148 Local<Context> GetEnteredOrMicrotaskContext();
1149
1154 Local<Context> GetIncumbentContext();
1155
1160 MaybeLocal<Data> GetCurrentHostDefinedOptions();
1161
1167 template <int N>
1168 Local<Value> ThrowError(const char (&message)[N]) {
1169 return ThrowError(String::NewFromUtf8Literal(this, message));
1170 }
1172
1180
1188
1189 using GCCallback = void (*)(Isolate* isolate, GCType type,
1190 GCCallbackFlags flags);
1191 using GCCallbackWithData = void (*)(Isolate* isolate, GCType type,
1192 GCCallbackFlags flags, void* data);
1193
1205 GCType gc_type_filter = kGCTypeAll);
1206
1212 void AddGCPrologueCallback(GCCallbackWithData callback, void* data = nullptr,
1213 GCType gc_type_filter = kGCTypeAll);
1214
1222
1229
1237 GCType gc_type_filter = kGCTypeAll);
1238
1244 void AddGCEpilogueCallback(GCCallbackWithData callback, void* data = nullptr,
1245 GCType gc_type_filter = kGCTypeAll);
1246
1254
1261 void* data = nullptr);
1262
1271
1272 using ReleaseCppHeapCallback = void (*)(std::unique_ptr<CppHeap>);
1273
1280
1285
1287
1296
1305
1315
1331
1340 void RequestInterrupt(InterruptCallback callback, void* data);
1341
1348
1359
1371 StackState stack_state);
1372
1377
1385
1390
1399
1404
1410
1416
1425
1433
1437 V8_DEPRECATE_SOON("Use *MicrotaskQueue::EnqueueMicrotask* instead")
1438 void EnqueueMicrotask(Local<Function> microtask);
1439
1443 V8_DEPRECATE_SOON("Use *MicrotaskQueue::EnqueueMicrotask* instead")
1444 void EnqueueMicrotask(MicrotaskCallback callback, void* data = nullptr);
1445
1449 void SetMicrotasksPolicy(MicrotasksPolicy policy);
1450
1454 MicrotasksPolicy GetMicrotasksPolicy() const;
1455
1469 void AddMicrotasksCompletedCallback(
1470 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1471
1475 void RemoveMicrotasksCompletedCallback(
1476 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1477
1481 void SetUseCounterCallback(UseCounterCallback callback);
1482
1487 void SetCounterFunction(CounterLookupCallback);
1488
1495 void SetCreateHistogramFunction(CreateHistogramCallback);
1496 void SetAddHistogramSampleFunction(AddHistogramSampleCallback);
1497
1507 void SetMetricsRecorder(
1508 const std::shared_ptr<metrics::Recorder>& metrics_recorder);
1509
1515 void SetAddCrashKeyCallback(AddCrashKeyCallback);
1516
1521 void SetCrashKeyStringCallbacks(AllocateCrashKeyStringCallback,
1523
1528 void LowMemoryNotification();
1529
1539 V8_DEPRECATED("Use version that passes ContextDependants.")
1540 int ContextDisposedNotification(bool dependant_context = true);
1541
1549 void ContextDisposedNotification(ContextDependants dependants);
1550
1555 V8_DEPRECATE_SOON("Use SetPriority(Priority::kUserBlocking) instead")
1556 void IsolateInForegroundNotification();
1557
1562 V8_DEPRECATE_SOON("Use SetPriority(Priority::kBestEffort) instead")
1563 void IsolateInBackgroundNotification();
1564
1569 void SetPriority(Priority priority);
1570
1583 void SetIsLoading(bool is_loading);
1584
1596 void SetIsInputHandling(bool is_input_handling);
1597
1604 void Freeze(bool is_frozen);
1605
1610 void IncreaseHeapLimitForDebugging();
1611
1615 void RestoreOriginalHeapLimit();
1616
1621 bool IsHeapLimitIncreasedForDebugging();
1622
1645 void SetJitCodeEventHandler(JitCodeEventOptions options,
1646 JitCodeEventHandler event_handler);
1647
1657 void SetStackLimit(uintptr_t stack_limit);
1658
1674 void GetCodeRange(void** start, size_t* length_in_bytes);
1675
1680 void GetEmbeddedCodeRange(const void** start, size_t* length_in_bytes);
1681
1685 JSEntryStubs GetJSEntryStubs();
1686
1687 static constexpr size_t kMinCodePagesBufferSize = 32;
1688
1702 size_t CopyCodePages(size_t capacity, MemoryRange* code_pages_out);
1703
1705 void SetFatalErrorHandler(FatalErrorCallback that);
1706
1708 void SetOOMErrorHandler(OOMErrorCallback that);
1709
1715 void SetOOMErrorHandler(OOMErrorCallbackWithData that, void* data);
1716
1722 void AddNearHeapLimitCallback(NearHeapLimitCallback callback, void* data);
1723
1731 void RemoveNearHeapLimitCallback(NearHeapLimitCallback callback,
1732 size_t heap_limit);
1733
1740 void AutomaticallyRestoreInitialHeapLimit(double threshold_percent = 0.5);
1741
1746 void SetModifyCodeGenerationFromStringsCallback(
1748
1754 void SetDynamicScriptCompiledFromEmbedderCallback(
1756
1761 void SetAllowWasmCodeGenerationCallback(
1763
1768 void SetWasmModuleCallback(WasmModuleCallback callback);
1769 V8_DEPRECATE_SOON("Use the WasmModuleCallback overload instead")
1770 void SetWasmModuleCallback(ExtensionCallback callback);
1771 void SetWasmInstanceCallback(WasmInstanceCallback callback);
1772 V8_DEPRECATE_SOON("Use the WasmInstanceCallback overload instead")
1773 void SetWasmInstanceCallback(ExtensionCallback callback);
1774
1775 void SetWasmStreamingCallback(WasmStreamingCallback callback);
1776
1777 void SetWasmAsyncResolvePromiseCallback(
1779
1780 void SetWasmLoadSourceMapCallback(WasmLoadSourceMapCallback callback);
1781
1782 void SetWasmCustomDescriptorsEnabledCallback(
1784
1785 void SetSharedArrayBufferConstructorEnabledCallback(
1787
1793 void InstallConditionalFeatures(Local<Context> context);
1794
1799 bool IsDead();
1800
1810 bool AddMessageListener(MessageCallback callback,
1811 Local<Value> data = Local<Value>());
1812
1824 bool AddMessageListenerWithErrorLevel(MessageCallback callback,
1825 int message_levels,
1826 Local<Value> data = Local<Value>());
1827
1831 void RemoveMessageListeners(MessageCallback callback);
1832
1834 void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback);
1835
1840 void SetCaptureStackTraceForUncaughtExceptions(
1841 bool capture, int frame_limit = 10,
1842 StackTrace::StackTraceOptions options = StackTrace::kOverview);
1843
1848 bool IsInUse();
1849
1855 void SetAllowAtomicsWait(bool allow);
1856
1870 enum class TimeZoneDetection { kSkip, kRedetect };
1871
1883 TimeZoneDetection time_zone_detection = TimeZoneDetection::kSkip);
1884
1895
1900 std::string GetDefaultLocale();
1901
1916
1920 uint64_t GetHashSeed();
1921
1922 Isolate() = delete;
1923 ~Isolate() = delete;
1924 Isolate(const Isolate&) = delete;
1925 Isolate& operator=(const Isolate&) = delete;
1926 // Deleting operator new and delete here is allowed as ctor and dtor is also
1927 // deleted.
1928 void* operator new(size_t size) = delete;
1929 void* operator new[](size_t size) = delete;
1930 void operator delete(void*, size_t) = delete;
1931 void operator delete[](void*, size_t) = delete;
1932
1933 private:
1934 template <class K, class V, class Traits>
1937
1939 size_t index);
1940 int64_t AdjustAmountOfExternalAllocatedMemoryImpl(int64_t change_in_bytes);
1941};
1942
1943void Isolate::SetData(uint32_t slot, void* data) {
1944 using I = internal::Internals;
1945 I::SetEmbedderData(this, slot, data);
1946}
1947
1948void* Isolate::GetData(uint32_t slot) {
1949 using I = internal::Internals;
1950 return I::GetEmbedderData(this, slot);
1951}
1952
1953uint32_t Isolate::GetNumberOfDataSlots() {
1954 using I = internal::Internals;
1955 return I::kNumIsolateDataSlots;
1956}
1957
1958template <class T>
1959MaybeLocal<T> Isolate::GetDataFromSnapshotOnce(size_t index) {
1960 if (auto repr = GetDataFromSnapshotOnce(index);
1961 repr != internal::ValueHelper::kEmpty) {
1962 internal::PerformCastCheck(internal::ValueHelper::ReprAsValue<T>(repr));
1963 return Local<T>::FromRepr(repr);
1964 }
1965 return {};
1966}
1967
1968} // namespace v8
1969
1970#endif // INCLUDE_V8_ISOLATE_H_
Definition: common.h:36
Definition: v8-platform.h:787
Definition: v8-array-buffer.h:261
Definition: v8-array-buffer.h:244
Definition: v8-context.h:55
Definition: v8-cppgc.h:77
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:1072
Definition: v8-statistics.h:191
Definition: v8-statistics.h:140
Definition: v8-isolate.h:232
static IsolateGroup Create()
static IsolateGroup GetDefault()
bool operator!=(const IsolateGroup &other) const
Definition: v8-isolate.h:266
bool SandboxContains(void *pointer) const
Definition: v8-isolate.h:284
IsolateGroup & operator=(const IsolateGroup &)
IsolateGroup(IsolateGroup &&other)
IsolateGroup(const IsolateGroup &)
bool operator==(const IsolateGroup &other) const
Definition: v8-isolate.h:262
static bool CanCreateNewGroups()
IsolateGroup & operator=(IsolateGroup &&other)
Definition: v8-isolate.h:432
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:412
Definition: v8-isolate.h:391
Scope(Isolate *isolate)
Definition: v8-isolate.h:393
Scope(const Scope &)=delete
~Scope()
Definition: v8-isolate.h:397
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:305
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:1272
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:1286
static Isolate * New(const CreateParams &params)
Isolate()=delete
void SetContinuationPreservedEmbedderData(Local< Data > data)
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:1870
void RequestGarbageCollectionForTesting(GarbageCollectionType type)
void SetMemorySaverMode(bool memory_saver_mode_enabled)
GarbageCollectionType
Definition: v8-isolate.h:480
@ kFullGarbageCollection
Definition: v8-isolate.h:481
void DumpAndResetStats()
void SetHostImportModuleDynamicallyCallback(HostImportModuleDynamicallyCallback callback)
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags) GCCallback
Definition: v8-isolate.h:1190
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:720
void CancelTerminateExecution()
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags, void *data) GCCallbackWithData
Definition: v8-isolate.h:1192
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)
Local< Data > GetContinuationPreservedEmbedderData()
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 SetArrayBufferDetachCallback(ArrayBufferDetachCallback callback)
void SetPrepareStackTraceCallback(PrepareStackTraceCallback callback)
Priority
Definition: v8-isolate.h:705
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:694
bool(*)(Isolate *) AbortOnUncaughtExceptionCallback
Definition: v8-isolate.h:806
void TerminateExecution()
void SetHostInitializeImportMetaObjectCallback(HostInitializeImportMetaObjectCallback callback)
void MemoryPressureNotification(MemoryPressureLevel level)
IsolateGroup GetGroup() const
void SetGetExternallyAllocatedMemoryInBytesCallback(GetExternallyAllocatedMemoryInBytesCallback callback)
void Enter()
UseCounterFeature
Definition: v8-isolate.h:493
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:359
Definition: v8-local-handle.h:730
Definition: v8-maybe.h:39
Definition: v8-statistics.h:55
Definition: v8-microtask-queue.h:44
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:125
Definition: v8-snapshot.h:21
Definition: v8-value.h:32
Definition: v8-platform.h:903
Definition: v8-internal.h:979
internal::Address * InternalRepresentationType
Definition: v8-internal.h:1796
Definition: v8-metrics.h:183
#define CPPGC_STACK_ALLOCATED()
Definition: macros.h:44
EmbedderStackState
Definition: common.h:20
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
void(*)(const JitCodeEvent *event) JitCodeEventHandler
Definition: v8-callbacks.h:143
JitCodeEventOptions
Definition: v8-callbacks.h:130
void(*)(const char *location, const OOMDetails &details) OOMErrorCallback
Definition: v8-callbacks.h:235
bool(*)(Local< Context > context) SharedArrayBufferConstructorEnabledCallback
Definition: v8-callbacks.h:346
void(*)(void *data) MicrotaskCallback
Definition: v8-microtask.h:17
GCCallbackFlags
Definition: v8-callbacks.h:180
bool(*)(Local< Context > context) WasmCustomDescriptorsEnabledCallback
Definition: v8-callbacks.h:342
void(*)(Isolate *isolate, Local< ArrayBuffer > buffer) ArrayBufferDetachCallback
Definition: v8-callbacks.h:481
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:335
bool(*)(Isolate *isolate, Local< Value > source) WasmInstanceCallback
Definition: v8-callbacks.h:318
bool(*)(const FunctionCallbackInfo< Value > &) ExtensionCallback
Definition: v8-callbacks.h:316
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
bool(*)(Isolate *isolate, Local< Value > source) WasmModuleCallback
Definition: v8-callbacks.h:317
void(*)(ExceptionPropagationMessage message) ExceptionPropagationCallback
Definition: v8-exception.h:133
void(*)(const FunctionCallbackInfo< Value > &) WasmStreamingCallback
Definition: v8-callbacks.h:328
void *(*)(const char *name, int min, int max, size_t buckets) CreateHistogramCallback
Definition: v8-callbacks.h:221
void(*)(Local< Context > context, Local< Module > module, Local< Object > meta) HostInitializeImportMetaObjectCallback
Definition: v8-callbacks.h:452
void(*)(Local< Message > message, Local< Value > data) MessageCallback
Definition: v8-callbacks.h:241
void(*)(const char *location, const OOMDetails &details, void *data) OOMErrorCallbackWithData
Definition: v8-callbacks.h:239
void(*)(CrashKeyId id, const std::string &value) AddCrashKeyCallback
Definition: v8-callbacks.h:262
void(*)(Isolate *isolate, void *data) InterruptCallback
Definition: v8-callbacks.h:193
void(*)(Isolate *) CallCompletedCallback
Definition: v8-callbacks.h:275
void(*)(void *histogram, int sample) AddHistogramSampleCallback
Definition: v8-callbacks.h:223
size_t(*)(void *data, size_t current_heap_limit, size_t initial_heap_limit) NearHeapLimitCallback
Definition: v8-callbacks.h:206
void(*)(Isolate *) BeforeCallEnteredCallback
Definition: v8-callbacks.h:274
bool(*)(Local< Context > context, Local< String > source) AllowWasmCodeGenerationCallback
Definition: v8-callbacks.h:321
void(*)(const char *location, const char *message) FatalErrorCallback
Definition: v8-callbacks.h:227
void(*)(PromiseRejectMessage message) PromiseRejectCallback
Definition: v8-promise.h:181
GCType
Definition: v8-callbacks.h:155
std::function< void(CrashKey key, const std::string_view value)> SetCrashKeyStringCallback
Definition: v8-callbacks.h:271
void(*)(Local< Context > context, int script_id) DynamicScriptCompiledFromEmbedderCallback
Definition: v8-callbacks.h:500
ModifyCodeGenerationFromStringsResult(*)(Local< Context > context, Local< Value > source, bool is_code_like) ModifyCodeGenerationFromStringsCallback2
Definition: v8-callbacks.h:297
void(*)(Local< Object > target, AccessType type, Local< Value > data) FailedAccessCheckCallback
Definition: v8-callbacks.h:313
void(*)(const char *name, int status) LogEventCallback
Definition: v8-callbacks.h:247
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:269
int *(*)(const char *name) CounterLookupCallback
Definition: v8-callbacks.h:218
bool(*)(Isolate *isolate, Local< Object > obj) IsJSApiWrapperNativeErrorCallback
Definition: v8-callbacks.h:474
Definition: v8-isolate.h:310
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:874
#define V8_INLINE
Definition: v8config.h:518
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:631
#define V8_DEPRECATED(message)
Definition: v8config.h:623
#define ALLOW_COPY_AND_MOVE_WITH_DEPRECATED_FIELDS(ClassName)
Definition: v8config.h:654
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:688
#define V8_NODISCARD
Definition: v8config.h:710