libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
elapsedtimer.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <chrono>
14#include <cstdint>
15#include <promeki/namespace.h>
16
17PROMEKI_NAMESPACE_BEGIN
18
33class ElapsedTimer {
34 public:
38 ElapsedTimer() : _valid(true), _start(std::chrono::steady_clock::now()) {}
39
43 void start() {
44 _start = std::chrono::steady_clock::now();
45 _valid = true;
46 }
47
52 int64_t restart() {
53 auto now = std::chrono::steady_clock::now();
54 int64_t ms = std::chrono::duration_cast<std::chrono::milliseconds>(now - _start).count();
55 _start = now;
56 _valid = true;
57 return ms;
58 }
59
64 int64_t elapsed() const {
65 return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() -
66 _start)
67 .count();
68 }
69
74 int64_t elapsedUs() const {
75 return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() -
76 _start)
77 .count();
78 }
79
84 int64_t elapsedNs() const {
85 return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now() -
86 _start)
87 .count();
88 }
89
95 bool hasExpired(int64_t ms) const { return elapsed() >= ms; }
96
101 bool isValid() const { return _valid; }
102
106 void invalidate() { _valid = false; }
107
108 private:
109 bool _valid;
110 std::chrono::steady_clock::time_point _start;
111};
112
113PROMEKI_NAMESPACE_END
114
115#endif // PROMEKI_ENABLE_CORE