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:
82 void PostTask(std::unique_ptr<Task> task,
83 const SourceLocation& location = SourceLocation::Current()) {
84 PostTaskImpl(std::move(task), location);
85 }
86
105 std::unique_ptr<Task> task,
106 const SourceLocation& location = SourceLocation::Current()) {
107 PostNonNestableTaskImpl(std::move(task), location);
108 }
109
118 std::unique_ptr<Task> task, double delay_in_seconds,
119 const SourceLocation& location = SourceLocation::Current()) {
120 PostDelayedTaskImpl(std::move(task), delay_in_seconds, location);
121 }
122
142 std::unique_ptr<Task> task, double delay_in_seconds,
143 const SourceLocation& location = SourceLocation::Current()) {
144 PostNonNestableDelayedTaskImpl(std::move(task), delay_in_seconds, location);
145 }
146
158 std::unique_ptr<IdleTask> task,
159 const SourceLocation& location = SourceLocation::Current()) {
160 PostIdleTaskImpl(std::move(task), location);
161 }
162
166 virtual bool IdleTasksEnabled() = 0;
167
171 virtual bool NonNestableTasksEnabled() const { return false; }
172
176 virtual bool NonNestableDelayedTasksEnabled() const { return false; }
177
178 TaskRunner() = default;
179 virtual ~TaskRunner() = default;
180
181 TaskRunner(const TaskRunner&) = delete;
182 TaskRunner& operator=(const TaskRunner&) = delete;
183
184 protected:
188 virtual void PostTaskImpl(std::unique_ptr<Task> task,
189 const SourceLocation& location) {}
190 virtual void PostNonNestableTaskImpl(std::unique_ptr<Task> task,
191 const SourceLocation& location) {}
192 virtual void PostDelayedTaskImpl(std::unique_ptr<Task> task,
193 double delay_in_seconds,
194 const SourceLocation& location) {}
195 virtual void PostNonNestableDelayedTaskImpl(std::unique_ptr<Task> task,
196 double delay_in_seconds,
197 const SourceLocation& location) {}
198 virtual void PostIdleTaskImpl(std::unique_ptr<IdleTask> task,
199 const SourceLocation& location) {}
200};
201
207 public:
214 virtual bool ShouldYield() = 0;
215
221 virtual void NotifyConcurrencyIncrease() = 0;
222
228 virtual uint8_t GetTaskId() = 0;
229
234 virtual bool IsJoiningThread() const = 0;
235};
236
242 public:
243 virtual ~JobHandle() = default;
244
250 virtual void NotifyConcurrencyIncrease() = 0;
251
259 virtual void Join() = 0;
260
265 virtual void Cancel() = 0;
266
267 /*
268 * Forces all existing workers to yield ASAP but doesn’t wait for them.
269 * Warning, this is dangerous if the Job's callback is bound to or has access
270 * to state which may be deleted after this call.
271 */
272 virtual void CancelAndDetach() = 0;
273
277 virtual bool IsActive() = 0;
278
284 virtual bool IsValid() = 0;
285
289 virtual bool UpdatePriorityEnabled() const { return false; }
290
294 virtual void UpdatePriority(TaskPriority new_priority) {}
295};
296
300class JobTask {
301 public:
302 virtual ~JobTask() = default;
303
304 virtual void Run(JobDelegate* delegate) = 0;
305
317 virtual size_t GetMaxConcurrency(size_t worker_count) const = 0;
318};
319
332enum class BlockingType {
333 // The call might block (e.g. file I/O that might hit in memory cache).
334 kMayBlock,
335 // The call will definitely block (e.g. cache already checked and now pinging
336 // server synchronously).
338};
339
348 public:
349 virtual ~ScopedBlockingCall() = default;
350};
351
356 public:
357 virtual ~ConvertableToTraceFormat() = default;
358
365 virtual void AppendAsTraceFormat(std::string* out) const = 0;
366};
367
376 public:
377 virtual ~TracingController() = default;
378
379 // In Perfetto mode, trace events are written using Perfetto's Track Event
380 // API directly without going through the embedder. However, it is still
381 // possible to observe tracing being enabled and disabled.
382#if !defined(V8_USE_PERFETTO)
390 virtual const uint8_t* GetCategoryGroupEnabled(const char* name) {
391 static uint8_t no = 0;
392 return &no;
393 }
394
403 virtual uint64_t AddTraceEvent(
404 char phase, const uint8_t* category_enabled_flag, const char* name,
405 const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
406 const char** arg_names, const uint8_t* arg_types,
407 const uint64_t* arg_values,
408 std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
409 unsigned int flags) {
410 return 0;
411 }
413 char phase, const uint8_t* category_enabled_flag, const char* name,
414 const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
415 const char** arg_names, const uint8_t* arg_types,
416 const uint64_t* arg_values,
417 std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
418 unsigned int flags, int64_t timestamp) {
419 return 0;
420 }
421
426 virtual void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
427 const char* name, uint64_t handle) {}
428#endif // !defined(V8_USE_PERFETTO)
429
431 public:
432 virtual ~TraceStateObserver() = default;
433 virtual void OnTraceEnabled() = 0;
434 virtual void OnTraceDisabled() = 0;
435 };
436
442
448};
449
456 public:
457 virtual ~PageAllocator() = default;
458
463 virtual size_t AllocatePageSize() = 0;
464
469 virtual size_t CommitPageSize() = 0;
470
475 virtual void SetRandomMmapSeed(int64_t seed) = 0;
476
481 virtual void* GetRandomMmapAddr() = 0;
482
492 // Set this when reserving memory that will later require kReadWriteExecute
493 // permissions. The resulting behavior is platform-specific, currently
494 // this is used to set the MAP_JIT flag on Apple Silicon.
495 // TODO(jkummerow): Remove this when Wasm has a platform-independent
496 // w^x implementation.
497 // TODO(saelo): Remove this once all JIT pages are allocated through the
498 // VirtualAddressSpace API.
500 };
501
505 class AllocationHint final {
506 public:
507 AllocationHint() = default;
508
510 void* address) const {
511 return AllocationHint(address, may_grow_);
512 }
513
515 return AllocationHint(address_, true);
516 }
517
518 bool MayGrow() const { return may_grow_; }
519 void* Address() const { return address_; }
520
521 private:
522 constexpr AllocationHint(void* address, bool may_grow)
523 : address_(address), may_grow_(may_grow) {}
524
525 void* address_ = nullptr;
526 bool may_grow_ = false;
527 };
528
532 virtual void* AllocatePages(void* address, size_t length, size_t alignment,
533 Permission permissions) = 0;
534
540 virtual void* AllocatePages(size_t length, size_t alignment,
541 Permission permissions, AllocationHint hint) {
542 return AllocatePages(hint.Address(), length, alignment, permissions);
543 }
544
550 virtual bool ResizeAllocationAt(void* address, size_t old_length,
551 size_t new_length, Permission permissions) {
552 return false;
553 }
554
558 virtual bool FreePages(void* address, size_t length) = 0;
559
563 virtual bool ReleasePages(void* address, size_t length,
564 size_t new_length) = 0;
565
569 virtual bool SetPermissions(void* address, size_t length,
570 Permission permissions) = 0;
571
577 virtual bool RecommitPages(void* address, size_t length,
578 Permission permissions) {
579 // TODO(v8:12797): make it pure once it's implemented on Chromium side.
580 return false;
581 }
582
590 virtual bool DiscardSystemPages(void* address, size_t size) { return true; }
591
600 virtual bool DecommitPages(void* address, size_t size) = 0;
601
610 virtual bool SealPages(void* address, size_t length) {
611 // TODO(360048056): make it pure once it's implemented on Chromium side.
612 return false;
613 }
614
620 public:
621 // Implementations are expected to free the shared memory mapping in the
622 // destructor.
623 virtual ~SharedMemoryMapping() = default;
624 virtual void* GetMemory() const = 0;
625 };
626
632 public:
633 // Implementations are expected to free the shared memory in the destructor.
634 virtual ~SharedMemory() = default;
635 virtual std::unique_ptr<SharedMemoryMapping> RemapTo(
636 void* new_address) const = 0;
637 virtual void* GetMemory() const = 0;
638 virtual size_t GetSize() const = 0;
639 };
640
650 virtual bool ReserveForSharedMemoryMapping(void* address, size_t size) {
651 return false;
652 }
653
663 virtual std::unique_ptr<SharedMemory> AllocateSharedPages(
664 size_t length, const void* original_address) {
665 return {};
666 }
667
676 virtual bool CanAllocateSharedPages() { return false; }
677};
678
688 public:
689 virtual ~ThreadIsolatedAllocator() = default;
690
691 virtual void* Allocate(size_t size) = 0;
692
693 virtual void Free(void* object) = 0;
694
695 enum class Type {
696 kPkey,
697 };
698
699 virtual Type Type() const = 0;
700
704 virtual int Pkey() const { return -1; }
705};
706
707// Opaque type representing a handle to a shared memory region.
709static constexpr PlatformSharedMemoryHandle kInvalidSharedMemoryHandle = -1;
710
711// Conversion routines from the platform-dependent shared memory identifiers
712// into the opaque PlatformSharedMemoryHandle type. These use the underlying
713// types (e.g. unsigned int) instead of the typedef'd ones (e.g. mach_port_t)
714// to avoid pulling in large OS header files into this header file. Instead,
715// the users of these routines are expected to include the respecitve OS
716// headers in addition to this one.
717#if V8_OS_DARWIN
718// Convert between a shared memory handle and a mach_port_t referencing a memory
719// entry object.
720inline PlatformSharedMemoryHandle SharedMemoryHandleFromMachMemoryEntry(
721 unsigned int port) {
722 return static_cast<PlatformSharedMemoryHandle>(port);
723}
724inline unsigned int MachMemoryEntryFromSharedMemoryHandle(
726 return static_cast<unsigned int>(handle);
727}
728#elif V8_OS_FUCHSIA
729// Convert between a shared memory handle and a zx_handle_t to a VMO.
730inline PlatformSharedMemoryHandle SharedMemoryHandleFromVMO(uint32_t handle) {
731 return static_cast<PlatformSharedMemoryHandle>(handle);
732}
733inline uint32_t VMOFromSharedMemoryHandle(PlatformSharedMemoryHandle handle) {
734 return static_cast<uint32_t>(handle);
735}
736#elif V8_OS_WIN
737// Convert between a shared memory handle and a Windows HANDLE to a file mapping
738// object.
739inline PlatformSharedMemoryHandle SharedMemoryHandleFromFileMapping(
740 void* handle) {
741 return reinterpret_cast<PlatformSharedMemoryHandle>(handle);
742}
743inline void* FileMappingFromSharedMemoryHandle(
745 return reinterpret_cast<void*>(handle);
746}
747#else
748// Convert between a shared memory handle and a file descriptor.
750 return static_cast<PlatformSharedMemoryHandle>(fd);
751}
754 return static_cast<int>(handle);
755}
756#endif
757
761enum class PagePermissions {
762 kNoAccess,
763 kRead,
767};
768
780 public:
781 using Address = uintptr_t;
782
784 Address base, size_t size,
786 : page_size_(page_size),
787 allocation_granularity_(allocation_granularity),
788 base_(base),
789 size_(size),
790 max_page_permissions_(max_page_permissions) {}
791
792 virtual ~VirtualAddressSpace() = default;
793
801 size_t page_size() const { return page_size_; }
802
811 size_t allocation_granularity() const { return allocation_granularity_; }
812
818 Address base() const { return base_; }
819
825 size_t size() const { return size_; }
826
833 PagePermissions max_page_permissions() const { return max_page_permissions_; }
834
840 bool Contains(Address address) const {
841 return (address >= base()) && (address < base() + size());
842 }
843
850 virtual void SetRandomSeed(int64_t seed) = 0;
851
859
880 static constexpr Address kNoHint = 0;
882 AllocatePages(Address hint, size_t size, size_t alignment,
883 PagePermissions permissions) = 0;
884
897 virtual void FreePages(Address address, size_t size) = 0;
898
917 Address address, size_t size, PagePermissions permissions) = 0;
918
936 size_t size) = 0;
937
951 virtual void FreeGuardRegion(Address address, size_t size) = 0;
952
974 PlatformSharedMemoryHandle handle, uint64_t offset) = 0;
975
988 virtual void FreeSharedPages(Address address, size_t size) = 0;
989
995 virtual bool CanAllocateSubspaces() = 0;
996
997 /*
998 * Allocate a subspace.
999 *
1000 * The address space of a subspace stays reserved in the parent space for the
1001 * lifetime of the subspace. As such, it is guaranteed that page allocations
1002 * on the parent space cannot end up inside a subspace.
1003 *
1004 * \param hint Hints where the subspace should be allocated. See
1005 * AllocatePages() for more details.
1006 *
1007 * \param size The size in bytes of the subspace. Must be a multiple of the
1008 * allocation_granularity().
1009 *
1010 * \param alignment The alignment of the subspace in bytes. Must be a multiple
1011 * of the allocation_granularity() and should be a power of two.
1012 *
1013 * \param max_page_permissions The maximum permissions that pages allocated in
1014 * the subspace can obtain.
1015 *
1016 * \returns a new subspace or nullptr on failure.
1017 */
1018 virtual std::unique_ptr<VirtualAddressSpace> AllocateSubspace(
1019 Address hint, size_t size, size_t alignment,
1021
1022 //
1023 // TODO(v8) maybe refactor the methods below before stabilizing the API. For
1024 // example by combining them into some form of page operation method that
1025 // takes a command enum as parameter.
1026 //
1027
1044 Address address, size_t size, PagePermissions permissions) = 0;
1045
1057 size_t size) {
1058 return true;
1059 }
1071 size_t size) = 0;
1072
1073 private:
1074 const size_t page_size_;
1075 const size_t allocation_granularity_;
1076 const Address base_;
1077 const size_t size_;
1078 const PagePermissions max_page_permissions_;
1079};
1080
1086 public:
1087 virtual void EnterSection() {}
1088 virtual void LeaveSection() {}
1089};
1090
1098 public:
1099 virtual ~Platform() = default;
1100
1105 virtual PageAllocator* GetPageAllocator() { return nullptr; }
1106
1114 return nullptr;
1115 }
1116
1125
1134 virtual int NumberOfWorkerThreads() = 0;
1135
1141 std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(Isolate* isolate) {
1143 }
1144
1150 virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(
1151 Isolate* isolate, TaskPriority priority) = 0;
1152
1158 V8_DEPRECATE_SOON("Use PostTaskOnWorkerThread instead.")
1160 std::unique_ptr<Task> task,
1161 const SourceLocation& location = SourceLocation::Current()) {
1163 location);
1164 }
1165
1172 V8_DEPRECATE_SOON("Use PostTaskOnWorkerThread instead.")
1174 std::unique_ptr<Task> task,
1175 const SourceLocation& location = SourceLocation::Current()) {
1176 // Embedders may optionally override this to process these tasks in a high
1177 // priority pool.
1179 location);
1180 }
1181
1187 V8_DEPRECATE_SOON("Use PostTaskOnWorkerThread instead.")
1189 std::unique_ptr<Task> task,
1190 const SourceLocation& location = SourceLocation::Current()) {
1191 // Embedders may optionally override this to process these tasks in a low
1192 // priority pool.
1194 location);
1195 }
1196
1203 V8_DEPRECATE_SOON("Use PostDelayedTaskOnWorkerThread instead.")
1205 std::unique_ptr<Task> task, double delay_in_seconds,
1206 const SourceLocation& location = SourceLocation::Current()) {
1208 std::move(task), delay_in_seconds,
1209 location);
1210 }
1211
1218 TaskPriority priority, std::unique_ptr<Task> task,
1219 const SourceLocation& location = SourceLocation::Current()) {
1220 PostTaskOnWorkerThreadImpl(priority, std::move(task), location);
1221 }
1222
1230 TaskPriority priority, std::unique_ptr<Task> task,
1231 double delay_in_seconds,
1232 const SourceLocation& location = SourceLocation::Current()) {
1233 PostDelayedTaskOnWorkerThreadImpl(priority, std::move(task),
1234 delay_in_seconds, location);
1235 }
1236
1240 virtual bool IdleTasksEnabled(Isolate* isolate) { return false; }
1241
1287 std::unique_ptr<JobHandle> PostJob(
1288 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1289 const SourceLocation& location = SourceLocation::Current()) {
1290 auto handle = CreateJob(priority, std::move(job_task), location);
1291 handle->NotifyConcurrencyIncrease();
1292 return handle;
1293 }
1294
1310 std::unique_ptr<JobHandle> CreateJob(
1311 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1312 const SourceLocation& location = SourceLocation::Current()) {
1313 return CreateJobImpl(priority, std::move(job_task), location);
1314 }
1315
1319 virtual std::unique_ptr<ScopedBlockingCall> CreateBlockingScope(
1320 BlockingType blocking_type) {
1321 return nullptr;
1322 }
1323
1331 virtual double MonotonicallyIncreasingTime() = 0;
1332
1339 return static_cast<int64_t>(floor(CurrentClockTimeMillis()));
1340 }
1341
1347 virtual double CurrentClockTimeMillis() = 0;
1348
1353 return CurrentClockTimeMillis();
1354 }
1355
1356 typedef void (*StackTracePrinter)();
1357
1362 virtual StackTracePrinter GetStackTracePrinter() { return nullptr; }
1363
1368
1373 virtual void DumpWithoutCrashing() {}
1374
1381 static HighAllocationThroughputObserver default_observer;
1382 return &default_observer;
1383 }
1384
1385 protected:
1392
1396 virtual std::unique_ptr<JobHandle> CreateJobImpl(
1397 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1398 const SourceLocation& location) = 0;
1399
1404 std::unique_ptr<Task> task,
1405 const SourceLocation& location) = 0;
1406
1412 TaskPriority priority, std::unique_ptr<Task> task,
1413 double delay_in_seconds, const SourceLocation& location) = 0;
1414};
1415
1416} // namespace v8
1417
1418#endif // V8_V8_PLATFORM_H_
Definition: v8-platform.h:355
virtual ~ConvertableToTraceFormat()=default
virtual void AppendAsTraceFormat(std::string *out) const =0
Definition: v8-platform.h:1085
virtual void EnterSection()
Definition: v8-platform.h:1087
virtual void LeaveSection()
Definition: v8-platform.h:1088
Definition: v8-platform.h:62
virtual void Run(double deadline_in_seconds)=0
virtual ~IdleTask()=default
Definition: v8-isolate.h:285
Definition: v8-platform.h:206
virtual void NotifyConcurrencyIncrease()=0
virtual bool ShouldYield()=0
virtual bool IsJoiningThread() const =0
virtual uint8_t GetTaskId()=0
Definition: v8-platform.h:241
virtual void NotifyConcurrencyIncrease()=0
virtual void CancelAndDetach()=0
virtual bool IsActive()=0
virtual bool UpdatePriorityEnabled() const
Definition: v8-platform.h:289
virtual bool IsValid()=0
virtual void UpdatePriority(TaskPriority new_priority)
Definition: v8-platform.h:294
virtual void Cancel()=0
virtual ~JobHandle()=default
virtual void Join()=0
Definition: v8-platform.h:300
virtual void Run(JobDelegate *delegate)=0
virtual size_t GetMaxConcurrency(size_t worker_count) const =0
virtual ~JobTask()=default
Definition: v8-platform.h:505
bool MayGrow() const
Definition: v8-platform.h:518
void * Address() const
Definition: v8-platform.h:519
constexpr AllocationHint WithAddress(void *address) const
Definition: v8-platform.h:509
constexpr AllocationHint WithMayGrow() const
Definition: v8-platform.h:514
Definition: v8-platform.h:619
virtual void * GetMemory() const =0
Definition: v8-platform.h:631
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:455
virtual void * GetRandomMmapAddr()=0
virtual bool ResizeAllocationAt(void *address, size_t old_length, size_t new_length, Permission permissions)
Definition: v8-platform.h:550
virtual ~PageAllocator()=default
virtual void * AllocatePages(size_t length, size_t alignment, Permission permissions, AllocationHint hint)
Definition: v8-platform.h:540
virtual bool ReleasePages(void *address, size_t length, size_t new_length)=0
Permission
Definition: v8-platform.h:486
@ kReadExecute
Definition: v8-platform.h:491
@ kRead
Definition: v8-platform.h:488
@ kNoAccess
Definition: v8-platform.h:487
@ kNoAccessWillJitLater
Definition: v8-platform.h:499
@ kReadWrite
Definition: v8-platform.h:489
@ kReadWriteExecute
Definition: v8-platform.h:490
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:676
virtual bool RecommitPages(void *address, size_t length, Permission permissions)
Definition: v8-platform.h:577
virtual bool SetPermissions(void *address, size_t length, Permission permissions)=0
virtual bool SealPages(void *address, size_t length)
Definition: v8-platform.h:610
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:663
virtual bool DiscardSystemPages(void *address, size_t size)
Definition: v8-platform.h:590
virtual size_t CommitPageSize()=0
virtual bool ReserveForSharedMemoryMapping(void *address, size_t size)
Definition: v8-platform.h:650
Definition: v8-platform.h:1097
virtual std::unique_ptr< ScopedBlockingCall > CreateBlockingScope(BlockingType blocking_type)
Definition: v8-platform.h:1319
void PostTaskOnWorkerThread(TaskPriority priority, std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1217
static double SystemClockTimeMillis()
virtual void PostDelayedTaskOnWorkerThreadImpl(TaskPriority priority, std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)=0
void PostDelayedTaskOnWorkerThread(TaskPriority priority, std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1229
std::unique_ptr< JobHandle > PostJob(TaskPriority priority, std::unique_ptr< JobTask > job_task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1287
virtual std::shared_ptr< v8::TaskRunner > GetForegroundTaskRunner(Isolate *isolate, TaskPriority priority)=0
virtual TracingController * GetTracingController()=0
virtual PageAllocator * GetPageAllocator()
Definition: v8-platform.h:1105
virtual int NumberOfWorkerThreads()=0
void CallLowPriorityTaskOnWorkerThread(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1188
virtual double MonotonicallyIncreasingTime()=0
void CallDelayedOnWorkerThread(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1204
virtual HighAllocationThroughputObserver * GetHighAllocationThroughputObserver()
Definition: v8-platform.h:1380
virtual void OnCriticalMemoryPressure()
Definition: v8-platform.h:1124
virtual int64_t CurrentClockTimeMilliseconds()
Definition: v8-platform.h:1338
virtual double CurrentClockTimeMillis()=0
void CallBlockingTaskOnWorkerThread(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1173
void CallOnWorkerThread(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:1159
virtual StackTracePrinter GetStackTracePrinter()
Definition: v8-platform.h:1362
void(* StackTracePrinter)()
Definition: v8-platform.h:1356
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:1310
virtual double CurrentClockTimeMillisecondsHighResolution()
Definition: v8-platform.h:1352
virtual void DumpWithoutCrashing()
Definition: v8-platform.h:1373
virtual void PostTaskOnWorkerThreadImpl(TaskPriority priority, std::unique_ptr< Task > task, const SourceLocation &location)=0
virtual bool IdleTasksEnabled(Isolate *isolate)
Definition: v8-platform.h:1240
std::shared_ptr< v8::TaskRunner > GetForegroundTaskRunner(Isolate *isolate)
Definition: v8-platform.h:1141
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:1113
Definition: v8-platform.h:347
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:198
TaskRunner(const TaskRunner &)=delete
virtual void PostNonNestableTaskImpl(std::unique_ptr< Task > task, const SourceLocation &location)
Definition: v8-platform.h:190
virtual void PostTaskImpl(std::unique_ptr< Task > task, const SourceLocation &location)
Definition: v8-platform.h:188
virtual void PostDelayedTaskImpl(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)
Definition: v8-platform.h:192
virtual bool NonNestableDelayedTasksEnabled() const
Definition: v8-platform.h:176
TaskRunner()=default
void PostDelayedTask(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:117
void PostIdleTask(std::unique_ptr< IdleTask > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:157
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:171
virtual ~TaskRunner()=default
virtual void PostNonNestableDelayedTaskImpl(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)
Definition: v8-platform.h:195
virtual bool IdleTasksEnabled()=0
void PostNonNestableTask(std::unique_ptr< Task > task, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:104
void PostNonNestableDelayedTask(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location=SourceLocation::Current())
Definition: v8-platform.h:141
Definition: v8-platform.h:49
virtual void Run()=0
virtual ~Task()=default
Definition: v8-platform.h:687
virtual int Pkey() const
Definition: v8-platform.h:704
virtual void * Allocate(size_t size)=0
virtual void Free(void *object)=0
virtual ~ThreadIsolatedAllocator()=default
virtual Type Type() const =0
Type
Definition: v8-platform.h:695
Definition: v8-platform.h:430
Definition: v8-platform.h:375
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:412
virtual const uint8_t * GetCategoryGroupEnabled(const char *name)
Definition: v8-platform.h:390
virtual ~TracingController()=default
virtual void AddTraceStateObserver(TraceStateObserver *)
Definition: v8-platform.h:441
virtual void RemoveTraceStateObserver(TraceStateObserver *)
Definition: v8-platform.h:447
virtual void UpdateTraceEventDuration(const uint8_t *category_enabled_flag, const char *name, uint64_t handle)
Definition: v8-platform.h:426
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:403
Definition: v8-platform.h:779
virtual bool CanAllocateSubspaces()=0
Address base() const
Definition: v8-platform.h:818
virtual void FreePages(Address address, size_t size)=0
virtual void SetRandomSeed(int64_t seed)=0
static constexpr Address kNoHint
Definition: v8-platform.h:880
bool Contains(Address address) const
Definition: v8-platform.h:840
uintptr_t Address
Definition: v8-platform.h:781
virtual bool DiscardSystemPages(Address address, size_t size)
Definition: v8-platform.h:1056
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:783
size_t size() const
Definition: v8-platform.h:825
virtual bool AllocateGuardRegion(Address address, size_t size)=0
PagePermissions max_page_permissions() const
Definition: v8-platform.h:833
size_t allocation_granularity() const
Definition: v8-platform.h:811
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:801
virtual std::unique_ptr< VirtualAddressSpace > AllocateSubspace(Address hint, size_t size, size_t alignment, PagePermissions max_page_permissions)=0
Definition: libplatform.h:15
TaskPriority
Definition: v8-platform.h:24
int FileDescriptorFromSharedMemoryHandle(PlatformSharedMemoryHandle handle)
Definition: v8-platform.h:752
PlatformSharedMemoryHandle SharedMemoryHandleFromFileDescriptor(int fd)
Definition: v8-platform.h:749
BlockingType
Definition: v8-platform.h:332
intptr_t PlatformSharedMemoryHandle
Definition: v8-platform.h:708
PagePermissions
Definition: v8-platform.h:761
#define V8_EXPORT
Definition: v8config.h:800
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:614
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:671