Loading...
Searching...
No Matches
v8-platform.h
Go to the documentation of this file.
1// Copyright 2013 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 V8_V8_PLATFORM_H_
6#define V8_V8_PLATFORM_H_
7
8#include <math.h>
9#include <stddef.h>
10#include <stdint.h>
11#include <stdlib.h> // For abort.
12
13#include <memory>
14#include <string>
15
16#include "v8-source-location.h" // NOLINT(build/include_directory)
17#include "v8config.h" // NOLINT(build/include_directory)
18
19namespace v8 {
20
21class Isolate;
22
23// Valid priorities supported by the task scheduling infrastructure.
24enum class TaskPriority : uint8_t {
44};
45
49class Task {
50 public:
51 virtual ~Task() = default;
52
53 virtual void Run() = 0;
54};
55
62class IdleTask {
63 public:
64 virtual ~IdleTask() = default;
65 virtual void Run(double deadline_in_seconds) = 0;
66};
67
75 public:
83 std::unique_ptr<Task> task,
84 const SourceLocation& location = SourceLocation::Current()) {
85 PostTaskImpl(std::move(task), location);
86 }
87
106 std::unique_ptr<Task> task,
107 const SourceLocation& location = SourceLocation::Current()) {
108 PostNonNestableTaskImpl(std::move(task), location);
109 }
110
119 std::unique_ptr<Task> task, double delay_in_seconds,
120 const SourceLocation& location = SourceLocation::Current()) {
121 PostDelayedTaskImpl(std::move(task), delay_in_seconds, location);
122 }
123
143 std::unique_ptr<Task> task, double delay_in_seconds,
144 const SourceLocation& location = SourceLocation::Current()) {
145 PostNonNestableDelayedTaskImpl(std::move(task), delay_in_seconds, location);
146 }
147
159 std::unique_ptr<IdleTask> task,
160 const SourceLocation& location = SourceLocation::Current()) {
161 PostIdleTaskImpl(std::move(task), location);
162 }
163
167 virtual bool IdleTasksEnabled() = 0;
168
172 virtual bool NonNestableTasksEnabled() const { return false; }
173
177 virtual bool NonNestableDelayedTasksEnabled() const { return false; }
178
179 TaskRunner() = default;
180 virtual ~TaskRunner() = default;
181
182 TaskRunner(const TaskRunner&) = delete;
183 TaskRunner& operator=(const TaskRunner&) = delete;
184
185 protected:
189 virtual void PostTaskImpl(std::unique_ptr<Task> task,
190 const SourceLocation& location) {}
191 virtual void PostNonNestableTaskImpl(std::unique_ptr<Task> task,
192 const SourceLocation& location) {}
193 virtual void PostDelayedTaskImpl(std::unique_ptr<Task> task,
194 double delay_in_seconds,
195 const SourceLocation& location) {}
196 virtual void PostNonNestableDelayedTaskImpl(std::unique_ptr<Task> task,
197 double delay_in_seconds,
198 const SourceLocation& location) {}
199 virtual void PostIdleTaskImpl(std::unique_ptr<IdleTask> task,
200 const SourceLocation& location) {}
201};
202
208 public:
215 virtual bool ShouldYield() = 0;
216
222 virtual void NotifyConcurrencyIncrease() = 0;
223
229 virtual uint8_t GetTaskId() = 0;
230
235 virtual bool IsJoiningThread() const = 0;
236};
237
243 public:
244 virtual ~JobHandle() = default;
245
251 virtual void NotifyConcurrencyIncrease() = 0;
252
260 virtual void Join() = 0;
261
266 virtual void Cancel() = 0;
267
268 /*
269 * Forces all existing workers to yield ASAP but doesn’t wait for them.
270 * Warning, this is dangerous if the Job's callback is bound to or has access
271 * to state which may be deleted after this call.
272 */
273 virtual void CancelAndDetach() = 0;
274
278 virtual bool IsActive() = 0;
279
285 virtual bool IsValid() = 0;
286
290 virtual bool UpdatePriorityEnabled() const { return false; }
291
295 virtual void UpdatePriority(TaskPriority new_priority) {}
296};
297
301class JobTask {
302 public:
303 virtual ~JobTask() = default;
304
305 virtual void Run(JobDelegate* delegate) = 0;
306
318 virtual size_t GetMaxConcurrency(size_t worker_count) const = 0;
319};
320
333enum class BlockingType {
334 // The call might block (e.g. file I/O that might hit in memory cache).
335 kMayBlock,
336 // The call will definitely block (e.g. cache already checked and now pinging
337 // server synchronously).
339};
340
349 public:
350 virtual ~ScopedBlockingCall() = default;
351};
352
357 public:
358 virtual ~ConvertableToTraceFormat() = default;
359
366 virtual void AppendAsTraceFormat(std::string* out) const = 0;
367};
368
377 public:
378 virtual ~TracingController() = default;
379
380 // In Perfetto mode, trace events are written using Perfetto's Track Event
381 // API directly without going through the embedder. However, it is still
382 // possible to observe tracing being enabled and disabled.
383#if !defined(V8_USE_PERFETTO)
391 virtual const uint8_t* GetCategoryGroupEnabled(const char* name) {
392 static uint8_t no = 0;
393 return &no;
394 }
395
404 virtual uint64_t AddTraceEvent(
405 char phase, const uint8_t* category_enabled_flag, const char* name,
406 const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
407 const char** arg_names, const uint8_t* arg_types,
408 const uint64_t* arg_values,
409 std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
410 unsigned int flags) {
411 return 0;
412 }
414 char phase, const uint8_t* category_enabled_flag, const char* name,
415 const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
416 const char** arg_names, const uint8_t* arg_types,
417 const uint64_t* arg_values,
418 std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
419 unsigned int flags, int64_t timestamp) {
420 return 0;
421 }
422
427 virtual void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
428 const char* name, uint64_t handle) {}
429#endif // !defined(V8_USE_PERFETTO)
430
432 public:
433 virtual ~TraceStateObserver() = default;
434 virtual void OnTraceEnabled() = 0;
435 virtual void OnTraceDisabled() = 0;
436 };
437
443
449};
450
457 public:
458 virtual ~PageAllocator() = default;
459
464 virtual size_t AllocatePageSize() = 0;
465
470 virtual size_t CommitPageSize() = 0;
471
476 virtual void SetRandomMmapSeed(int64_t seed) = 0;
477
482 virtual void* GetRandomMmapAddr() = 0;
483
493 // Set this when reserving memory that will later require kReadWriteExecute
494 // permissions. The resulting behavior is platform-specific, currently
495 // this is used to set the MAP_JIT flag on Apple Silicon.
496 // TODO(jkummerow): Remove this when Wasm has a platform-independent
497 // w^x implementation.
498 // TODO(saelo): Remove this once all JIT pages are allocated through the
499 // VirtualAddressSpace API.
501 };
502
506 virtual void* AllocatePages(void* address, size_t length, size_t alignment,
507 Permission permissions) = 0;
508
512 virtual bool FreePages(void* address, size_t length) = 0;
513
517 virtual bool ReleasePages(void* address, size_t length,
518 size_t new_length) = 0;
519
523 virtual bool SetPermissions(void* address, size_t length,
524 Permission permissions) = 0;
525
531 virtual bool RecommitPages(void* address, size_t length,
532 Permission permissions) {
533 // TODO(v8:12797): make it pure once it's implemented on Chromium side.
534 return false;
535 }
536
544 virtual bool DiscardSystemPages(void* address, size_t size) { return true; }
545
554 virtual bool DecommitPages(void* address, size_t size) = 0;
555
561 public:
562 // Implementations are expected to free the shared memory mapping in the
563 // destructor.
564 virtual ~SharedMemoryMapping() = default;
565 virtual void* GetMemory() const = 0;
566 };
567
573 public:
574 // Implementations are expected to free the shared memory in the destructor.
575 virtual ~SharedMemory() = default;
576 virtual std::unique_ptr<SharedMemoryMapping> RemapTo(
577 void* new_address) const = 0;
578 virtual void* GetMemory() const = 0;
579 virtual size_t GetSize() const = 0;
580 };
581
591 virtual bool ReserveForSharedMemoryMapping(void* address, size_t size) {
592 return false;
593 }
594
604 virtual std::unique_ptr<SharedMemory> AllocateSharedPages(
605 size_t length, const void* original_address) {
606 return {};
607 }
608
617 virtual bool CanAllocateSharedPages() { return false; }
618};
619
629 public:
630 virtual ~ThreadIsolatedAllocator() = default;
631
632 virtual void* Allocate(size_t size) = 0;
633
634 virtual void Free(void* object) = 0;
635
636 enum class Type {
637 kPkey,
638 };
639
640 virtual Type Type() const = 0;
641
645 virtual int Pkey() const { return -1; }
646
654};
655
656// Opaque type representing a handle to a shared memory region.
658static constexpr PlatformSharedMemoryHandle kInvalidSharedMemoryHandle = -1;
659
660// Conversion routines from the platform-dependent shared memory identifiers
661// into the opaque PlatformSharedMemoryHandle type. These use the underlying
662// types (e.g. unsigned int) instead of the typedef'd ones (e.g. mach_port_t)
663// to avoid pulling in large OS header files into this header file. Instead,
664// the users of these routines are expected to include the respecitve OS
665// headers in addition to this one.
666#if V8_OS_DARWIN
667// Convert between a shared memory handle and a mach_port_t referencing a memory
668// entry object.
669inline PlatformSharedMemoryHandle SharedMemoryHandleFromMachMemoryEntry(
670 unsigned int port) {
671 return static_cast<PlatformSharedMemoryHandle>(port);
672}
673inline unsigned int MachMemoryEntryFromSharedMemoryHandle(
675 return static_cast<unsigned int>(handle);
676}
677#elif V8_OS_FUCHSIA
678// Convert between a shared memory handle and a zx_handle_t to a VMO.
679inline PlatformSharedMemoryHandle SharedMemoryHandleFromVMO(uint32_t handle) {
680 return static_cast<PlatformSharedMemoryHandle>(handle);
681}
682inline uint32_t VMOFromSharedMemoryHandle(PlatformSharedMemoryHandle handle) {
683 return static_cast<uint32_t>(handle);
684}
685#elif V8_OS_WIN
686// Convert between a shared memory handle and a Windows HANDLE to a file mapping
687// object.
688inline PlatformSharedMemoryHandle SharedMemoryHandleFromFileMapping(
689 void* handle) {
690 return reinterpret_cast<PlatformSharedMemoryHandle>(handle);
691}
692inline void* FileMappingFromSharedMemoryHandle(
694 return reinterpret_cast<void*>(handle);
695}
696#else
697// Convert between a shared memory handle and a file descriptor.
699 return static_cast<PlatformSharedMemoryHandle>(fd);
700}
703 return static_cast<int>(handle);
704}
705#endif
706
710enum class PagePermissions {
711 kNoAccess,
712 kRead,
716};
717
729 public:
730 using Address = uintptr_t;
731
733 Address base, size_t size,
735 : page_size_(page_size),
736 allocation_granularity_(allocation_granularity),
737 base_(base),
738 size_(size),
739 max_page_permissions_(max_page_permissions) {}
740
741 virtual ~VirtualAddressSpace() = default;
742
750 size_t page_size() const { return page_size_; }
751
760 size_t allocation_granularity() const { return allocation_granularity_; }
761
767 Address base() const { return base_; }
768
774 size_t size() const { return size_; }
775
782 PagePermissions max_page_permissions() const { return max_page_permissions_; }
783
789 bool Contains(Address address) const {
790 return (address >= base()) && (address < base() + size());
791 }
792
799 virtual void SetRandomSeed(int64_t seed) = 0;
800
808
829 static constexpr Address kNoHint = 0;
831 AllocatePages(Address hint, size_t size, size_t alignment,
832 PagePermissions permissions) = 0;
833
846 virtual void FreePages(Address address, size_t size) = 0;
847
866 Address address, size_t size, PagePermissions permissions) = 0;
867
885 size_t size) = 0;
886
900 virtual void FreeGuardRegion(Address address, size_t size) = 0;
901
923 PlatformSharedMemoryHandle handle, uint64_t offset) = 0;
924
937 virtual void FreeSharedPages(Address address, size_t size) = 0;
938
944 virtual bool CanAllocateSubspaces() = 0;
945
946 /*
947 * Allocate a subspace.
948 *
949 * The address space of a subspace stays reserved in the parent space for the
950 * lifetime of the subspace. As such, it is guaranteed that page allocations
951 * on the parent space cannot end up inside a subspace.
952 *
953 * \param hint Hints where the subspace should be allocated. See
954 * AllocatePages() for more details.
955 *
956 * \param size The size in bytes of the subspace. Must be a multiple of the
957 * allocation_granularity().
958 *
959 * \param alignment The alignment of the subspace in bytes. Must be a multiple
960 * of the allocation_granularity() and should be a power of two.
961 *
962 * \param max_page_permissions The maximum permissions that pages allocated in
963 * the subspace can obtain.
964 *
965 * \returns a new subspace or nullptr on failure.
966 */
967 virtual std::unique_ptr<VirtualAddressSpace> AllocateSubspace(
968 Address hint, size_t size, size_t alignment,
970
971 //
972 // TODO(v8) maybe refactor the methods below before stabilizing the API. For
973 // example by combining them into some form of page operation method that
974 // takes a command enum as parameter.
975 //
976
993 Address address, size_t size, PagePermissions permissions) = 0;
994
1006 size_t size) {
1007 return true;
1008 }
1020 size_t size) = 0;
1021
1022 private:
1023 const size_t page_size_;
1024 const size_t allocation_granularity_;
1025 const Address base_;
1026 const size_t size_;
1027 const PagePermissions max_page_permissions_;
1028};
1029
1034 public:
1035 using MallocFn = void* (*)(size_t);
1036 using FreeFn = void (*)(void*);
1037
1038 virtual MallocFn GetMallocFn() const { return ::malloc; }
1039 virtual FreeFn GetFreeFn() const { return ::free; }
1040};
1041
1047 public:
1048 virtual void EnterSection() {}
1049 virtual void LeaveSection() {}
1050};
1051
1059 public:
1060 virtual ~Platform() = default;
1061
1067
1075 return nullptr;
1076 }
1077
1082 static ZoneBackingAllocator default_allocator;
1083 return &default_allocator;
1084 }
1085
1094
1103 virtual int NumberOfWorkerThreads() = 0;
1104
1112 virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(
1113 Isolate* isolate) {
1115 }
1116
1123 virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(
1124 Isolate* isolate, TaskPriority priority) {
1125 return nullptr;
1126 }
1127
1134 std::unique_ptr<Task> task,
1135 const SourceLocation& location = SourceLocation::Current()) {
1137 location);
1138 }
1139
1147 std::unique_ptr<Task> task,
1148 const SourceLocation& location = SourceLocation::Current()) {
1149 // Embedders may optionally override this to process these tasks in a high
1150 // priority pool.
1152 location);
1153 }
1154
1161 std::unique_ptr<Task> task,
1162 const SourceLocation& location = SourceLocation::Current()) {
1163 // Embedders may optionally override this to process these tasks in a low
1164 // priority pool.
1166 location);
1167 }
1168
1176 std::unique_ptr<Task> task, double delay_in_seconds,
1177 const SourceLocation& location = SourceLocation::Current()) {
1179 std::move(task), delay_in_seconds,
1180 location);
1181 }
1182
1186 virtual bool IdleTasksEnabled(Isolate* isolate) { return false; }
1187
1233 std::unique_ptr<JobHandle> PostJob(
1234 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1235 const SourceLocation& location = SourceLocation::Current()) {
1236 auto handle = CreateJob(priority, std::move(job_task), location);
1237 handle->NotifyConcurrencyIncrease();
1238 return handle;
1239 }
1240
1256 std::unique_ptr<JobHandle> CreateJob(
1257 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1258 const SourceLocation& location = SourceLocation::Current()) {
1259 return CreateJobImpl(priority, std::move(job_task), location);
1260 }
1261
1265 virtual std::unique_ptr<ScopedBlockingCall> CreateBlockingScope(
1266 BlockingType blocking_type) {
1267 return nullptr;
1268 }
1269
1277 virtual double MonotonicallyIncreasingTime() = 0;
1278
1285 return static_cast<int64_t>(floor(CurrentClockTimeMillis()));
1286 }
1287
1293 virtual double CurrentClockTimeMillis() = 0;
1294
1299 return CurrentClockTimeMillis();
1300 }
1301
1302 typedef void (*StackTracePrinter)();
1303
1308 virtual StackTracePrinter GetStackTracePrinter() { return nullptr; }
1309
1314
1319 virtual void DumpWithoutCrashing() {}
1320
1327 static HighAllocationThroughputObserver default_observer;
1328 return &default_observer;
1329 }
1330
1331 protected:
1338
1342 virtual std::unique_ptr<JobHandle> CreateJobImpl(
1343 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1344 const SourceLocation& location) = 0;
1345
1350 std::unique_ptr<Task> task,
1351 const SourceLocation& location) = 0;
1352
1358 TaskPriority priority, std::unique_ptr<Task> task,
1359 double delay_in_seconds, const SourceLocation& location) = 0;
1360};
1361
1362} // namespace v8
1363
1364#endif // V8_V8_PLATFORM_H_
Definition: v8-platform.h:356
virtual ~ConvertableToTraceFormat()=default
virtual void AppendAsTraceFormat(std::string *out) const =0
Definition: v8-platform.h:1046
virtual void EnterSection()
Definition: v8-platform.h:1048
virtual void LeaveSection()
Definition: v8-platform.h:1049
Definition: v8-platform.h:62
virtual void Run(double deadline_in_seconds)=0
virtual ~IdleTask()=default
Definition: v8-isolate.h:210
Definition: v8-platform.h:207
virtual void NotifyConcurrencyIncrease()=0
virtual bool ShouldYield()=0
virtual bool IsJoiningThread() const =0
virtual uint8_t GetTaskId()=0
Definition: v8-platform.h:242
virtual void NotifyConcurrencyIncrease()=0
virtual void CancelAndDetach()=0
virtual bool IsActive()=0
virtual bool UpdatePriorityEnabled() const
Definition: v8-platform.h:290
virtual bool IsValid()=0
virtual void UpdatePriority(TaskPriority new_priority)
Definition: v8-platform.h:295
virtual void Cancel()=0
virtual ~JobHandle()=default
virtual void Join()=0
Definition: v8-platform.h:301
virtual void Run(JobDelegate *delegate)=0
virtual size_t GetMaxConcurrency(size_t worker_count) const =0
virtual ~JobTask()=default
Definition: v8-platform.h:560
virtual void * GetMemory() const =0
Definition: v8-platform.h:572
virtual std::unique_ptr< SharedMemoryMapping > RemapTo(void *new_address) const =0
virtual void * GetMemory() const =0
virtual size_t GetSize() const =0
virtual ~SharedMemory()=default
Definition: v8-platform.h:456
virtual void * GetRandomMmapAddr()=0
virtual ~PageAllocator()=default
virtual bool ReleasePages(void *address, size_t length, size_t new_length)=0
Permission
Definition: v8-platform.h:487
@ kReadExecute
Definition: v8-platform.h:492
@ kRead
Definition: v8-platform.h:489
@ kNoAccess
Definition: v8-platform.h:488
@ kNoAccessWillJitLater
Definition: v8-platform.h:500
@ kReadWrite
Definition: v8-platform.h:490
@ kReadWriteExecute
Definition: v8-platform.h:491
virtual bool DecommitPages(void *address, size_t size)=0
virtual size_t AllocatePageSize()=0
virtual void SetRandomMmapSeed(int64_t seed)=0
virtual void * AllocatePages(void *address, size_t length, size_t alignment, Permission permissions)=0
virtual bool CanAllocateSharedPages()
Definition: v8-platform.h:617
virtual bool RecommitPages(void *address, size_t length, Permission permissions)
Definition: v8-platform.h:531
virtual bool SetPermissions(void *address, size_t length, Permission permissions)=0
virtual bool FreePages(void *address, size_t length)=0
virtual std::unique_ptr< SharedMemory > AllocateSharedPages(size_t length, const void *original_address)
Definition: v8-platform.h:604
virtual bool DiscardSystemPages(void *address, size_t size)
Definition: v8-platform.h:544
virtual size_t CommitPageSize()=0
virtual bool ReserveForSharedMemoryMapping(void *address, size_t size)
Definition: v8-platform.h:591
Definition: v8-platform.h:1058
virtual std::unique_ptr< ScopedBlockingCall > CreateBlockingScope(BlockingType blocking_type)
Definition: v8-platform.h:1265
static double SystemClockTimeMillis()
virtual ZoneBackingAllocator * GetZoneBackingAllocator()
Definition: v8-platform.h:1081
virtual void PostDelayedTaskOnWorkerThreadImpl(TaskPriority priority, std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)=0
virtual std::shared_ptr< v8::TaskRunner > GetForegroundTaskRunner(Isolate *isolate, TaskPriority priority)
Definition: v8-platform.h:1123
virtual std::shared_ptr< v8::TaskRunner > GetForegroundTaskRunner(Isolate *isolate)
Definition: v8-platform.h:1112
virtual PageAllocator * GetPageAllocator()=0
std::unique_ptr< JobHandle > PostJob(TaskPriority priority, std::unique_ptr< JobTask > job_task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1233
virtual TracingController * GetTracingController()=0
virtual int NumberOfWorkerThreads()=0
void CallLowPriorityTaskOnWorkerThread(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1160
virtual double MonotonicallyIncreasingTime()=0
void CallDelayedOnWorkerThread(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1175
virtual HighAllocationThroughputObserver * GetHighAllocationThroughputObserver()
Definition: v8-platform.h:1326
virtual void OnCriticalMemoryPressure()
Definition: v8-platform.h:1093
virtual int64_t CurrentClockTimeMilliseconds()
Definition: v8-platform.h:1284
virtual double CurrentClockTimeMillis()=0
void CallBlockingTaskOnWorkerThread(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1146
void CallOnWorkerThread(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1133
virtual StackTracePrinter GetStackTracePrinter()
Definition: v8-platform.h:1308
void(* StackTracePrinter)()
Definition: v8-platform.h:1302
virtual ~Platform()=default
std::unique_ptr< JobHandle > CreateJob(TaskPriority priority, std::unique_ptr< JobTask > job_task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1256
virtual double CurrentClockTimeMillisecondsHighResolution()
Definition: v8-platform.h:1298
virtual void DumpWithoutCrashing()
Definition: v8-platform.h:1319
virtual void PostTaskOnWorkerThreadImpl(TaskPriority priority, std::unique_ptr< Task > task, const SourceLocation &location)=0
virtual bool IdleTasksEnabled(Isolate *isolate)
Definition: v8-platform.h:1186
virtual std::unique_ptr< JobHandle > CreateJobImpl(TaskPriority priority, std::unique_ptr< JobTask > job_task, const SourceLocation &location)=0
virtual ThreadIsolatedAllocator * GetThreadIsolatedAllocator()
Definition: v8-platform.h:1074
Definition: v8-platform.h:348
virtual ~ScopedBlockingCall()=default
Definition: v8-source-location.h:31
static constexpr SourceLocation Current()
Definition: v8-source-location.h:44
Definition: v8-platform.h:74
TaskRunner & operator=(const TaskRunner &)=delete
virtual void PostIdleTaskImpl(std::unique_ptr< IdleTask > task, const SourceLocation &location)
Definition: v8-platform.h:199
TaskRunner(const TaskRunner &)=delete
virtual void PostNonNestableTaskImpl(std::unique_ptr< Task > task, const SourceLocation &location)
Definition: v8-platform.h:191
virtual void PostTaskImpl(std::unique_ptr< Task > task, const SourceLocation &location)
Definition: v8-platform.h:189
virtual void PostDelayedTaskImpl(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)
Definition: v8-platform.h:193
virtual bool NonNestableDelayedTasksEnabled() const
Definition: v8-platform.h:177
TaskRunner()=default
void PostDelayedTask(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:118
void PostIdleTask(std::unique_ptr< IdleTask > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:158
void PostTask(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:82
virtual bool NonNestableTasksEnabled() const
Definition: v8-platform.h:172
virtual ~TaskRunner()=default
virtual void PostNonNestableDelayedTaskImpl(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)
Definition: v8-platform.h:196
virtual bool IdleTasksEnabled()=0
void PostNonNestableTask(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:105
void PostNonNestableDelayedTask(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:142
Definition: v8-platform.h:49
virtual void Run()=0
virtual ~Task()=default
Definition: v8-platform.h:628
virtual int Pkey() const
Definition: v8-platform.h:645
virtual void * Allocate(size_t size)=0
virtual void Free(void *object)=0
static void SetDefaultPermissionsForSignalHandler()
virtual ~ThreadIsolatedAllocator()=default
virtual Type Type() const =0
Type
Definition: v8-platform.h:636
Definition: v8-platform.h:431
Definition: v8-platform.h:376
virtual uint64_t AddTraceEventWithTimestamp(char phase, const uint8_t *category_enabled_flag, const char *name, const char *scope, uint64_t id, uint64_t bind_id, int32_t num_args, const char **arg_names, const uint8_t *arg_types, const uint64_t *arg_values, std::unique_ptr< ConvertableToTraceFormat > *arg_convertables, unsigned int flags, int64_t timestamp)
Definition: v8-platform.h:413
virtual const uint8_t * GetCategoryGroupEnabled(const char *name)
Definition: v8-platform.h:391
virtual ~TracingController()=default
virtual void AddTraceStateObserver(TraceStateObserver *)
Definition: v8-platform.h:442
virtual void RemoveTraceStateObserver(TraceStateObserver *)
Definition: v8-platform.h:448
virtual void UpdateTraceEventDuration(const uint8_t *category_enabled_flag, const char *name, uint64_t handle)
Definition: v8-platform.h:427
virtual uint64_t AddTraceEvent(char phase, const uint8_t *category_enabled_flag, const char *name, const char *scope, uint64_t id, uint64_t bind_id, int32_t num_args, const char **arg_names, const uint8_t *arg_types, const uint64_t *arg_values, std::unique_ptr< ConvertableToTraceFormat > *arg_convertables, unsigned int flags)
Definition: v8-platform.h:404
Definition: v8-platform.h:728
virtual bool CanAllocateSubspaces()=0
Address base() const
Definition: v8-platform.h:767
virtual void FreePages(Address address, size_t size)=0
virtual void SetRandomSeed(int64_t seed)=0
static constexpr Address kNoHint
Definition: v8-platform.h:829
bool Contains(Address address) const
Definition: v8-platform.h:789
uintptr_t Address
Definition: v8-platform.h:730
virtual bool DiscardSystemPages(Address address, size_t size)
Definition: v8-platform.h:1005
virtual void FreeSharedPages(Address address, size_t size)=0
virtual void FreeGuardRegion(Address address, size_t size)=0
virtual Address AllocateSharedPages(Address hint, size_t size, PagePermissions permissions, PlatformSharedMemoryHandle handle, uint64_t offset)=0
virtual bool SetPagePermissions(Address address, size_t size, PagePermissions permissions)=0
VirtualAddressSpace(size_t page_size, size_t allocation_granularity, Address base, size_t size, PagePermissions max_page_permissions)
Definition: v8-platform.h:732
size_t size() const
Definition: v8-platform.h:774
virtual bool AllocateGuardRegion(Address address, size_t size)=0
PagePermissions max_page_permissions() const
Definition: v8-platform.h:782
size_t allocation_granularity() const
Definition: v8-platform.h:760
virtual Address RandomPageAddress()=0
virtual bool RecommitPages(Address address, size_t size, PagePermissions permissions)=0
virtual ~VirtualAddressSpace()=default
virtual bool DecommitPages(Address address, size_t size)=0
virtual Address AllocatePages(Address hint, size_t size, size_t alignment, PagePermissions permissions)=0
size_t page_size() const
Definition: v8-platform.h:750
virtual std::unique_ptr< VirtualAddressSpace > AllocateSubspace(Address hint, size_t size, size_t alignment, PagePermissions max_page_permissions)=0
Definition: v8-platform.h:1033
virtual MallocFn GetMallocFn() const
Definition: v8-platform.h:1038
virtual FreeFn GetFreeFn() const
Definition: v8-platform.h:1039
void(*)(void *) FreeFn
Definition: v8-platform.h:1036
void *(*)(size_t) MallocFn
Definition: v8-platform.h:1035
Definition: libplatform.h:15
TaskPriority
Definition: v8-platform.h:24
int FileDescriptorFromSharedMemoryHandle(PlatformSharedMemoryHandle handle)
Definition: v8-platform.h:701
PlatformSharedMemoryHandle SharedMemoryHandleFromFileDescriptor(int fd)
Definition: v8-platform.h:698
BlockingType
Definition: v8-platform.h:333
intptr_t PlatformSharedMemoryHandle
Definition: v8-platform.h:657
PagePermissions
Definition: v8-platform.h:710
#define V8_EXPORT
Definition: v8config.h:762
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:637