From f5759c51497be0c3617ea89397029496ecf7bfda Mon Sep 17 00:00:00 2001 From: Alex Dale Date: Thu, 4 Nov 2021 18:33:51 -0700 Subject: [PATCH] Updated metric Distribution and Timer utils. [ Merge of http://go/wvgerrit/137811 ] Renamed TimerMetric to Timer. Timer is used to generate durations included in metrics, but is not a metric itself. The method of getting the current time did not require creating an instance of std::steady_clock. Updated Distribution and Timer to use default initializers instead of constructor initialization list. Bug: 204946540 Test: Metric unit tests Change-Id: I7ed291b586347dd0b7ab305960883bec04637315 --- libwvdrmengine/cdm/core/include/cdm_session.h | 4 ++-- .../cdm/core/include/crypto_session.h | 2 +- .../cdm/metrics/include/distribution.h | 16 +++++++------- .../cdm/metrics/include/metrics_collections.h | 4 ++-- .../cdm/metrics/include/timer_metric.h | 8 +++---- .../cdm/metrics/src/distribution.cpp | 18 +++------------- .../cdm/metrics/src/timer_metric.cpp | 21 ++++++++++++------- 7 files changed, 33 insertions(+), 40 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/cdm_session.h b/libwvdrmengine/cdm/core/include/cdm_session.h index 226f6c80..11a4a498 100644 --- a/libwvdrmengine/cdm/core/include/cdm_session.h +++ b/libwvdrmengine/cdm/core/include/cdm_session.h @@ -266,8 +266,8 @@ class CdmSession { // instance variables std::shared_ptr metrics_; metrics::CryptoMetrics* crypto_metrics_; - metrics::TimerMetric life_span_; - metrics::TimerMetric license_request_latency_; + metrics::Timer life_span_; + metrics::Timer license_request_latency_; CdmKeyRequestType key_request_type_; bool initialized_; diff --git a/libwvdrmengine/cdm/core/include/crypto_session.h b/libwvdrmengine/cdm/core/include/crypto_session.h index 23ed6a0c..0050dba8 100644 --- a/libwvdrmengine/cdm/core/include/crypto_session.h +++ b/libwvdrmengine/cdm/core/include/crypto_session.h @@ -479,7 +479,7 @@ class CryptoSession { }; metrics::CryptoMetrics* metrics_; - metrics::TimerMetric life_span_; + metrics::Timer life_span_; uint32_t system_id_; bool open_; diff --git a/libwvdrmengine/cdm/metrics/include/distribution.h b/libwvdrmengine/cdm/metrics/include/distribution.h index 85aae776..6aeeb9b6 100644 --- a/libwvdrmengine/cdm/metrics/include/distribution.h +++ b/libwvdrmengine/cdm/metrics/include/distribution.h @@ -4,12 +4,12 @@ // // This file contains the definition of a Distribution class which computes // the distribution values of a series of samples. - #ifndef WVCDM_METRICS_DISTRIBUTION_H_ #define WVCDM_METRICS_DISTRIBUTION_H_ - #include +#include + namespace wvcdm { namespace metrics { // The Distribution class holds statistics about a series of values that the @@ -25,7 +25,7 @@ namespace metrics { // dist.Count(); // Returns 2. class Distribution { public: - Distribution(); + Distribution() {} // Uses the provided sample value to update the computed statistics. void Record(float value); @@ -41,11 +41,11 @@ class Distribution { } private: - uint64_t count_; - float min_; - float max_; - float mean_; - double sum_squared_deviation_; + uint64_t count_ = 0; + float min_ = std::numeric_limits::max(); + float max_ = std::numeric_limits::lowest(); + float mean_ = 0.0f; + double sum_squared_deviation_ = 0.0; }; } // namespace metrics } // namespace wvcdm diff --git a/libwvdrmengine/cdm/metrics/include/metrics_collections.h b/libwvdrmengine/cdm/metrics/include/metrics_collections.h index 5598d5a6..f4e5a73f 100644 --- a/libwvdrmengine/cdm/metrics/include/metrics_collections.h +++ b/libwvdrmengine/cdm/metrics/include/metrics_collections.h @@ -51,7 +51,7 @@ // sts); #define M_TIME(CALL, GROUP, METRIC, ...) \ if (GROUP) { \ - wvcdm::metrics::TimerMetric timer; \ + wvcdm::metrics::Timer timer; \ timer.Start(); \ CALL; \ (GROUP)->METRIC.Record(timer.AsUs(), ##__VA_ARGS__); \ @@ -488,7 +488,7 @@ class EngineMetrics { std::vector> completed_session_metrics_list_; // This is used to populate the engine lifespan metric - metrics::TimerMetric life_span_internal_; + metrics::Timer life_span_internal_; CryptoMetrics crypto_metrics_; std::string app_package_name_; diff --git a/libwvdrmengine/cdm/metrics/include/timer_metric.h b/libwvdrmengine/cdm/metrics/include/timer_metric.h index 01b9777d..f2b59e73 100644 --- a/libwvdrmengine/cdm/metrics/include/timer_metric.h +++ b/libwvdrmengine/cdm/metrics/include/timer_metric.h @@ -7,10 +7,9 @@ namespace wvcdm { namespace metrics { -class TimerMetric { +class Timer { public: - // Constructs a new TimerMetric. - explicit TimerMetric() : is_started_(false) {} + Timer() {} // Starts the clock running. If the clock was previously set, this resets it. // IsStarted will return true after this call. void Start(); @@ -25,9 +24,8 @@ class TimerMetric { double AsUs() const; private: - std::chrono::steady_clock clock_; std::chrono::time_point start_; - bool is_started_; + bool is_started_ = false; }; } // namespace metrics } // namespace wvcdm diff --git a/libwvdrmengine/cdm/metrics/src/distribution.cpp b/libwvdrmengine/cdm/metrics/src/distribution.cpp index b55bac67..7f0f5fe0 100644 --- a/libwvdrmengine/cdm/metrics/src/distribution.cpp +++ b/libwvdrmengine/cdm/metrics/src/distribution.cpp @@ -3,27 +3,15 @@ // Agreement. // // This file contains the definitions for the Distribution class members. - #include "distribution.h" -#include - namespace wvcdm { namespace metrics { -Distribution::Distribution() - : count_(0ULL), - min_(FLT_MAX), - max_(-FLT_MAX), - mean_(0.0), - sum_squared_deviation_(0.0) {} - void Distribution::Record(float value) { // Using method of provisional means. - float deviation = value - mean_; - mean_ = mean_ + (deviation / ++count_); - sum_squared_deviation_ = - sum_squared_deviation_ + (deviation * (value - mean_)); - + const float deviation = value - mean_; + mean_ += (deviation / ++count_); + sum_squared_deviation_ += (deviation * (value - mean_)); min_ = min_ < value ? min_ : value; max_ = max_ > value ? max_ : value; } diff --git a/libwvdrmengine/cdm/metrics/src/timer_metric.cpp b/libwvdrmengine/cdm/metrics/src/timer_metric.cpp index 6c0a2541..8ca8b1d9 100644 --- a/libwvdrmengine/cdm/metrics/src/timer_metric.cpp +++ b/libwvdrmengine/cdm/metrics/src/timer_metric.cpp @@ -5,19 +5,26 @@ namespace wvcdm { namespace metrics { -void TimerMetric::Start() { - start_ = clock_.now(); +using ClockType = std::chrono::steady_clock; +using TimePoint = std::chrono::time_point; + +void Timer::Start() { + start_ = ClockType::now(); is_started_ = true; } -void TimerMetric::Clear() { is_started_ = false; } +void Timer::Clear() { is_started_ = false; } -double TimerMetric::AsMs() const { - return (clock_.now() - start_) / std::chrono::milliseconds(1); +double Timer::AsMs() const { + if (!is_started_) return 0.0; + const TimePoint end = ClockType::now(); + return (end - start_) / std::chrono::milliseconds(1); } -double TimerMetric::AsUs() const { - return (clock_.now() - start_) / std::chrono::microseconds(1); +double Timer::AsUs() const { + if (!is_started_) return 0.0; + const TimePoint end = ClockType::now(); + return (end - start_) / std::chrono::microseconds(1); } } // namespace metrics } // namespace wvcdm