#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(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