You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

timer.h 1.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include "test/common/utils.h"
  3. #include <chrono>
  4. namespace megdnn {
  5. namespace test {
  6. class Timer {
  7. private:
  8. using clock = std::chrono::high_resolution_clock;
  9. using time_point = clock::time_point;
  10. public:
  11. Timer() { reset(); }
  12. void reset() {
  13. m_started = false;
  14. m_stopped = false;
  15. }
  16. void start() {
  17. megdnn_assert(!m_started);
  18. megdnn_assert(!m_stopped);
  19. m_started = true;
  20. m_start_point = clock::now();
  21. }
  22. void stop() {
  23. megdnn_assert(m_started);
  24. megdnn_assert(!m_stopped);
  25. m_stopped = true;
  26. m_stop_point = clock::now();
  27. }
  28. size_t get_time_in_us() const {
  29. return std::chrono::duration_cast<std::chrono::microseconds>(
  30. m_stop_point - m_start_point)
  31. .count();
  32. }
  33. private:
  34. bool m_started, m_stopped;
  35. time_point m_start_point, m_stop_point;
  36. };
  37. class Timer2 {
  38. std::chrono::high_resolution_clock::time_point m_start;
  39. public:
  40. Timer2() { reset(); }
  41. void reset() { m_start = std::chrono::high_resolution_clock::now(); }
  42. double get_secs() const {
  43. auto now = std::chrono::high_resolution_clock::now();
  44. return std::chrono::duration_cast<std::chrono::nanoseconds>(now - m_start)
  45. .count() *
  46. 1e-9;
  47. }
  48. double get_msecs() const { return get_secs() * 1e3; }
  49. double get_secs_reset() {
  50. auto ret = get_secs();
  51. reset();
  52. return ret;
  53. }
  54. double get_msecs_reset() { return get_secs_reset() * 1e3; }
  55. };
  56. } // namespace test
  57. } // namespace megdnn
  58. // vim: syntax=cpp.doxygen