// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef DOMTimerCoordinator_h
#define DOMTimerCoordinator_h

#include "platform/heap/Handle.h"
#include "wtf/Noncopyable.h"
#include "wtf/PassOwnPtr.h"

namespace blink {

class DOMTimer;
class ExecutionContext;
class ScheduledAction;
class WebTaskRunner;

// Maintains a set of DOMTimers for a given page or
// worker. DOMTimerCoordinator assigns IDs to timers; these IDs are
// the ones returned to web authors from setTimeout or setInterval. It
// also tracks recursive creation or iterative scheduling of timers,
// which is used as a signal for throttling repetitive timers.
class DOMTimerCoordinator {
    DISALLOW_NEW();
    WTF_MAKE_NONCOPYABLE(DOMTimerCoordinator);
public:
    explicit DOMTimerCoordinator(PassOwnPtr<WebTaskRunner>);

    // Creates and installs a new timer. Returns the assigned ID.
    int installNewTimeout(ExecutionContext*, PassOwnPtrWillBeRawPtr<ScheduledAction>, int timeout, bool singleShot);

    // Removes and disposes the timer with the specified ID, if any. This may
    // destroy the timer.
    void removeTimeoutByID(int id);

    // Timers created during the execution of other timers, and
    // repeating timers, are throttled. Timer nesting level tracks the
    // number of linked timers or repetitions of a timer. See
    // https://html.spec.whatwg.org/#timers
    int timerNestingLevel() { return m_timerNestingLevel; }

    // Sets the timer nesting level. Set when a timer executes so that
    // any timers created while the timer is executing will incur a
    // deeper timer nesting level, see DOMTimer::DOMTimer.
    void setTimerNestingLevel(int level) { m_timerNestingLevel = level; }

    void setTimerTaskRunner(PassOwnPtr<WebTaskRunner>);

    WebTaskRunner* timerTaskRunner() const { return m_timerTaskRunner.get(); }

    DECLARE_TRACE(); // Oilpan.

private:
    int nextID();

    using TimeoutMap = WillBeHeapHashMap<int, RefPtrWillBeMember<DOMTimer>>;
    TimeoutMap m_timers;

    int m_circularSequentialID;
    int m_timerNestingLevel;
    OwnPtr<WebTaskRunner> m_timerTaskRunner;
};

} // namespace blink

#endif // DOMTimerCoordinator_h
