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
110 MicrotaskQueue& operator=(const MicrotaskQueue&) = delete;
111
112 private:
113 friend class internal::MicrotaskQueue;
114 MicrotaskQueue() = default;
115};
116
128
129 public:
130 enum Type { kRunMicrotasks, kDoNotRunMicrotasks };
131
133 MicrotasksScope(Isolate* isolate, MicrotaskQueue* microtask_queue, Type type);
135
139 static void PerformCheckpoint(Isolate* isolate);
140
144 static int GetCurrentDepth(Isolate* isolate);
145
149 static bool IsRunningMicrotasks(Isolate* isolate);
150
151 // Prevent copying.
154
155 private:
156 internal::Isolate* const i_isolate_;
157 internal::MicrotaskQueue* const microtask_queue_;
158 bool run_;
159};
160
161} // namespace v8
162
163#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: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:126
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:130
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