5#ifndef V8_V8_PLATFORM_H_
6#define V8_V8_PLATFORM_H_
54 virtual void Run() = 0;
66 virtual void Run(
double deadline_in_seconds) = 0;
106 std::unique_ptr<Task> task,
142 std::unique_ptr<Task> task,
double delay_in_seconds,
195 double delay_in_seconds,
198 double delay_in_seconds,
413#if !defined(V8_USE_PERFETTO)
422 static uint8_t no = 0;
435 char phase,
const uint8_t* category_enabled_flag,
const char* name,
436 const char* scope, uint64_t
id, uint64_t bind_id, int32_t num_args,
437 const char** arg_names,
const uint8_t* arg_types,
438 const uint64_t* arg_values,
439 std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
440 unsigned int flags) {
444 char phase,
const uint8_t* category_enabled_flag,
const char* name,
445 const char* scope, uint64_t
id, uint64_t bind_id, int32_t num_args,
446 const char** arg_names,
const uint8_t* arg_types,
447 const uint64_t* arg_values,
448 std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
449 unsigned int flags, int64_t timestamp) {
458 const char* name, uint64_t handle) {}
518#define DEFINE_SHARED_MEMORY_HANDLE_WRAPPERS(Wrap, Unwrap) \
519 V8_DEPRECATE_SOON("Use SharedMemoryHandle::FromPlatformHandle instead") \
520 inline SharedMemoryHandle Wrap(SharedMemoryHandle::PlatformHandle handle) { \
521 return SharedMemoryHandle::FromPlatformHandle(handle); \
523 V8_DEPRECATE_SOON("Use SharedMemoryHandle::GetPlatformHandle instead") \
524 inline SharedMemoryHandle::PlatformHandle Unwrap( \
525 SharedMemoryHandle handle) { \
526 return handle.GetPlatformHandle(); \
531 MachMemoryEntryFromSharedMemoryHandle)
534 VMOFromSharedMemoryHandle)
537 FileMappingFromSharedMemoryHandle)
543#undef DEFINE_SHARED_MEMORY_HANDLE_WRAPPERS
601 kNoAccessWillJitLater
612 void* address)
const {
625 : address_(address), may_grow_(may_grow) {}
627 void* address_ =
nullptr;
628 bool may_grow_ =
false;
644 return AllocatePages(hint.
Address(), length, alignment, permissions);
660 virtual bool FreePages(
void* address,
size_t length) = 0;
666 size_t new_length) = 0;
737 virtual std::unique_ptr<SharedMemoryMapping>
RemapTo(
738 void* new_address)
const = 0;
766 size_t length,
const void* original_address) {
823 virtual void Free(
void* ptr) = 0;
840 virtual void Free(
void*
object) = 0;
851 virtual int Pkey()
const {
return -1; }
871 static_cast<int>(rhs));
877 static_cast<int>(rhs));
890 return (lhs & rhs) == lhs;
949 size_t size()
const {
return size_; }
965 return (address >=
base()) && (address <
base() +
size());
1184 std::optional<MemoryProtectionKeyId> key = std::nullopt,
1185 std::optional<SharedMemoryHandle> handle = std::nullopt) = 0;
1252 virtual bool SetName(
const std::string& name) {
return false; }
1255 const size_t page_size_;
1256 const size_t allocation_granularity_;
1364 std::unique_ptr<
Task> task,
1379 std::unique_ptr<
Task> task,
1395 std::unique_ptr<
Task> task,
double delay_in_seconds,
1398 std::move(task), delay_in_seconds,
1421 double delay_in_seconds,
1424 delay_in_seconds, location);
1478 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1480 auto handle =
CreateJob(priority, std::move(job_task), location);
1481 handle->NotifyConcurrencyIncrease();
1501 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1503 return CreateJobImpl(priority, std::move(job_task), location);
1509 virtual std::unique_ptr<ScopedBoostablePriority>
1580 return &default_observer;
1595 TaskPriority priority, std::unique_ptr<JobTask> job_task,
1602 std::unique_ptr<Task> task,
Definition: v8-platform.h:787
virtual void * AllocateUninitializedOrCrash(size_t size)=0
virtual ~Allocator()=default
virtual void * AllocateUninitialized(size_t size)=0
virtual void * Allocate(size_t size)=0
virtual void Free(void *ptr)=0
Definition: v8-platform.h:1266
virtual void EnterSection()
Definition: v8-platform.h:1268
virtual void LeaveSection()
Definition: v8-platform.h:1269
Definition: v8-platform.h:63
virtual void Run(double deadline_in_seconds)=0
virtual ~IdleTask()=default
Definition: v8-isolate.h:298
Definition: v8-platform.h:214
virtual void NotifyConcurrencyIncrease()=0
virtual bool ShouldYield()=0
virtual bool IsJoiningThread() const =0
virtual uint8_t GetTaskId()=0
Definition: v8-platform.h:249
virtual void NotifyConcurrencyIncrease()=0
virtual void CancelAndDetach()=0
virtual bool IsActive()=0
virtual bool UpdatePriorityEnabled() const
Definition: v8-platform.h:297
virtual void UpdatePriority(TaskPriority new_priority)
Definition: v8-platform.h:302
virtual ~JobHandle()=default
Definition: v8-platform.h:308
virtual void Run(JobDelegate *delegate)=0
virtual size_t GetMaxConcurrency(size_t worker_count) const =0
virtual ~JobTask()=default
Definition: v8-platform.h:607
bool MayGrow() const
Definition: v8-platform.h:620
void * Address() const
Definition: v8-platform.h:621
constexpr AllocationHint WithAddress(void *address) const
Definition: v8-platform.h:611
constexpr AllocationHint WithMayGrow() const
Definition: v8-platform.h:616
Definition: v8-platform.h:721
virtual ~SharedMemoryMapping()=default
virtual void * GetMemory() const =0
Definition: v8-platform.h:733
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:557
virtual void * GetRandomMmapAddr()=0
virtual bool ResizeAllocationAt(void *address, size_t old_length, size_t new_length, Permission permissions)
Definition: v8-platform.h:652
virtual ~PageAllocator()=default
virtual void * AllocatePages(size_t length, size_t alignment, Permission permissions, AllocationHint hint)
Definition: v8-platform.h:642
virtual bool ReleasePages(void *address, size_t length, size_t new_length)=0
Permission
Definition: v8-platform.h:588
@ kReadExecute
Definition: v8-platform.h:593
@ kRead
Definition: v8-platform.h:590
@ kNoAccess
Definition: v8-platform.h:589
@ kReadWrite
Definition: v8-platform.h:591
@ kReadWriteExecute
Definition: v8-platform.h:592
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:778
virtual bool RecommitPages(void *address, size_t length, Permission permissions)
Definition: v8-platform.h:679
virtual bool SetPermissions(void *address, size_t length, Permission permissions)=0
virtual bool SealPages(void *address, size_t length)
Definition: v8-platform.h:712
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:765
virtual bool DiscardSystemPages(void *address, size_t size)
Definition: v8-platform.h:692
virtual size_t CommitPageSize()=0
virtual bool ReserveForSharedMemoryMapping(void *address, size_t size)
Definition: v8-platform.h:752
Definition: v8-platform.h:378
virtual ~ScopedBlockingCall()=default
Definition: v8-platform.h:331
ScopedBoostablePriority(const ScopedBoostablePriority &)=delete
virtual ~ScopedBoostablePriority()=default
virtual bool BoostPriority()=0
ScopedBoostablePriority & operator=(const ScopedBoostablePriority &other)=delete
ScopedBoostablePriority()=default
Definition: v8-platform.h:482
int PlatformHandle
Definition: v8-platform.h:500
static constexpr SharedMemoryHandle FromPlatformHandle(PlatformHandle handle)
Definition: v8-platform.h:503
PlatformHandle GetPlatformHandle() const
Definition: v8-platform.h:508
Definition: v8-source-location.h:22
static constexpr SourceLocation Current(const std::source_location &loc=std::source_location::current())
Definition: v8-source-location.h:28
Definition: v8-platform.h:75
void PostNonNestableDelayedTask(std::unique_ptr< Task > task, double delay_in_seconds, SourceLocation location=SourceLocation::Current())
Definition: v8-platform.h:141
TaskRunner & operator=(const TaskRunner &)=delete
virtual void PostTaskImpl(std::unique_ptr< Task > task, const SourceLocation &location)=0
virtual void PostIdleTaskImpl(std::unique_ptr< IdleTask > task, const SourceLocation &location)
Definition: v8-platform.h:203
TaskRunner(const TaskRunner &)=delete
virtual void PostNonNestableTaskImpl(std::unique_ptr< Task > task, const SourceLocation &location)
Definition: v8-platform.h:189
virtual bool NonNestableDelayedTasksEnabled() const
Definition: v8-platform.h:175
void PostIdleTask(std::unique_ptr< IdleTask > task, SourceLocation location=SourceLocation::Current())
Definition: v8-platform.h:157
virtual bool NonNestableTasksEnabled() const
Definition: v8-platform.h:170
void PostTask(std::unique_ptr< Task > task, SourceLocation location=SourceLocation::Current())
Definition: v8-platform.h:83
virtual ~TaskRunner()=default
virtual void PostNonNestableDelayedTaskImpl(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)
Definition: v8-platform.h:197
virtual bool IdleTasksEnabled()=0
void PostNonNestableTask(std::unique_ptr< Task > task, SourceLocation location=SourceLocation::Current())
Definition: v8-platform.h:105
void PostDelayedTask(std::unique_ptr< Task > task, double delay_in_seconds, SourceLocation location=SourceLocation::Current())
Definition: v8-platform.h:118
virtual void PostDelayedTaskImpl(std::unique_ptr< Task > task, double delay_in_seconds, const SourceLocation &location)=0
Definition: v8-platform.h:50
Definition: v8-platform.h:834
virtual int Pkey() const
Definition: v8-platform.h:851
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:842
Definition: v8-platform.h:461
virtual void OnTraceEnabled()=0
virtual ~TraceStateObserver()=default
virtual void OnTraceDisabled()=0
Definition: v8-platform.h:406
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:443
virtual const uint8_t * GetCategoryGroupEnabled(const char *name)
Definition: v8-platform.h:421
virtual ~TracingController()=default
virtual void AddTraceStateObserver(TraceStateObserver *)
Definition: v8-platform.h:472
virtual void RemoveTraceStateObserver(TraceStateObserver *)
Definition: v8-platform.h:478
virtual void UpdateTraceEventDuration(const uint8_t *category_enabled_flag, const char *name, uint64_t handle)
Definition: v8-platform.h:457
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:434
Definition: v8-platform.h:903
virtual bool CanAllocateSubspaces()=0
Address base() const
Definition: v8-platform.h:942
virtual void FreePages(Address address, size_t size)=0
virtual std::unique_ptr< VirtualAddressSpace > AllocateSubspace(Address hint, size_t size, size_t alignment, PagePermissions max_page_permissions, std::optional< MemoryProtectionKeyId > key=std::nullopt, std::optional< SharedMemoryHandle > handle=std::nullopt)=0
virtual void SetRandomSeed(int64_t seed)=0
static constexpr Address kNoHint
Definition: v8-platform.h:1004
bool Contains(Address address) const
Definition: v8-platform.h:964
uintptr_t Address
Definition: v8-platform.h:905
virtual bool DiscardSystemPages(Address address, size_t size)
Definition: v8-platform.h:1221
virtual void FreeSharedPages(Address address, size_t size)=0
virtual void FreeGuardRegion(Address address, size_t size)=0
virtual bool SetPagePermissions(Address address, size_t size, PagePermissions permissions)=0
virtual bool SetName(const std::string &name)
Definition: v8-platform.h:1252
VirtualAddressSpace(size_t page_size, size_t allocation_granularity, Address base, size_t size, PagePermissions max_page_permissions)
Definition: v8-platform.h:907
int MemoryProtectionKeyId
Definition: v8-platform.h:1134
size_t size() const
Definition: v8-platform.h:949
virtual bool AllocateGuardRegion(Address address, size_t size)=0
virtual Address AllocateSharedPages(Address hint, size_t size, PagePermissions permissions, SharedMemoryHandle handle, uint64_t offset)=0
PagePermissions max_page_permissions() const
Definition: v8-platform.h:957
virtual std::optional< MemoryProtectionKeyId > ActiveMemoryProtectionKey()=0
size_t allocation_granularity() const
Definition: v8-platform.h:935
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:925
Definition: libplatform.h:15
TaskPriority
Definition: v8-platform.h:25
PagePermissions & operator|=(PagePermissions &lhs, PagePermissions rhs)
Definition: v8-platform.h:880
SharedMemoryHandle SharedMemoryHandleFromFileDescriptor(SharedMemoryHandle::PlatformHandle handle)
Definition: v8-platform.h:540
SharedMemoryHandle::PlatformHandle FileDescriptorFromSharedMemoryHandle(SharedMemoryHandle handle)
Definition: v8-platform.h:540
BlockingType
Definition: v8-platform.h:363
constexpr PagePermissions operator&(PagePermissions lhs, PagePermissions rhs)
Definition: v8-platform.h:874
std::optional< SharedMemoryHandle > PlatformSharedMemoryHandle
Definition: v8-platform.h:547
constexpr PagePermissions operator|(PagePermissions lhs, PagePermissions rhs)
Definition: v8-platform.h:868
constexpr bool IsSubset(PagePermissions lhs, PagePermissions rhs)
Definition: v8-platform.h:889
PagePermissions
Definition: v8-platform.h:857
#define V8_EXPORT
Definition: v8config.h:874
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:631
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:688