TaskQueue.cpp 827 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/HTML/EventLoop/EventLoop.h>
  7. #include <LibWeb/HTML/EventLoop/TaskQueue.h>
  8. namespace Web::HTML {
  9. TaskQueue::TaskQueue(HTML::EventLoop& event_loop)
  10. : m_event_loop(event_loop)
  11. {
  12. }
  13. TaskQueue::~TaskQueue() = default;
  14. void TaskQueue::add(NonnullOwnPtr<Task> task)
  15. {
  16. m_tasks.append(move(task));
  17. m_event_loop.schedule();
  18. }
  19. OwnPtr<Task> TaskQueue::take_first_runnable()
  20. {
  21. for (size_t i = 0; i < m_tasks.size(); ++i) {
  22. if (m_tasks[i]->is_runnable())
  23. return m_tasks.take(i);
  24. }
  25. return nullptr;
  26. }
  27. bool TaskQueue::has_runnable_tasks() const
  28. {
  29. for (auto& task : m_tasks) {
  30. if (task->is_runnable())
  31. return true;
  32. }
  33. return false;
  34. }
  35. }