Serenity Operating System
at master 56 lines 1.1 kB view raw
1/* 2 * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibWeb/HTML/EventLoop/EventLoop.h> 8#include <LibWeb/HTML/EventLoop/TaskQueue.h> 9 10namespace Web::HTML { 11 12TaskQueue::TaskQueue(HTML::EventLoop& event_loop) 13 : m_event_loop(event_loop) 14{ 15} 16 17TaskQueue::~TaskQueue() = default; 18 19void TaskQueue::add(NonnullOwnPtr<Task> task) 20{ 21 m_tasks.append(move(task)); 22 m_event_loop.schedule(); 23} 24 25OwnPtr<Task> TaskQueue::take_first_runnable() 26{ 27 if (m_event_loop.execution_paused()) 28 return nullptr; 29 30 for (size_t i = 0; i < m_tasks.size(); ++i) { 31 if (m_tasks[i]->is_runnable()) 32 return m_tasks.take(i); 33 } 34 return nullptr; 35} 36 37bool TaskQueue::has_runnable_tasks() const 38{ 39 if (m_event_loop.execution_paused()) 40 return false; 41 42 for (auto& task : m_tasks) { 43 if (task->is_runnable()) 44 return true; 45 } 46 return false; 47} 48 49void TaskQueue::remove_tasks_matching(Function<bool(HTML::Task const&)> filter) 50{ 51 m_tasks.remove_all_matching([&](auto& task) { 52 return filter(*task); 53 }); 54} 55 56}