5#ifndef V8_EXECUTION_FUTEX_EMULATION_H_
6#define V8_EXECUTION_FUTEX_EMULATION_H_
154 size_t addr, int32_t value,
155 double rel_timeout_ms);
160 size_t addr, int64_t value,
161 double rel_timeout_ms);
167 int32_t value, int64_t rel_timeout_ns);
173 int64_t value, int64_t rel_timeout_ns);
181 size_t addr, uint32_t num_waiters_to_wake);
183 static int Wake(
void* addr, uint32_t num_waiters_to_wake);
204 template <
typename T>
207 size_t addr, T value,
double rel_timeout_ms);
209 template <
typename T>
212 size_t addr, T value,
bool use_timeout,
213 int64_t rel_timeout_ns,
216 template <
typename T>
219 size_t addr, T value,
bool use_timeout,
220 int64_t rel_timeout_ns,
CallType call_type);
222 template <
typename T>
225 size_t addr, T value,
bool use_timeout,
226 int64_t rel_timeout_ns,
CallType call_type);
V8_INLINE bool IsWeak() const
static constexpr Id kInvalidTaskId
static void HandleAsyncWaiterTimeout(FutexWaitListNode *node)
static Tagged< Object > WaitSync(Isolate *isolate, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, T value, bool use_timeout, int64_t rel_timeout_ns, CallType call_type)
static Tagged< Object > Wait(Isolate *isolate, WaitMode mode, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, T value, double rel_timeout_ms)
static int NumUnresolvedAsyncPromisesForTesting(Tagged< JSArrayBuffer > array_buffer, size_t addr)
static int NumWaitersForTesting(Tagged< JSArrayBuffer > array_buffer, size_t addr)
static V8_EXPORT_PRIVATE Tagged< Object > WaitWasm64(Isolate *isolate, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, int64_t value, int64_t rel_timeout_ns)
static const uint32_t kWakeAll
static void NotifyAsyncWaiter(FutexWaitListNode *node)
static Tagged< Object > WaitAsync(Isolate *isolate, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, T value, bool use_timeout, int64_t rel_timeout_ns, CallType call_type)
static Tagged< Object > WaitJs64(Isolate *isolate, WaitMode mode, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, int64_t value, double rel_timeout_ms)
static Tagged< Object > WaitJs32(Isolate *isolate, WaitMode mode, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, int32_t value, double rel_timeout_ms)
static V8_EXPORT_PRIVATE Tagged< Object > WaitWasm32(Isolate *isolate, DirectHandle< JSArrayBuffer > array_buffer, size_t addr, int32_t value, int64_t rel_timeout_ns)
static void IsolateDeinit(Isolate *isolate)
static void ResolveAsyncWaiterPromise(FutexWaitListNode *node)
static void CleanupAsyncWaiterPromise(FutexWaitListNode *node)
static V8_EXPORT_PRIVATE int Wake(Tagged< JSArrayBuffer > array_buffer, size_t addr, uint32_t num_waiters_to_wake)
static void ResolveAsyncWaiterPromises(Isolate *isolate)
FutexWaitListNode(const FutexWaitListNode &)=delete
FutexWaitListNode * prev_
base::ConditionVariable cond_
FutexWaitListNode()=default
const std::unique_ptr< AsyncState > async_state_
FutexWaitListNode * next_
FutexWaitListNode & operator=(const FutexWaitListNode &)=delete
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
Isolate *const isolate_for_async_waiters
CancelableTaskManager::Id timeout_task_id
v8::Global< v8::Context > const native_context
base::TimeTicks timeout_time
std::shared_ptr< TaskRunner > const task_runner
AsyncState(Isolate *isolate, std::shared_ptr< TaskRunner > task_runner, std::weak_ptr< BackingStore > backing_store, v8::Global< v8::Promise > promise, v8::Global< v8::Context > native_context)
std::weak_ptr< BackingStore > const backing_store
v8::Global< v8::Promise > const promise