1 | #ifndef CAFFE2_CORE_TIMER_H_ |
2 | #define CAFFE2_CORE_TIMER_H_ |
3 | |
4 | #include <chrono> |
5 | |
6 | #include "caffe2/core/common.h" |
7 | |
8 | namespace caffe2 { |
9 | |
10 | /** |
11 | * @brief A simple timer object for measuring time. |
12 | * |
13 | * This is a minimal class around a std::chrono::high_resolution_clock that |
14 | * serves as a utility class for testing code. |
15 | */ |
16 | class Timer { |
17 | public: |
18 | typedef std::chrono::high_resolution_clock clock; |
19 | typedef std::chrono::nanoseconds ns; |
20 | Timer() { Start(); } |
21 | /** |
22 | * @brief Starts a timer. |
23 | */ |
24 | inline void Start() { start_time_ = clock::now(); } |
25 | inline float NanoSeconds() { |
26 | return static_cast<float>( |
27 | std::chrono::duration_cast<ns>(clock::now() - start_time_).count()); |
28 | } |
29 | /** |
30 | * @brief Returns the elapsed time in milliseconds. |
31 | */ |
32 | inline float MilliSeconds() { return NanoSeconds() / 1000000.f; } |
33 | /** |
34 | * @brief Returns the elapsed time in microseconds. |
35 | */ |
36 | inline float MicroSeconds() { return NanoSeconds() / 1000.f; } |
37 | /** |
38 | * @brief Returns the elapsed time in seconds. |
39 | */ |
40 | inline float Seconds() { return NanoSeconds() / 1000000000.f; } |
41 | |
42 | protected: |
43 | std::chrono::time_point<clock> start_time_; |
44 | C10_DISABLE_COPY_AND_ASSIGN(Timer); |
45 | }; |
46 | } |
47 | |
48 | #endif // CAFFE2_CORE_TIMER_H_ |
49 | |