123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * Copyright (c) 2024, Tim Flynn <trflynn89@ladybird.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #include <LibCore/Timer.h>
- #include <LibWeb/WebDriver/HeapTimer.h>
- namespace Web::WebDriver {
- GC_DEFINE_ALLOCATOR(HeapTimer);
- HeapTimer::HeapTimer()
- : m_timer(Core::Timer::create())
- {
- }
- HeapTimer::~HeapTimer() = default;
- void HeapTimer::visit_edges(JS::Cell::Visitor& visitor)
- {
- Base::visit_edges(visitor);
- visitor.visit(m_on_timeout);
- }
- void HeapTimer::start(u64 timeout_ms, GC::Ref<GC::Function<void()>> on_timeout)
- {
- m_on_timeout = on_timeout;
- m_timer->on_timeout = [this]() {
- m_timed_out = true;
- if (m_on_timeout) {
- m_on_timeout->function()();
- m_on_timeout = nullptr;
- }
- };
- m_timer->set_interval(static_cast<int>(timeout_ms));
- m_timer->set_single_shot(true);
- m_timer->start();
- }
- void HeapTimer::stop_and_fire_timeout_handler()
- {
- auto on_timeout = m_on_timeout;
- stop();
- if (on_timeout)
- on_timeout->function()();
- }
- void HeapTimer::stop()
- {
- m_on_timeout = nullptr;
- m_timer->stop();
- }
- }
|