diff options
Diffstat (limited to 'metrics')
-rw-r--r-- | metrics/src/vespa/metrics/metrictimer.cpp | 9 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/metrictimer.h | 24 |
2 files changed, 25 insertions, 8 deletions
diff --git a/metrics/src/vespa/metrics/metrictimer.cpp b/metrics/src/vespa/metrics/metrictimer.cpp index 84d4844104d..a3b0f215d58 100644 --- a/metrics/src/vespa/metrics/metrictimer.cpp +++ b/metrics/src/vespa/metrics/metrictimer.cpp @@ -3,13 +3,18 @@ namespace metrics { -MetricTimer::MetricTimer() +MetricTimer::MetricTimer() noexcept + : _startTime(std::chrono::steady_clock::now()) { // Amusingly enough, steady_clock was not actually steady by default on // GCC < 4.8.1, so add a bit of compile-time paranoia just to make sure. static_assert(std::chrono::steady_clock::is_steady, "Old/broken STL implementation; steady_clock not steady"); - _startTime = std::chrono::steady_clock::now(); +} + +MetricTimer::MetricTimer(std::chrono::steady_clock::time_point start_time) noexcept + : _startTime(start_time) +{ } } // metrics diff --git a/metrics/src/vespa/metrics/metrictimer.h b/metrics/src/vespa/metrics/metrictimer.h index 8a338432362..133cd819489 100644 --- a/metrics/src/vespa/metrics/metrictimer.h +++ b/metrics/src/vespa/metrics/metrictimer.h @@ -15,7 +15,19 @@ namespace metrics { class MetricTimer { public: - MetricTimer(); + // Start time point set by system steady clock + MetricTimer() noexcept; + // Start time point explicitly given + explicit MetricTimer(std::chrono::steady_clock::time_point start_time) noexcept; + + template<typename AvgVal, typename TotVal, bool SumOnAdd> + AvgVal stop(std::chrono::steady_clock::time_point now, ValueMetric<AvgVal, TotVal, SumOnAdd>& metric) const { + const auto delta = now - _startTime; + using ToDuration = std::chrono::duration<AvgVal, std::milli>; + const auto deltaMs(std::chrono::duration_cast<ToDuration>(delta).count()); + metric.addValue(deltaMs); + return deltaMs; + } /** * Adds ms passed since this timer was constructed to given value metric. @@ -26,11 +38,11 @@ public: */ template<typename AvgVal, typename TotVal, bool SumOnAdd> AvgVal stop(ValueMetric<AvgVal, TotVal, SumOnAdd>& metric) const { - const auto delta = std::chrono::steady_clock::now() - _startTime; - using ToDuration = std::chrono::duration<AvgVal, std::milli>; - const auto deltaMs(std::chrono::duration_cast<ToDuration>(delta).count()); - metric.addValue(deltaMs); - return deltaMs; + return stop(std::chrono::steady_clock::now(), metric); + } + + [[nodiscard]] std::chrono::steady_clock::time_point start_time() const noexcept { + return _startTime; } private: |