| #include "vtr_time.h" |
| |
| #include "vtr_log.h" |
| #include "vtr_rusage.h" |
| |
| namespace vtr { |
| |
| int f_timer_depth = 0; |
| |
| Timer::Timer() |
| : start_(clock::now()) |
| , initial_max_rss_(get_max_rss()) { |
| } |
| |
| float Timer::elapsed_sec() const { |
| return std::chrono::duration<float>(clock::now() - start_).count(); |
| } |
| |
| float Timer::max_rss_mib() const { |
| return get_max_rss() / BYTE_TO_MIB; |
| } |
| |
| float Timer::delta_max_rss_mib() const { |
| return (get_max_rss() - initial_max_rss_) / BYTE_TO_MIB; |
| } |
| |
| ScopedActionTimer::ScopedActionTimer(std::string action_str) |
| : action_(action_str) |
| , depth_(f_timer_depth++) { |
| } |
| |
| ScopedActionTimer::~ScopedActionTimer() { |
| --f_timer_depth; |
| } |
| |
| void ScopedActionTimer::quiet(bool value) { |
| quiet_ = value; |
| } |
| |
| bool ScopedActionTimer::quiet() const { |
| return quiet_; |
| } |
| |
| std::string ScopedActionTimer::action() const { |
| return action_; |
| } |
| |
| std::string ScopedActionTimer::pad() const { |
| if (depth() == 0) { |
| return ""; |
| } |
| return std::string(depth(), '#') + " "; |
| } |
| |
| int ScopedActionTimer::depth() const { |
| return depth_; |
| } |
| |
| ScopedFinishTimer::ScopedFinishTimer(std::string action_str) |
| : ScopedActionTimer(action_str) { |
| } |
| |
| ScopedFinishTimer::~ScopedFinishTimer() { |
| if (!quiet()) { |
| vtr::printf_info("%s%s took %.2f seconds (max_rss %.1f MiB)\n", |
| pad().c_str(), action().c_str(), elapsed_sec(), |
| max_rss_mib()); |
| } |
| } |
| |
| ScopedStartFinishTimer::ScopedStartFinishTimer(std::string action_str) |
| : ScopedActionTimer(action_str) { |
| vtr::printf_info("%s%s\n", pad().c_str(), action().c_str()); |
| } |
| |
| ScopedStartFinishTimer::~ScopedStartFinishTimer() { |
| if (!quiet()) { |
| vtr::printf_info("%s%s took %.2f seconds (max_rss %.1f MiB, delta_rss %+.1f MiB)\n", |
| pad().c_str(), action().c_str(), elapsed_sec(), |
| max_rss_mib(), delta_max_rss_mib()); |
| } |
| } |
| |
| } // namespace vtr |