aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/Stopwatch.cpp
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-02-16 16:29:52 -0800
committerAlexander Karatarakis <alkarata@microsoft.com>2017-02-16 16:29:52 -0800
commita62558fb793a0c8e31c189f8f5eebe3fc5c83f58 (patch)
tree8cc04969f4224973794293d4a692d45eae85b69d /toolsrc/src/Stopwatch.cpp
parent8a37cd9b1d881905e34b281dcab51bc2a94ecf2c (diff)
downloadvcpkg-a62558fb793a0c8e31c189f8f5eebe3fc5c83f58.tar.gz
vcpkg-a62558fb793a0c8e31c189f8f5eebe3fc5c83f58.zip
Introduce ElapsedTime class
Diffstat (limited to 'toolsrc/src/Stopwatch.cpp')
-rw-r--r--toolsrc/src/Stopwatch.cpp100
1 files changed, 57 insertions, 43 deletions
diff --git a/toolsrc/src/Stopwatch.cpp b/toolsrc/src/Stopwatch.cpp
index ec7af60b6..4f227bb7c 100644
--- a/toolsrc/src/Stopwatch.cpp
+++ b/toolsrc/src/Stopwatch.cpp
@@ -4,46 +4,7 @@
namespace vcpkg
{
- Stopwatch Stopwatch::createUnstarted()
- {
- return Stopwatch();
- }
-
- Stopwatch Stopwatch::createStarted()
- {
- return Stopwatch().start();
- }
-
- bool Stopwatch::isRunning() const
- {
- return this->m_isRunning;
- }
-
- const Stopwatch& Stopwatch::start()
- {
- Checks::check_exit(!this->m_isRunning, "This stopwatch is already running.");
- this->m_isRunning = true;
- this->m_startTick = std::chrono::high_resolution_clock::now();
- return *this;
- }
-
- const Stopwatch& Stopwatch::stop()
- {
- auto tick = std::chrono::high_resolution_clock::now();
- Checks::check_exit(this->m_isRunning, "This stopwatch is already stopped.");
- this->m_isRunning = false;
- this->m_elapsedNanos += tick - this->m_startTick;
- return *this;
- }
-
- Stopwatch& Stopwatch::reset()
- {
- this->m_elapsedNanos = std::chrono::nanoseconds();
- this->m_isRunning = false;
- return *this;
- }
-
- std::string Stopwatch::toString() const
+ static std::string format_time_userfriendly(const std::chrono::nanoseconds& nanos)
{
using std::chrono::hours;
using std::chrono::minutes;
@@ -53,8 +14,7 @@ namespace vcpkg
using std::chrono::nanoseconds;
using std::chrono::duration_cast;
- auto nanos = elapsedNanos();
- auto nanos_as_double = static_cast<double>(nanos.count());
+ const double nanos_as_double = static_cast<double>(nanos.count());
if (duration_cast<hours>(nanos) > hours())
{
@@ -89,10 +49,64 @@ namespace vcpkg
return Strings::format("%.4g ns", nanos_as_double);
}
- Stopwatch::Stopwatch() : m_isRunning(false), m_elapsedNanos(0), m_startTick()
+ ElapsedTime ElapsedTime::createStarted()
{
+ ElapsedTime t;
+ t.m_startTick = std::chrono::high_resolution_clock::now();
+ return t;
}
+ std::string ElapsedTime::toString() const
+ {
+ return format_time_userfriendly(elapsed<std::chrono::nanoseconds>());
+ }
+
+ Stopwatch Stopwatch::createUnstarted()
+ {
+ return Stopwatch();
+ }
+
+ Stopwatch Stopwatch::createStarted()
+ {
+ return Stopwatch().start();
+ }
+
+ bool Stopwatch::isRunning() const
+ {
+ return this->m_isRunning;
+ }
+
+ const Stopwatch& Stopwatch::start()
+ {
+ Checks::check_exit(!this->m_isRunning, "This stopwatch is already running.");
+ this->m_isRunning = true;
+ this->m_startTick = std::chrono::high_resolution_clock::now();
+ return *this;
+ }
+
+ const Stopwatch& Stopwatch::stop()
+ {
+ auto tick = std::chrono::high_resolution_clock::now();
+ Checks::check_exit(this->m_isRunning, "This stopwatch is already stopped.");
+ this->m_isRunning = false;
+ this->m_elapsedNanos += tick - this->m_startTick;
+ return *this;
+ }
+
+ Stopwatch& Stopwatch::reset()
+ {
+ this->m_elapsedNanos = std::chrono::nanoseconds();
+ this->m_isRunning = false;
+ return *this;
+ }
+
+ std::string Stopwatch::toString() const
+ {
+ return format_time_userfriendly(this->elapsedNanos());
+ }
+
+ Stopwatch::Stopwatch() : m_isRunning(false), m_elapsedNanos(0), m_startTick() { }
+
std::chrono::nanoseconds Stopwatch::elapsedNanos() const
{
if (this->m_isRunning)