Loading...
Searching...
No Matches
v8-microtask-queue.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_MICROTASKS_QUEUE_H_
6#define INCLUDE_V8_MICROTASKS_QUEUE_H_
7
8#include <stddef.h>
9
10#include <memory>
11
12#include "v8-local-handle.h" // NOLINT(build/include_directory)
13#include "v8-microtask.h" // NOLINT(build/include_directory)
14#include "v8config.h" // NOLINT(build/include_directory)
15
16namespace v8 {
17
18class Function;
19
20namespace internal {
21class Isolate;
22class MicrotaskQueue;
23} // namespace internal
24
41 public:
45 static std::unique_ptr<MicrotaskQueue> New(
46 Isolate* isolate, MicrotasksPolicy policy = MicrotasksPolicy::kAuto);
47
48 virtual ~MicrotaskQueue() = default;
49
53 virtual void EnqueueMicrotask(Isolate* isolate,
54 Local<Function> microtask) = 0;
55
56 V8_DEPRECATE_SOON("Use the MicrotaskCallbackWithData overload instead")
57 virtual void EnqueueMicrotask(v8::Isolate* isolate,
58 MicrotaskCallback callback,
59 void* data = nullptr) = 0;
63 virtual void EnqueueMicrotask(v8::Isolate* isolate,
65 v8::Local<v8::Data> data) = 0;
66
79 virtual void AddMicrotasksCompletedCallback(
80 MicrotasksCompletedCallbackWithData callback, void* data = nullptr) = 0;
81
85 virtual void RemoveMicrotasksCompletedCallback(
86 MicrotasksCompletedCallbackWithData callback, void* data = nullptr) = 0;
87
91 virtual void PerformCheckpoint(Isolate* isolate) = 0;
92
96 virtual bool IsRunningMicrotasks() const = 0;
97
102 virtual int GetMicrotasksScopeDepth() const = 0;
103
105 MicrotaskQueue& operator=(const MicrotaskQueue&) = delete;
106
107 private:
108 friend class internal::MicrotaskQueue;
109 MicrotaskQueue() = default;
110};
111
122 public:
123 enum Type { kRunMicrotasks, kDoNotRunMicrotasks };
124
126 MicrotasksScope(Isolate* isolate, MicrotaskQueue* microtask_queue, Type type);
128
132 static void PerformCheckpoint(Isolate* isolate);
133
137 static int GetCurrentDepth(Isolate* isolate);
138
142 static bool IsRunningMicrotasks(Isolate* isolate);
143
144 // Prevent copying.
147
148 private:
149 internal::Isolate* const i_isolate_;
150 internal::MicrotaskQueue* const microtask_queue_;
151 bool run_;
152};
153
154} // namespace v8
155
156#endif // INCLUDE_V8_MICROTASKS_QUEUE_H_
Definition: v8-data.h:18
Definition: v8-isolate.h:291
Definition: v8-local-handle.h:366
Definition: v8-microtask-queue.h:40
virtual void EnqueueMicrotask(Isolate *isolate, Local< Function > microtask)=0
static std::unique_ptr< MicrotaskQueue > New(Isolate *isolate, MicrotasksPolicy policy=MicrotasksPolicy::kAuto)
virtual ~MicrotaskQueue()=default
Definition: v8-microtask-queue.h:121
MicrotasksScope & operator=(const MicrotasksScope &)=delete
static void PerformCheckpoint(Isolate *isolate)
MicrotasksScope(Isolate *isolate, MicrotaskQueue *microtask_queue, Type type)
MicrotasksScope(Local< Context > context, Type type)
MicrotasksScope(const MicrotasksScope &)=delete
Type
Definition: v8-microtask-queue.h:123
static int GetCurrentDepth(Isolate *isolate)
static bool IsRunningMicrotasks(Isolate *isolate)
Definition: libplatform.h:15
void(*)(void *data) MicrotaskCallback
Definition: v8-microtask.h:17
MicrotasksPolicy
Definition: v8-microtask.h:28
void(*)(Isolate *, void *) MicrotasksCompletedCallbackWithData
Definition: v8-microtask.h:16
void(*)(Local< Data > data) MicrotaskCallbackWithData
Definition: v8-microtask.h:18
#define V8_EXPORT
Definition: v8config.h:867
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:624
#define V8_NODISCARD
Definition: v8config.h:703