1#ifndef CAFFE2_CORE_TIMER_H_
2#define CAFFE2_CORE_TIMER_H_
3
4#include <chrono>
5
6#include "caffe2/core/common.h"
7
8namespace 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 */
16class 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