ScheduledTask(Function<void()>&& function, Seconds interval, bool repeating)
     : m_function(WTFMove(function))
     , m_fireInterval(interval)
     , m_isRepeating(repeating)
 {
     updateReadyTime();
 }
void RunLoop::TimerBase::start(double fireInterval, bool repeat)
{
    auto intervalDuration = std::chrono::duration<double>(fireInterval);
    auto safeDuration = std::chrono::microseconds::max();
    if (intervalDuration < safeDuration)
        safeDuration = std::chrono::duration_cast<std::chrono::microseconds>(intervalDuration);

    m_fireInterval = safeDuration;
    m_isRepeating = repeat;
    updateReadyTime();
}
    bool fired()
    {
        if (!isActive())
            return false;

        m_function();

        if (!m_isRepeating)
            return false;

        updateReadyTime();
        return isActive();
    }