|  | #ifndef CAFFE2_CORE_TIMER_H_ | 
|  | #define CAFFE2_CORE_TIMER_H_ | 
|  |  | 
|  | #include <chrono> | 
|  |  | 
|  | #include "caffe2/core/common.h" | 
|  |  | 
|  | namespace caffe2 { | 
|  |  | 
|  | /** | 
|  | * @brief A simple timer object for measuring time. | 
|  | * | 
|  | * This is a minimal class around a std::chrono::high_resolution_clock that | 
|  | * serves as a utility class for testing code. | 
|  | */ | 
|  | class Timer { | 
|  | public: | 
|  | typedef std::chrono::high_resolution_clock clock; | 
|  | typedef std::chrono::nanoseconds ns; | 
|  | Timer() { Start(); } | 
|  | /** | 
|  | * @brief Starts a timer. | 
|  | */ | 
|  | inline void Start() { start_time_ = clock::now(); } | 
|  | inline float NanoSeconds() { | 
|  | return static_cast<float>( | 
|  | std::chrono::duration_cast<ns>(clock::now() - start_time_).count()); | 
|  | } | 
|  | /** | 
|  | * @brief Returns the elapsed time in milliseconds. | 
|  | */ | 
|  | inline float MilliSeconds() { return NanoSeconds() / 1000000.f; } | 
|  | /** | 
|  | * @brief Returns the elapsed time in microseconds. | 
|  | */ | 
|  | inline float MicroSeconds() { return NanoSeconds() / 1000.f; } | 
|  | /** | 
|  | * @brief Returns the elapsed time in seconds. | 
|  | */ | 
|  | inline float Seconds() { return NanoSeconds() / 1000000000.f; } | 
|  |  | 
|  | protected: | 
|  | std::chrono::time_point<clock> start_time_; | 
|  | C10_DISABLE_COPY_AND_ASSIGN(Timer); | 
|  | }; | 
|  | } | 
|  |  | 
|  | #endif  // CAFFE2_CORE_TIMER_H_ |