10 #ifndef CTRL_UTILS_TIMER_H_
11 #define CTRL_UTILS_TIMER_H_
27 using Seconds = std::chrono::duration<double>;
28 using Clock = std::chrono::steady_clock;
47 double freq()
const {
return 1 /
dt(); }
59 return std::chrono::duration_cast<Seconds>(dt_interval_).count();
66 dt_interval_ = std::chrono::duration_cast<Clock::duration>(Seconds(
dt));
73 double time(
bool update =
false)
const {
74 if (update) t_curr_ = Clock::now();
75 return std::chrono::duration_cast<Seconds>(t_curr_.time_since_epoch())
84 if (update) t_curr_ = Clock::now();
85 return std::chrono::duration_cast<Seconds>(t_curr_ - t_start_).count();
93 return std::chrono::duration_cast<Seconds>(t_next_ - t_start_).count();
105 unsigned long long num_iters()
const {
return num_iters_; }
114 t_start_ = Clock::now();
116 t_next_ = t_start_ + dt_interval_;
125 t_curr_ = Clock::now();
132 if (t_curr_ < t_next_) {
133 std::this_thread::sleep_for(t_next_ - t_curr_);
135 t_next_ += dt_interval_;
141 Clock::time_point t_start_;
142 mutable Clock::time_point t_curr_;
143 Clock::time_point t_next_;
144 unsigned long long num_iters_ = 0;
146 bool initialized_ =
false;
147 Clock::duration dt_interval_ = std::chrono::milliseconds(1);
double average_freq() const
Definition: timer.h:99
Timer(double frequency)
Definition: timer.h:41
void set_freq(double frequency)
Definition: timer.h:52
double time(bool update=false) const
Definition: timer.h:73
unsigned long long num_iters() const
Definition: timer.h:105
void Sleep()
Definition: timer.h:124
double freq() const
Definition: timer.h:47
Timer()
Definition: timer.h:33
void set_dt(double dt)
Definition: timer.h:65
void Reset()
Definition: timer.h:112
double time_elapsed(bool update=false) const
Definition: timer.h:83
double dt() const
Definition: timer.h:58
double time_sim() const
Definition: timer.h:92
Definition: ctrl_utils.cc:18