void Microtask::performCheckpoint() { V8PerIsolateData* isolateData = V8PerIsolateData::current(); ASSERT(isolateData); if (isolateData->recursionLevel() || isolateData->performingMicrotaskCheckpoint()) return; isolateData->setPerformingMicrotaskCheckpoint(true); while (!microtaskQueue().isEmpty()) { Vector<MicrotaskCallback> microtasks; microtasks.swap(microtaskQueue()); for (size_t i = 0; i < microtasks.size(); ++i) { microtasks[i](); } } isolateData->setPerformingMicrotaskCheckpoint(false); }
void Microtask::performCheckpoint() { MicrotaskQueue& queue = microtaskQueue(); while(!queue.isEmpty()) { TRACE_EVENT0("sky", "Microtask::performCheckpoint"); MicrotaskQueue local; swap(queue, local); for (const auto& task : local) task->run(); } }
void Microtask::enqueueMicrotask(MicrotaskCallback callback) { microtaskQueue().append(callback); }
void Microtask::enqueueMicrotask(PassOwnPtr<WebThread::Task> callback) { microtaskQueue().append(callback); }