#include "pch.h" #include "vcpkg_Chrono.h" #include "vcpkg_Checks.h" namespace vcpkg { static std::string format_time_userfriendly(const std::chrono::nanoseconds& nanos) { using std::chrono::hours; using std::chrono::minutes; using std::chrono::seconds; using std::chrono::milliseconds; using std::chrono::microseconds; using std::chrono::nanoseconds; using std::chrono::duration_cast; const double nanos_as_double = static_cast(nanos.count()); if (duration_cast(nanos) > hours()) { auto t = nanos_as_double / duration_cast(hours(1)).count(); return Strings::format("%.4g h", t); } if (duration_cast(nanos) > minutes()) { auto t = nanos_as_double / duration_cast(minutes(1)).count(); return Strings::format("%.4g min", t); } if (duration_cast(nanos) > seconds()) { auto t = nanos_as_double / duration_cast(seconds(1)).count(); return Strings::format("%.4g s", t); } if (duration_cast(nanos) > milliseconds()) { auto t = nanos_as_double / duration_cast(milliseconds(1)).count(); return Strings::format("%.4g ms", t); } if (duration_cast(nanos) > microseconds()) { auto t = nanos_as_double / duration_cast(microseconds(1)).count(); return Strings::format("%.4g us", t); } return Strings::format("%.4g ns", nanos_as_double); } ElapsedTime ElapsedTime::create_started() { ElapsedTime t; t.m_start_tick = std::chrono::high_resolution_clock::now(); return t; } std::string ElapsedTime::to_string() const { return format_time_userfriendly(elapsed()); } }