v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
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 <memory>
12#include <string>
13#include <utility>
14
15#include "cppgc/common.h"
16#include "v8-array-buffer.h" // NOLINT(build/include_directory)
17#include "v8-callbacks.h" // NOLINT(build/include_directory)
18#include "v8-data.h" // NOLINT(build/include_directory)
19#include "v8-debug.h" // NOLINT(build/include_directory)
20#include "v8-embedder-heap.h" // NOLINT(build/include_directory)
21#include "v8-exception.h" // NOLINT(build/include_directory)
22#include "v8-function-callback.h" // NOLINT(build/include_directory)
23#include "v8-internal.h" // NOLINT(build/include_directory)
24#include "v8-local-handle.h" // NOLINT(build/include_directory)
25#include "v8-microtask.h" // NOLINT(build/include_directory)
26#include "v8-persistent-handle.h" // NOLINT(build/include_directory)
27#include "v8-primitive.h" // NOLINT(build/include_directory)
28#include "v8-statistics.h" // NOLINT(build/include_directory)
29#include "v8-unwinder.h" // NOLINT(build/include_directory)
30#include "v8config.h" // NOLINT(build/include_directory)
31
32namespace v8 {
33
34class CppHeap;
35class HeapProfiler;
36class MicrotaskQueue;
37class StartupData;
38class ScriptOrModule;
39class SharedArrayBuffer;
40
41namespace internal {
42class MicrotaskQueue;
43class ThreadLocalTop;
44} // namespace internal
45
46namespace metrics {
47class Recorder;
48} // namespace metrics
49
65 public:
84 void ConfigureDefaultsFromHeapSize(size_t initial_heap_size_in_bytes,
85 size_t maximum_heap_size_in_bytes);
86
96 void ConfigureDefaults(uint64_t physical_memory,
97 uint64_t virtual_memory_limit);
98
102 uint32_t* stack_limit() const { return stack_limit_; }
103 void set_stack_limit(uint32_t* value) { stack_limit_ = value; }
104
114 size_t code_range_size_in_bytes() const { return code_range_size_; }
115 void set_code_range_size_in_bytes(size_t limit) { code_range_size_ = limit; }
116
125 return max_old_generation_size_;
126 }
128 max_old_generation_size_ = limit;
129 }
130
137 return max_young_generation_size_;
138 }
140 max_young_generation_size_ = limit;
141 }
142
144 return initial_old_generation_size_;
145 }
147 initial_old_generation_size_ = initial_size;
148 }
149
151 return initial_young_generation_size_;
152 }
154 initial_young_generation_size_ = initial_size;
155 }
156
157 private:
158 static constexpr size_t kMB = 1048576u;
159 size_t code_range_size_ = 0;
160 size_t max_old_generation_size_ = 0;
161 size_t max_young_generation_size_ = 0;
162 size_t initial_old_generation_size_ = 0;
163 size_t initial_young_generation_size_ = 0;
164 uint32_t* stack_limit_ = nullptr;
165};
166
176
188
193
219 public:
226 static IsolateGroup GetDefault();
227
232 static bool CanCreateNewGroups();
233
238 static IsolateGroup Create();
239
240 IsolateGroup(IsolateGroup&& other);
241 IsolateGroup& operator=(IsolateGroup&& other);
242
244 IsolateGroup& operator=(const IsolateGroup&);
245
247
248 bool operator==(const IsolateGroup& other) const {
249 return isolate_group_ == other.isolate_group_;
250 }
251
252 bool operator!=(const IsolateGroup& other) const {
253 return !operator==(other);
254 }
255
256 private:
257 friend class Isolate;
259
260 // The isolate_group pointer should be already acquired.
261 explicit IsolateGroup(internal::IsolateGroup*&& isolate_group);
262
264};
265
275 public:
282
284
285
289 JitCodeEventHandler code_event_handler = nullptr;
290
295
300 const StartupData* snapshot_blob = nullptr;
301
306 CounterLookupCallback counter_lookup_callback = nullptr;
307
314 CreateHistogramCallback create_histogram_callback = nullptr;
315 AddHistogramSampleCallback add_histogram_sample_callback = nullptr;
316
326 ArrayBuffer::Allocator* array_buffer_allocator = nullptr;
327 std::shared_ptr<ArrayBuffer::Allocator> array_buffer_allocator_shared;
328
335 const intptr_t* external_references = nullptr;
336
341 bool allow_atomics_wait = true;
342
348 int embedder_wrapper_type_index = -1;
349 int embedder_wrapper_object_index = -1;
350
354 FatalErrorCallback fatal_error_callback = nullptr;
355 OOMErrorCallback oom_error_callback = nullptr;
356
361 CppHeap* cpp_heap = nullptr;
362 };
363
369 public:
370 explicit Scope(Isolate* isolate) : v8_isolate_(isolate) {
371 v8_isolate_->Enter();
372 }
373
374 ~Scope() { v8_isolate_->Exit(); }
375
376 // Prevent copying of Scope objects.
377 Scope(const Scope&) = delete;
378 Scope& operator=(const Scope&) = delete;
379
380 private:
382 };
383
388 public:
389 enum OnFailure { CRASH_ON_FAILURE, THROW_ON_FAILURE, DUMP_ON_FAILURE };
390
391 DisallowJavascriptExecutionScope(Isolate* isolate, OnFailure on_failure);
393
394 // Prevent copying of Scope objects.
396 delete;
398 const DisallowJavascriptExecutionScope&) = delete;
399
400 private:
404 };
405
426
450
457 kMinorGarbageCollection
458 };
459
469 kUseAsm = 0,
470 kBreakIterator = 1,
471 kOBSOLETE_LegacyConst = 2,
472 kOBSOLETE_MarkDequeOverflow = 3,
473 kOBSOLETE_StoreBufferOverflow = 4,
474 kOBSOLETE_SlotsBufferOverflow = 5,
475 kOBSOLETE_ObjectObserve = 6,
476 kForcedGC = 7,
477 kSloppyMode = 8,
478 kStrictMode = 9,
479 kOBSOLETE_StrongMode = 10,
480 kRegExpPrototypeStickyGetter = 11,
481 kRegExpPrototypeToString = 12,
482 kRegExpPrototypeUnicodeGetter = 13,
483 kOBSOLETE_IntlV8Parse = 14,
484 kOBSOLETE_IntlPattern = 15,
485 kOBSOLETE_IntlResolved = 16,
486 kOBSOLETE_PromiseChain = 17,
487 kOBSOLETE_PromiseAccept = 18,
488 kOBSOLETE_PromiseDefer = 19,
489 kHtmlCommentInExternalScript = 20,
490 kHtmlComment = 21,
491 kSloppyModeBlockScopedFunctionRedefinition = 22,
492 kForInInitializer = 23,
493 kOBSOLETE_ArrayProtectorDirtied = 24,
494 kArraySpeciesModified = 25,
495 kArrayPrototypeConstructorModified = 26,
496 kOBSOLETE_ArrayInstanceProtoModified = 27,
497 kArrayInstanceConstructorModified = 28,
498 kOBSOLETE_LegacyFunctionDeclaration = 29,
499 kOBSOLETE_RegExpPrototypeSourceGetter = 30,
500 kOBSOLETE_RegExpPrototypeOldFlagGetter = 31,
501 kDecimalWithLeadingZeroInStrictMode = 32,
502 kLegacyDateParser = 33,
503 kDefineGetterOrSetterWouldThrow = 34,
504 kFunctionConstructorReturnedUndefined = 35,
505 kAssigmentExpressionLHSIsCallInSloppy = 36,
506 kAssigmentExpressionLHSIsCallInStrict = 37,
507 kPromiseConstructorReturnedUndefined = 38,
508 kOBSOLETE_ConstructorNonUndefinedPrimitiveReturn = 39,
509 kOBSOLETE_LabeledExpressionStatement = 40,
510 kOBSOLETE_LineOrParagraphSeparatorAsLineTerminator = 41,
511 kIndexAccessor = 42,
512 kErrorCaptureStackTrace = 43,
513 kErrorPrepareStackTrace = 44,
514 kErrorStackTraceLimit = 45,
515 kWebAssemblyInstantiation = 46,
516 kDeoptimizerDisableSpeculation = 47,
517 kOBSOLETE_ArrayPrototypeSortJSArrayModifiedPrototype = 48,
518 kFunctionTokenOffsetTooLongForToString = 49,
519 kWasmSharedMemory = 50,
520 kWasmThreadOpcodes = 51,
521 kOBSOLETE_AtomicsNotify = 52,
522 kOBSOLETE_AtomicsWake = 53,
523 kCollator = 54,
524 kNumberFormat = 55,
525 kDateTimeFormat = 56,
526 kPluralRules = 57,
527 kRelativeTimeFormat = 58,
528 kLocale = 59,
529 kListFormat = 60,
530 kSegmenter = 61,
531 kStringLocaleCompare = 62,
532 kOBSOLETE_StringToLocaleUpperCase = 63,
533 kStringToLocaleLowerCase = 64,
534 kNumberToLocaleString = 65,
535 kDateToLocaleString = 66,
536 kDateToLocaleDateString = 67,
537 kDateToLocaleTimeString = 68,
538 kAttemptOverrideReadOnlyOnPrototypeSloppy = 69,
539 kAttemptOverrideReadOnlyOnPrototypeStrict = 70,
540 kOBSOLETE_OptimizedFunctionWithOneShotBytecode = 71,
541 kRegExpMatchIsTrueishOnNonJSRegExp = 72,
542 kRegExpMatchIsFalseishOnJSRegExp = 73,
543 kOBSOLETE_DateGetTimezoneOffset = 74,
544 kStringNormalize = 75,
545 kCallSiteAPIGetFunctionSloppyCall = 76,
546 kCallSiteAPIGetThisSloppyCall = 77,
547 kOBSOLETE_RegExpMatchAllWithNonGlobalRegExp = 78,
548 kRegExpExecCalledOnSlowRegExp = 79,
549 kRegExpReplaceCalledOnSlowRegExp = 80,
550 kDisplayNames = 81,
551 kSharedArrayBufferConstructed = 82,
552 kArrayPrototypeHasElements = 83,
553 kObjectPrototypeHasElements = 84,
554 kNumberFormatStyleUnit = 85,
555 kDateTimeFormatRange = 86,
556 kDateTimeFormatDateTimeStyle = 87,
557 kBreakIteratorTypeWord = 88,
558 kBreakIteratorTypeLine = 89,
559 kInvalidatedArrayBufferDetachingProtector = 90,
560 kInvalidatedArrayConstructorProtector = 91,
561 kInvalidatedArrayIteratorLookupChainProtector = 92,
562 kInvalidatedArraySpeciesLookupChainProtector = 93,
563 kInvalidatedIsConcatSpreadableLookupChainProtector = 94,
564 kInvalidatedMapIteratorLookupChainProtector = 95,
565 kInvalidatedNoElementsProtector = 96,
566 kInvalidatedPromiseHookProtector = 97,
567 kInvalidatedPromiseResolveLookupChainProtector = 98,
568 kInvalidatedPromiseSpeciesLookupChainProtector = 99,
569 kInvalidatedPromiseThenLookupChainProtector = 100,
570 kInvalidatedRegExpSpeciesLookupChainProtector = 101,
571 kInvalidatedSetIteratorLookupChainProtector = 102,
572 kInvalidatedStringIteratorLookupChainProtector = 103,
573 kInvalidatedStringLengthOverflowLookupChainProtector = 104,
574 kInvalidatedTypedArraySpeciesLookupChainProtector = 105,
575 kWasmSimdOpcodes = 106,
576 kVarRedeclaredCatchBinding = 107,
577 kWasmRefTypes = 108,
578 kOBSOLETE_WasmBulkMemory = 109,
579 kOBSOLETE_WasmMultiValue = 110,
580 kWasmExceptionHandling = 111,
581 kInvalidatedMegaDOMProtector = 112,
582 kFunctionPrototypeArguments = 113,
583 kFunctionPrototypeCaller = 114,
584 kTurboFanOsrCompileStarted = 115,
585 kAsyncStackTaggingCreateTaskCall = 116,
586 kDurationFormat = 117,
587 kInvalidatedNumberStringNotRegexpLikeProtector = 118,
588 kOBSOLETE_RegExpUnicodeSetIncompatibilitiesWithUnicodeMode = 119,
589 kOBSOLETE_ImportAssertionDeprecatedSyntax = 120,
590 kLocaleInfoObsoletedGetters = 121,
591 kLocaleInfoFunctions = 122,
592 kCompileHintsMagicAll = 123,
593 kInvalidatedNoProfilingProtector = 124,
594 kWasmMemory64 = 125,
595 kWasmMultiMemory = 126,
596 kWasmGC = 127,
597 kWasmImportedStrings = 128,
598 kSourceMappingUrlMagicCommentAtSign = 129,
599 kTemporalObject = 130,
600 kWasmModuleCompilation = 131,
601 kInvalidatedNoUndetectableObjectsProtector = 132,
602 kWasmJavaScriptPromiseIntegration = 133,
603 kWasmReturnCall = 134,
604 kWasmExtendedConst = 135,
605 kWasmRelaxedSimd = 136,
606 kWasmTypeReflection = 137,
607 kWasmExnRef = 138,
608 kWasmTypedFuncRef = 139,
609 kInvalidatedStringWrapperToPrimitiveProtector = 140,
610 kDocumentAllLegacyCall = 141,
611 kDocumentAllLegacyConstruct = 142,
612 kConsoleContext = 143,
613 kWasmImportedStringsUtf8 = 144,
614 kResizableArrayBuffer = 145,
615 kGrowableSharedArrayBuffer = 146,
616 kArrayByCopy = 147,
617 kArrayFromAsync = 148,
618 kIteratorMethods = 149,
619 kPromiseAny = 150,
620 kSetMethods = 151,
621 kArrayFindLast = 152,
622 kArrayGroup = 153,
623 kArrayBufferTransfer = 154,
624 kPromiseWithResolvers = 155,
625 kAtomicsWaitAsync = 156,
626 kExtendingNonExtensibleWithPrivate = 157,
627 kPromiseTry = 158,
628 kStringReplaceAll = 159,
629 kStringWellFormed = 160,
630 kWeakReferences = 161,
631 kErrorIsError = 162,
632 kInvalidatedTypedArrayLengthLookupChainProtector = 163,
633 kRegExpEscape = 164,
634 kFloat16Array = 165,
635 kExplicitResourceManagement = 166,
636 kWasmBranchHinting = 167,
637
638 // If you add new values here, you'll also need to update Chromium's:
639 // web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to
640 // this list need to be landed first, then changes on the Chromium side.
641 kUseCounterFeatureCount // This enum value must be last.
642 };
643
645 kMessageLog = (1 << 0),
646 kMessageDebug = (1 << 1),
647 kMessageInfo = (1 << 2),
648 kMessageError = (1 << 3),
649 kMessageWarning = (1 << 4),
650 kMessageAll = kMessageLog | kMessageDebug | kMessageInfo | kMessageError |
651 kMessageWarning,
652 };
653
654 // The different priorities that an isolate can have.
655 enum class Priority {
656 // The isolate does not relate to content that is currently important
657 // to the user. Lowest priority.
658 kBestEffort,
659
660 // The isolate contributes to content that is visible to the user, like a
661 // visible iframe that's not interacted directly with. High priority.
663
664 // The isolate contributes to content that is of the utmost importance to
665 // the user, like visible content in the focused window. Highest priority.
667 };
668
670 UseCounterFeature feature);
671
686 static Isolate* Allocate();
687 static Isolate* Allocate(const IsolateGroup& group);
688
692 IsolateGroup GetGroup() const;
693
697 static void Initialize(Isolate* isolate, const CreateParams& params);
698
708 static Isolate* New(const CreateParams& params);
709 static Isolate* New(const IsolateGroup& group, const CreateParams& params);
710
717 static Isolate* GetCurrent();
718
725 static Isolate* TryGetCurrent();
726
730 bool IsCurrent() const;
731
745 void ClearKeptObjects();
746
757 void SetAbortOnUncaughtExceptionCallback(
759
764 void SetHostImportModuleDynamicallyCallback(
766
776 void SetHostImportModuleWithPhaseDynamicallyCallback(
778
783 void SetHostInitializeImportMetaObjectCallback(
785
790 void SetHostCreateShadowRealmContextCallback(
792
800
805 void SetPrepareStackTraceCallback(PrepareStackTraceCallback callback);
806
810 int GetStackTraceLimit();
811
812#if defined(V8_OS_WIN)
816 V8_DEPRECATE_SOON("Use SetFilterETWSessionByURL2Callback instead")
817 void SetFilterETWSessionByURLCallback(FilterETWSessionByURLCallback callback);
818 void SetFilterETWSessionByURL2Callback(
819 FilterETWSessionByURL2Callback callback);
820#endif // V8_OS_WIN
821
828 void MemoryPressureNotification(MemoryPressureLevel level);
829
836 void SetBatterySaverMode(bool battery_saver_mode_enabled);
837
844 void SetMemorySaverMode(bool memory_saver_mode_enabled);
845
851 void ClearCachesForTesting();
852
863 void Enter();
864
872 void Exit();
873
878 void Dispose();
879
884 void DumpAndResetStats();
885
893 void DiscardThreadSpecificMetadata();
894
899 V8_INLINE void SetData(uint32_t slot, void* data);
900
905 V8_INLINE void* GetData(uint32_t slot);
906
911 V8_INLINE static uint32_t GetNumberOfDataSlots();
912
918 template <class T>
920
925 Local<Value> GetContinuationPreservedEmbedderData();
926
931 void SetContinuationPreservedEmbedderData(Local<Value> data);
932
936 void GetHeapStatistics(HeapStatistics* heap_statistics);
937
941 size_t NumberOfHeapSpaces();
942
952 bool GetHeapSpaceStatistics(HeapSpaceStatistics* space_statistics,
953 size_t index);
954
958 size_t NumberOfTrackedHeapObjectTypes();
959
969 bool GetHeapObjectStatisticsAtLastGC(HeapObjectStatistics* object_statistics,
970 size_t type_index);
971
979 bool GetHeapCodeAndMetadataStatistics(HeapCodeStatistics* object_statistics);
980
993 bool MeasureMemory(
994 std::unique_ptr<MeasureMemoryDelegate> delegate,
995 MeasureMemoryExecution execution = MeasureMemoryExecution::kDefault);
996
1009 void GetStackSample(const RegisterState& state, void** frames,
1010 size_t frames_limit, SampleInfo* sample_info);
1011
1019 V8_DEPRECATE_SOON("Use ExternalMemoryAccounter instead.")
1020 int64_t AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes);
1021
1026 HeapProfiler* GetHeapProfiler();
1027
1031 void SetIdle(bool is_idle);
1032
1034 ArrayBuffer::Allocator* GetArrayBufferAllocator();
1035
1037 bool InContext();
1038
1043 Local<Context> GetCurrentContext();
1044
1051 Local<Context> GetEnteredOrMicrotaskContext();
1052
1057 Local<Context> GetIncumbentContext();
1058
1063 MaybeLocal<Data> GetCurrentHostDefinedOptions();
1064
1070 template <int N>
1071 Local<Value> ThrowError(const char (&message)[N]) {
1072 return ThrowError(String::NewFromUtf8Literal(this, message));
1073 }
1074 Local<Value> ThrowError(Local<String> message);
1075
1082 Local<Value> ThrowException(Local<Value> exception);
1083
1090 bool HasPendingException();
1091
1095 GCCallbackFlags flags, void* data);
1096
1107 void AddGCPrologueCallback(GCCallback callback,
1108 GCType gc_type_filter = kGCTypeAll);
1109
1115 void AddGCPrologueCallback(GCCallbackWithData callback, void* data = nullptr,
1116 GCType gc_type_filter = kGCTypeAll);
1117
1124 void RemoveGCPrologueCallback(GCCallback callback);
1125
1131 void RemoveGCPrologueCallback(GCCallbackWithData, void* data = nullptr);
1132
1139 void AddGCEpilogueCallback(GCCallback callback,
1140 GCType gc_type_filter = kGCTypeAll);
1141
1147 void AddGCEpilogueCallback(GCCallbackWithData callback, void* data = nullptr,
1148 GCType gc_type_filter = kGCTypeAll);
1149
1156 void RemoveGCEpilogueCallback(GCCallback callback);
1157
1163 void RemoveGCEpilogueCallback(GCCallbackWithData callback,
1164 void* data = nullptr);
1165
1173 void SetEmbedderRootsHandler(EmbedderRootsHandler* handler);
1174
1175 using ReleaseCppHeapCallback = void (*)(std::unique_ptr<CppHeap>);
1176
1182 void SetReleaseCppHeapCallbackForTesting(ReleaseCppHeapCallback callback);
1183
1188 CppHeap* GetCppHeap() const;
1189
1191
1198 void SetGetExternallyAllocatedMemoryInBytesCallback(
1200
1208 void TerminateExecution();
1209
1218 bool IsExecutionTerminating();
1219
1234 void CancelTerminateExecution();
1235
1244 void RequestInterrupt(InterruptCallback callback, void* data);
1245
1251 bool HasPendingBackgroundTasks();
1252
1262 void RequestGarbageCollectionForTesting(GarbageCollectionType type);
1263
1274 void RequestGarbageCollectionForTesting(GarbageCollectionType type,
1275 StackState stack_state);
1276
1280 void SetEventLogger(LogEventCallback that);
1281
1288 void AddBeforeCallEnteredCallback(BeforeCallEnteredCallback callback);
1289
1293 void RemoveBeforeCallEnteredCallback(BeforeCallEnteredCallback callback);
1294
1302 void AddCallCompletedCallback(CallCompletedCallback callback);
1303
1307 void RemoveCallCompletedCallback(CallCompletedCallback callback);
1308
1313 void SetPromiseHook(PromiseHook hook);
1314
1319 void SetPromiseRejectCallback(PromiseRejectCallback callback);
1320
1328 void SetExceptionPropagationCallback(ExceptionPropagationCallback callback);
1329
1336 void PerformMicrotaskCheckpoint();
1337
1341 void EnqueueMicrotask(Local<Function> microtask);
1342
1346 void EnqueueMicrotask(MicrotaskCallback callback, void* data = nullptr);
1347
1351 void SetMicrotasksPolicy(MicrotasksPolicy policy);
1352
1356 MicrotasksPolicy GetMicrotasksPolicy() const;
1357
1371 void AddMicrotasksCompletedCallback(
1372 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1373
1377 void RemoveMicrotasksCompletedCallback(
1378 MicrotasksCompletedCallbackWithData callback, void* data = nullptr);
1379
1383 void SetUseCounterCallback(UseCounterCallback callback);
1384
1389 void SetCounterFunction(CounterLookupCallback);
1390
1397 void SetCreateHistogramFunction(CreateHistogramCallback);
1398 void SetAddHistogramSampleFunction(AddHistogramSampleCallback);
1399
1409 void SetMetricsRecorder(
1410 const std::shared_ptr<metrics::Recorder>& metrics_recorder);
1411
1417 void SetAddCrashKeyCallback(AddCrashKeyCallback);
1418
1423 void LowMemoryNotification();
1424
1434 V8_DEPRECATE_SOON("Use version that passes ContextDependants.")
1435 int ContextDisposedNotification(bool dependant_context = true);
1436
1444 void ContextDisposedNotification(ContextDependants dependants);
1445
1450 V8_DEPRECATE_SOON("Use SetPriority(Priority::kUserBlocking) instead")
1451 void IsolateInForegroundNotification();
1452
1457 V8_DEPRECATE_SOON("Use SetPriority(Priority::kBestEffort) instead")
1458 void IsolateInBackgroundNotification();
1459
1464 void SetPriority(Priority priority);
1465
1478 void SetIsLoading(bool is_loading);
1479
1486 void Freeze(bool is_frozen);
1487
1492 void IncreaseHeapLimitForDebugging();
1493
1497 void RestoreOriginalHeapLimit();
1498
1503 bool IsHeapLimitIncreasedForDebugging();
1504
1527 void SetJitCodeEventHandler(JitCodeEventOptions options,
1528 JitCodeEventHandler event_handler);
1529
1539 void SetStackLimit(uintptr_t stack_limit);
1540
1556 void GetCodeRange(void** start, size_t* length_in_bytes);
1557
1562 void GetEmbeddedCodeRange(const void** start, size_t* length_in_bytes);
1563
1567 JSEntryStubs GetJSEntryStubs();
1568
1569 static constexpr size_t kMinCodePagesBufferSize = 32;
1570
1584 size_t CopyCodePages(size_t capacity, MemoryRange* code_pages_out);
1585
1587 void SetFatalErrorHandler(FatalErrorCallback that);
1588
1590 void SetOOMErrorHandler(OOMErrorCallback that);
1591
1597 void AddNearHeapLimitCallback(NearHeapLimitCallback callback, void* data);
1598
1606 void RemoveNearHeapLimitCallback(NearHeapLimitCallback callback,
1607 size_t heap_limit);
1608
1615 void AutomaticallyRestoreInitialHeapLimit(double threshold_percent = 0.5);
1616
1621 void SetModifyCodeGenerationFromStringsCallback(
1623
1628 void SetAllowWasmCodeGenerationCallback(
1630
1635 void SetWasmModuleCallback(ExtensionCallback callback);
1636 void SetWasmInstanceCallback(ExtensionCallback callback);
1637
1638 void SetWasmStreamingCallback(WasmStreamingCallback callback);
1639
1640 void SetWasmAsyncResolvePromiseCallback(
1642
1643 void SetWasmLoadSourceMapCallback(WasmLoadSourceMapCallback callback);
1644
1645 void SetWasmImportedStringsEnabledCallback(
1647
1648 void SetSharedArrayBufferConstructorEnabledCallback(
1650
1651 void SetWasmJSPIEnabledCallback(WasmJSPIEnabledCallback callback);
1652
1658 "Will be removed, use ScriptCompiler::CompileOptions for enabling the "
1659 "compile hints magic comments")
1660 void SetJavaScriptCompileHintsMagicEnabledCallback(
1662
1668 void InstallConditionalFeatures(Local<Context> context);
1669
1674 bool IsDead();
1675
1685 bool AddMessageListener(MessageCallback that,
1686 Local<Value> data = Local<Value>());
1687
1699 bool AddMessageListenerWithErrorLevel(MessageCallback that,
1700 int message_levels,
1701 Local<Value> data = Local<Value>());
1702
1706 void RemoveMessageListeners(MessageCallback that);
1707
1709 void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback);
1710
1715 void SetCaptureStackTraceForUncaughtExceptions(
1716 bool capture, int frame_limit = 10,
1717 StackTrace::StackTraceOptions options = StackTrace::kOverview);
1718
1723 bool IsInUse();
1724
1730 void SetAllowAtomicsWait(bool allow);
1731
1745 enum class TimeZoneDetection { kSkip, kRedetect };
1746
1757 void DateTimeConfigurationChangeNotification(
1758 TimeZoneDetection time_zone_detection = TimeZoneDetection::kSkip);
1759
1769 void LocaleConfigurationChangeNotification();
1770
1775 std::string GetDefaultLocale();
1776
1780 uint64_t GetHashSeed();
1781
1782 Isolate() = delete;
1783 ~Isolate() = delete;
1784 Isolate(const Isolate&) = delete;
1785 Isolate& operator=(const Isolate&) = delete;
1786 // Deleting operator new and delete here is allowed as ctor and dtor is also
1787 // deleted.
1788 void* operator new(size_t size) = delete;
1789 void* operator new[](size_t size) = delete;
1790 void operator delete(void*, size_t) = delete;
1791 void operator delete[](void*, size_t) = delete;
1792
1793 private:
1794 template <class K, class V, class Traits>
1797
1799 size_t index);
1800 int64_t AdjustAmountOfExternalAllocatedMemoryImpl(int64_t change_in_bytes);
1801 void HandleExternalMemoryInterrupt();
1802};
1803
1804void Isolate::SetData(uint32_t slot, void* data) {
1805 using I = internal::Internals;
1806 I::SetEmbedderData(this, slot, data);
1807}
1808
1809void* Isolate::GetData(uint32_t slot) {
1810 using I = internal::Internals;
1811 return I::GetEmbedderData(this, slot);
1812}
1813
1814uint32_t Isolate::GetNumberOfDataSlots() {
1815 using I = internal::Internals;
1816 return I::kNumIsolateDataSlots;
1817}
1818
1819template <class T>
1820MaybeLocal<T> Isolate::GetDataFromSnapshotOnce(size_t index) {
1821 if (auto repr = GetDataFromSnapshotOnce(index);
1822 repr != internal::ValueHelper::kEmpty) {
1823 internal::PerformCastCheck(internal::ValueHelper::ReprAsValue<T>(repr));
1824 return Local<T>::FromRepr(repr);
1825 }
1826 return {};
1827}
1828
1829} // namespace v8
1830
1831#endif // INCLUDE_V8_ISOLATE_H_
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
internal::IsolateGroup * isolate_group_
Definition v8-isolate.h:263
bool operator!=(const IsolateGroup &other) const
Definition v8-isolate.h:252
bool operator==(const IsolateGroup &other) const
Definition v8-isolate.h:248
AllowJavascriptExecutionScope(const AllowJavascriptExecutionScope &)=delete
AllowJavascriptExecutionScope & operator=(const AllowJavascriptExecutionScope &)=delete
DisallowJavascriptExecutionScope(const DisallowJavascriptExecutionScope &)=delete
DisallowJavascriptExecutionScope & operator=(const DisallowJavascriptExecutionScope &)=delete
Scope(Isolate *isolate)
Definition v8-isolate.h:370
Scope(const Scope &)=delete
Isolate *const v8_isolate_
Definition v8-isolate.h:381
Scope & operator=(const Scope &)=delete
SuppressMicrotaskExecutionScope & operator=(const SuppressMicrotaskExecutionScope &)=delete
SuppressMicrotaskExecutionScope(const SuppressMicrotaskExecutionScope &)=delete
internal::MicrotaskQueue *const microtask_queue_
Definition v8-isolate.h:445
void(*)(std::unique_ptr< CppHeap >) ReleaseCppHeapCallback
V8_INLINE MaybeLocal< T > GetDataFromSnapshotOnce(size_t index)
size_t(*)() GetExternallyAllocatedMemoryInBytesCallback
Isolate()=delete
@ kFullGarbageCollection
Definition v8-isolate.h:456
void SetIsJSApiWrapperNativeErrorCallback(IsJSApiWrapperNativeErrorCallback callback)
Isolate & operator=(const Isolate &)=delete
Isolate(const Isolate &)=delete
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags, void *data) GCCallbackWithData
bool(*)(Isolate *) AbortOnUncaughtExceptionCallback
Definition v8-isolate.h:756
void(*)(Isolate *isolate, GCType type, GCCallbackFlags flags) GCCallback
~Isolate()=delete
void(*)(Isolate *isolate, UseCounterFeature feature) UseCounterCallback
Definition v8-isolate.h:669
void set_code_range_size_in_bytes(size_t limit)
Definition v8-isolate.h:115
size_t max_old_generation_size_in_bytes() const
Definition v8-isolate.h:124
void set_stack_limit(uint32_t *value)
Definition v8-isolate.h:103
void set_initial_old_generation_size_in_bytes(size_t initial_size)
Definition v8-isolate.h:146
uint32_t * stack_limit() const
Definition v8-isolate.h:102
size_t code_range_size_in_bytes() const
Definition v8-isolate.h:114
void set_initial_young_generation_size_in_bytes(size_t initial_size)
Definition v8-isolate.h:153
size_t initial_young_generation_size_in_bytes() const
Definition v8-isolate.h:150
size_t max_young_generation_size_in_bytes() const
Definition v8-isolate.h:136
void set_max_young_generation_size_in_bytes(size_t limit)
Definition v8-isolate.h:139
size_t initial_old_generation_size_in_bytes() const
Definition v8-isolate.h:143
void set_max_old_generation_size_in_bytes(size_t limit)
Definition v8-isolate.h:127
internal::Address * InternalRepresentationType
int start
MicrotaskQueue * microtask_queue
Definition execution.cc:77
other heap size flags(e.g. initial_heap_size) take precedence") DEFINE_SIZE_T( max_shared_heap_size
Isolate * isolate
TNode< Object > callback
size_t priority
EmbedderStackState
Definition common.h:15
STL namespace.
void(*)( Isolate *isolate, Local< Context > context, Local< Promise::Resolver > resolver, Local< Value > result, WasmAsyncSuccess success) WasmAsyncResolvePromiseCallback
bool(*)(Local< Context > context) WasmJSPIEnabledCallback
JitCodeEventOptions
bool(*)(Isolate *isolate, Local< Object > obj) IsJSApiWrapperNativeErrorCallback
bool(*)(Local< Context > context) JavaScriptCompileHintsMagicEnabledCallback
void(*)(const JitCodeEvent *event) JitCodeEventHandler
void(*)(CrashKeyId id, const std::string &value) AddCrashKeyCallback
GCCallbackFlags
MicrotasksPolicy
void(*)(ExceptionPropagationMessage message) ExceptionPropagationCallback
bool(*)(const FunctionCallbackInfo< Value > &) ExtensionCallback
void(*)(void *histogram, int sample) AddHistogramSampleCallback
void(*)(const FunctionCallbackInfo< Value > &) WasmStreamingCallback
ContextDependants
Definition v8-isolate.h:181
void(*)(const char *name, int status) LogEventCallback
void(*)(PromiseRejectMessage message) PromiseRejectCallback
Definition v8-promise.h:170
void(*)(Isolate *) CallCompletedCallback
void(*)(void *data) MicrotaskCallback
void(*)(const char *location, const char *message) FatalErrorCallback
void(*)(Isolate *, void *) MicrotasksCompletedCallbackWithData
void(*)(Local< Message > message, Local< Value > data) MessageCallback
void(*)(Local< Object > target, AccessType type, Local< Value > data) FailedAccessCheckCallback
void(*)(Local< Context > context, Local< Module > module, Local< Object > meta) HostInitializeImportMetaObjectCallback
void(*)(Isolate *isolate, void *data) InterruptCallback
int *(*)(const char *name) CounterLookupCallback
bool(*)(Local< Context > context) WasmImportedStringsEnabledCallback
void *(*)(const char *name, int min, int max, size_t buckets) CreateHistogramCallback
void(*)(PromiseHookType type, Local< Promise > promise, Local< Value > parent) PromiseHook
Definition v8-promise.h:143
bool(*)(Local< Context > context) SharedArrayBufferConstructorEnabledCallback
ModifyCodeGenerationFromStringsResult(*)(Local< Context > context, Local< Value > source, bool is_code_like) ModifyCodeGenerationFromStringsCallback2
size_t(*)(void *data, size_t current_heap_limit, size_t initial_heap_limit) NearHeapLimitCallback
void(*)(Isolate *) BeforeCallEnteredCallback
MemoryPressureLevel
Definition v8-isolate.h:175
void(*)(const char *location, const OOMDetails &details) OOMErrorCallback
MeasureMemoryExecution
bool(*)(Local< Context > context, Local< String > source) AllowWasmCodeGenerationCallback
const uintptr_t stack_limit_
#define I(name, number_of_args, result_size)
Definition runtime.cc:36
#define V8_EXPORT
Definition v8config.h:800
#define V8_INLINE
Definition v8config.h:500
#define V8_DEPRECATE_SOON(message)
Definition v8config.h:614
#define V8_DEPRECATED(message)
Definition v8config.h:606
#define ALLOW_COPY_AND_MOVE_WITH_DEPRECATED_FIELDS(ClassName)
Definition v8config.h:637
#define V8_NODISCARD
Definition v8config.h:693
std::unique_ptr< ValueMirror > value
wasm::ValueType type