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 "cppgc/macros.h"
13#include "v8-local-handle.h" // NOLINT(build/include_directory)
14#include "v8-microtask.h" // NOLINT(build/include_directory)
15#include "v8config.h" // NOLINT(build/include_directory)
16
17#ifdef V8_CPPGC_MICROTASK_QUEUE
19#include "cppgc/name-provider.h"
20#endif // V8_CPPGC_MICROTASK_QUEUE
21
22namespace v8 {
23
24class Function;
25
26namespace internal {
27class Isolate;
28class MicrotaskQueue;
29} // namespace internal
30
47#ifdef V8_CPPGC_MICROTASK_QUEUE
48 : public cppgc::GarbageCollected<MicrotaskQueue>,
50#endif // V8_CPPGC_MICROTASK_QUEUE
51{
52 public:
56#ifdef V8_CPPGC_MICROTASK_QUEUE
57 static MicrotaskQueue* New(Isolate* isolate,
58 MicrotasksPolicy policy = MicrotasksPolicy::kAuto);
59 virtual void Trace(cppgc::Visitor* visitor) const {}
60#else
62 "Use MicrotaskQueue allocated in cppgc, "
63 "see gn flag: v8_cppgc_microtask_queue.")
64 static std::unique_ptr<MicrotaskQueue> New(
65 Isolate* isolate, MicrotasksPolicy policy = MicrotasksPolicy::kAuto);
66#endif // V8_CPPGC_MICROTASK_QUEUE
67
68 virtual ~MicrotaskQueue() = default;
69
73 virtual void EnqueueMicrotask(Isolate* isolate,
74 Local<Function> microtask) = 0;
75
76 V8_DEPRECATE_SOON("Use the MicrotaskCallbackWithData overload instead")
77 virtual void EnqueueMicrotask(v8::Isolate* isolate,
78 MicrotaskCallback callback,
79 void* data = nullptr) = 0;
83 virtual void EnqueueMicrotask(v8::Isolate* isolate,
85 v8::Local<v8::Data> data) = 0;
86
99 virtual void AddMicrotasksCompletedCallback(
100 MicrotasksCompletedCallbackWithData callback, void* data = nullptr) = 0;
101
105 virtual void RemoveMicrotasksCompletedCallback(
106 MicrotasksCompletedCallbackWithData callback, void* data = nullptr) = 0;
107
111 virtual void PerformCheckpoint(Isolate* isolate) = 0;
112
116 virtual bool IsRunningMicrotasks() const = 0;
117
122 virtual int GetMicrotasksScopeDepth() const = 0;
123
125 MicrotaskQueue& operator=(const MicrotaskQueue&) = delete;
126
127 private:
128 friend class internal::MicrotaskQueue;
129 MicrotaskQueue() = default;
130};
131
143
144 public:
145 enum Type { kRunMicrotasks, kDoNotRunMicrotasks };
146
148 MicrotasksScope(Isolate* isolate, MicrotaskQueue* microtask_queue, Type type);
150
154 static void PerformCheckpoint(Isolate* isolate);
155
159 static int GetCurrentDepth(Isolate* isolate);
160
164 static bool IsRunningMicrotasks(Isolate* isolate);
165
166 // Prevent copying.
169
170 private:
171 internal::Isolate* const i_isolate_;
172 internal::MicrotaskQueue* const microtask_queue_;
173 bool run_;
174};
175
176} // namespace v8
177
178#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:292
Definition: v8-local-handle.h:366
Definition: v8-microtask-queue.h:51
virtual void EnqueueMicrotask(Isolate *isolate, Local< Function > microtask)=0
virtual ~MicrotaskQueue()=default
Definition: v8-microtask-queue.h:141
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:145
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:867
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:624
#define V8_NODISCARD
Definition: v8config.h:703