30 OFFSET_OF(MicrotaskQueue, finished_microtask_count_);
73 intptr_t microtask_queue_pointer,
99 reinterpret_cast<Address>(data)));
118 std::optional<MicrotasksScope> microtasks_scope;
125 microtasks_scope.emplace(v8_isolate,
this,
130 isolate->ClearKeptObjects();
135class SetIsRunningMicrotasks {
137 explicit SetIsRunningMicrotasks(
bool* flag) :
flag_(flag) {
142 ~SetIsRunningMicrotasks() {
165 !isolate->is_execution_terminating());
171#ifdef V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA
173 isolate->isolate_data()->continuation_preserved_embedder_data(), isolate);
174 isolate->isolate_data()->set_continuation_preserved_embedder_data(
178 int processed_microtask_count;
181 isolate->handle_scope_implementer());
186 processed_microtask_count =
190 processed_microtask_count);
193#ifdef V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA
194 isolate->isolate_data()->set_continuation_preserved_embedder_data(
195 *continuation_preserved_embedder_data);
198 if (isolate->is_execution_terminating()) {
199 DCHECK(isolate->has_exception());
206 isolate->OnTerminationDuringRunMicrotasks();
214 return processed_microtask_count;
227 static_cast<intptr_t
>(0))));
235 while (new_capacity > 2 *
size_) {
246 std::vector<CallbackWithData>* microtasks_completed_callbacks =
254 microtasks_completed_callbacks =
260 std::find(microtasks_completed_callbacks->begin(),
261 microtasks_completed_callbacks->end(), callback_with_data);
262 if (
pos != microtasks_completed_callbacks->end()) {
265 microtasks_completed_callbacks->push_back(callback_with_data);
270 std::vector<CallbackWithData>* microtasks_completed_callbacks =
278 microtasks_completed_callbacks =
284 std::find(microtasks_completed_callbacks->begin(),
285 microtasks_completed_callbacks->end(), callback_with_data);
286 if (
pos == microtasks_completed_callbacks->end()) {
289 microtasks_completed_callbacks->erase(
pos);
314 for (intptr_t
i = 0;
i <
size_; ++
i) {
static v8::internal::DirectHandle< To > OpenDirectHandle(v8::Local< From > handle)
static MaybeDirectHandle< Object > TryRunMicrotasks(Isolate *isolate, MicrotaskQueue *microtask_queue)
V8_INLINE bool is_null() const
v8::MicrotasksPolicy microtasks_policy_
~MicrotaskQueue() override
static Address CallEnqueueMicrotask(Isolate *isolate, intptr_t microtask_queue_pointer, Address raw_microtask)
void OnCompleted(Isolate *isolate)
bool is_running_completed_callbacks_
void EnqueueMicrotask(v8::Isolate *isolate, v8::Local< Function > microtask) override
void PerformCheckpointInternal(v8::Isolate *v8_isolate)
static const size_t kRingBufferOffset
static const size_t kSizeOffset
static const intptr_t kMinimumCapacity
intptr_t finished_microtask_count_
static void SetUpDefaultMicrotaskQueue(Isolate *isolate)
void IterateMicrotasks(RootVisitor *visitor)
static const size_t kCapacityOffset
std::pair< MicrotasksCompletedCallbackWithData, void * > CallbackWithData
void RemoveMicrotasksCompletedCallback(MicrotasksCompletedCallbackWithData callback, void *data) override
bool ShouldPerfomCheckpoint() const
static const size_t kFinishedMicrotaskCountOffset
int RunMicrotasks(Isolate *isolate)
Tagged< Microtask > get(intptr_t index) const
std::vector< CallbackWithData > microtasks_completed_callbacks_
void ResizeBuffer(intptr_t new_capacity)
void AddMicrotasksCompletedCallback(MicrotasksCompletedCallbackWithData callback, void *data) override
static const size_t kStartOffset
std::optional< std::vector< CallbackWithData > > microtasks_completed_callbacks_cow_
static std::unique_ptr< MicrotaskQueue > New(Isolate *isolate)
bool is_running_microtasks_
virtual void VisitRootPointers(Root root, const char *description, FullObjectSlot start, FullObjectSlot end)=0
static constexpr Tagged< Smi > zero()
V8_INLINE constexpr StorageType ptr() const
MicrotaskQueue * microtask_queue
@ kMicrotaskCallbackDataTag
V8_EXPORT_PRIVATE FlagValues v8_flags
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
void(*)(void *data) MicrotaskCallback
void(*)(Isolate *, void *) MicrotasksCompletedCallbackWithData
#define DCHECK_LE(v1, v2)
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define OFFSET_OF(type, field)
#define TRACE_EVENT_END1(category_group, name, arg1_name, arg1_val)
#define TRACE_EVENT_BEGIN0(category_group, name)
#define TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name)
#define V8_UNLIKELY(condition)