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
13#include "cppgc/macros.h"
14#include "cppgc/name-provider.h"
15#include "v8-local-handle.h" // NOLINT(build/include_directory)
16#include "v8-microtask.h" // NOLINT(build/include_directory)
17#include "v8config.h" // NOLINT(build/include_directory)
18
19namespace v8 {
20
21class Function;
22
23namespace internal {
24class Isolate;
25class MicrotaskQueue;
26} // namespace internal
27
43class V8_EXPORT MicrotaskQueue : public cppgc::GarbageCollected<MicrotaskQueue>,
44 public cppgc::NameProvider {
45 public:
49 static MicrotaskQueue* New(Isolate* isolate,
50 MicrotasksPolicy policy = MicrotasksPolicy::kAuto);
51 virtual void Trace(cppgc::Visitor* visitor) const {}
52
53 virtual ~MicrotaskQueue() = default;
54
58 virtual void EnqueueMicrotask(Isolate* isolate,
59 Local<Function> microtask) = 0;
60
61 V8_DEPRECATE_SOON("Use the MicrotaskCallbackWithData overload instead")
62 virtual void EnqueueMicrotask(v8::Isolate* isolate,
63 MicrotaskCallback callback,
64 void* data = nullptr) = 0;
68 virtual void EnqueueMicrotask(v8::Isolate* isolate,
70 v8::Local<v8::Data> data) = 0;
71
84 virtual void AddMicrotasksCompletedCallback(
85 MicrotasksCompletedCallbackWithData callback, void* data = nullptr) = 0;
86
90 virtual void RemoveMicrotasksCompletedCallback(
91 MicrotasksCompletedCallbackWithData callback, void* data = nullptr) = 0;
92
96 virtual void PerformCheckpoint(Isolate* isolate) = 0;
97
101 virtual bool IsRunningMicrotasks() const = 0;
102
107 virtual int GetMicrotasksScopeDepth() const = 0;
108
114 virtual void SetMicrotasksPolicy(MicrotasksPolicy policy) = 0;
115
119 virtual MicrotasksPolicy GetMicrotasksPolicy() const = 0;
120
122 MicrotaskQueue& operator=(const MicrotaskQueue&) = delete;
123
124 private:
125 friend class internal::MicrotaskQueue;
126 MicrotaskQueue() = default;
127};
128
140
141 public:
142 enum Type { kRunMicrotasks, kDoNotRunMicrotasks };
143
145 MicrotasksScope(Isolate* isolate, MicrotaskQueue* microtask_queue, Type type);
147
151 static void PerformCheckpoint(Isolate* isolate);
152
156 static int GetCurrentDepth(Isolate* isolate);
157
161 static bool IsRunningMicrotasks(Isolate* isolate);
162
163 // Prevent copying.
166
167 private:
168 internal::Isolate* const i_isolate_;
169 internal::MicrotaskQueue* const microtask_queue_;
170 bool run_;
171};
172
173} // namespace v8
174
175#endif // INCLUDE_V8_MICROTASKS_QUEUE_H_
Definition: garbage-collected.h:53
Definition: name-provider.h:26
Definition: visitor.h:78
Definition: v8-data.h:18
Definition: v8-isolate.h:305
Definition: v8-local-handle.h:359
Definition: v8-microtask-queue.h:44
virtual void EnqueueMicrotask(Isolate *isolate, Local< Function > microtask)=0
virtual void Trace(cppgc::Visitor *visitor) const
Definition: v8-microtask-queue.h:51
static MicrotaskQueue * New(Isolate *isolate, MicrotasksPolicy policy=MicrotasksPolicy::kAuto)
virtual ~MicrotaskQueue()=default
Definition: v8-microtask-queue.h:138
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:142
static int GetCurrentDepth(Isolate *isolate)
static bool IsRunningMicrotasks(Isolate *isolate)
#define CPPGC_STACK_ALLOCATED()
Definition: macros.h:44
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:874
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:631
#define V8_NODISCARD
Definition: v8config.h:710