43 using Milliseconds = std::chrono::duration<double, std::milli>;
44 using TimePoint = std::chrono::high_resolution_clock::time_point;
48 explicit ScopeTimer(std::function<
void(TimePoint, TimePoint)> fn) : fn_(fn) {
49 start_ = std::chrono::high_resolution_clock::now();
58 auto end = std::chrono::high_resolution_clock::now();
64 std::function<void(TimePoint, TimePoint)> fn_;
67 template <
typename P = Milliseconds>
71 explicit DurationTimer(std::function<
void(P)> fn) : fn_(fn) { this->reset(); }
79 auto end = std::chrono::high_resolution_clock::now();
81 fn_(std::chrono::duration_cast<P>(end - start_));
86 auto previous_start = start_;
87 start_ = std::chrono::high_resolution_clock::now();
88 return std::chrono::duration_cast<P>(start_ - previous_start);
92 auto now = std::chrono::high_resolution_clock::now();
93 return std::chrono::duration_cast<P>(now - start_);
98 std::function<void(P)> fn_;