LCOV - code coverage report
Current view: top level - envoy/event - timer.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 3 3 100.0 %
Date: 2024-01-05 06:35:25 Functions: 3 3 100.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <chrono>
       4             : #include <functional>
       5             : #include <memory>
       6             : 
       7             : #include "envoy/common/pure.h"
       8             : #include "envoy/common/time.h"
       9             : #include "envoy/event/schedulable_cb.h"
      10             : 
      11             : namespace Envoy {
      12             : 
      13             : class ScopeTrackedObject;
      14             : 
      15             : namespace Event {
      16             : 
      17             : class Dispatcher;
      18             : 
      19             : /**
      20             :  * Callback invoked when a timer event fires.
      21             :  */
      22             : using TimerCb = std::function<void()>;
      23             : 
      24             : /**
      25             :  * An abstract timer event. Free the timer to unregister any pending timeouts. Must be freed before
      26             :  * the dispatcher is torn down.
      27             :  */
      28             : class Timer {
      29             : public:
      30       12960 :   virtual ~Timer() = default;
      31             : 
      32             :   /**
      33             :    * Disable a pending timeout without destroying the underlying timer.
      34             :    */
      35             :   virtual void disableTimer() PURE;
      36             : 
      37             :   /**
      38             :    * Enable a pending timeout. If a timeout is already pending, it will be reset to the new timeout.
      39             :    *
      40             :    * @param ms supplies the duration of the alarm in milliseconds.
      41             :    * @param object supplies an optional scope for the duration of the alarm.
      42             :    */
      43             :   virtual void enableTimer(std::chrono::milliseconds ms,
      44             :                            const ScopeTrackedObject* object = nullptr) PURE;
      45             : 
      46             :   /**
      47             :    * Enable a pending high resolution timeout. If a timeout is already pending, it will be reset to
      48             :    * the new timeout.
      49             :    *
      50             :    * @param us supplies the duration of the alarm in microseconds.
      51             :    * @param object supplies an optional scope for the duration of the alarm.
      52             :    */
      53             :   virtual void enableHRTimer(std::chrono::microseconds us,
      54             :                              const ScopeTrackedObject* object = nullptr) PURE;
      55             :   /**
      56             :    * Return whether the timer is currently armed.
      57             :    */
      58             :   virtual bool enabled() PURE;
      59             : };
      60             : 
      61             : using TimerPtr = std::unique_ptr<Timer>;
      62             : 
      63             : class Scheduler {
      64             : public:
      65        2996 :   virtual ~Scheduler() = default;
      66             : 
      67             :   /**
      68             :    * Creates a timer.
      69             :    */
      70             :   virtual TimerPtr createTimer(const TimerCb& cb, Dispatcher& dispatcher) PURE;
      71             : };
      72             : 
      73             : using SchedulerPtr = std::unique_ptr<Scheduler>;
      74             : 
      75             : /**
      76             :  * Interface providing a mechanism to measure time and set timers that run callbacks
      77             :  * when the timer fires.
      78             :  */
      79             : class TimeSystem : public TimeSource {
      80             : public:
      81       10995 :   ~TimeSystem() override = default;
      82             : 
      83             :   using Duration = MonotonicTime::duration;
      84             :   using Nanoseconds = std::chrono::nanoseconds;
      85             :   using Microseconds = std::chrono::microseconds;
      86             :   using Milliseconds = std::chrono::milliseconds;
      87             :   using Seconds = std::chrono::seconds;
      88             : 
      89             :   /**
      90             :    * Creates a timer factory. This indirection enables thread-local timer-queue management,
      91             :    * so servers can have a separate timer-factory in each thread.
      92             :    */
      93             :   virtual SchedulerPtr createScheduler(Scheduler& base_scheduler,
      94             :                                        CallbackScheduler& cb_scheduler) PURE;
      95             : };
      96             : 
      97             : } // namespace Event
      98             : } // namespace Envoy

Generated by: LCOV version 1.15