Refactored metrics to support pull model.
MetricsGroup split into 3 groups, session, engine, and crypto. MetricsFrontEnd and Report removed. This is a merge from wvgerrit/28420 Bug: 36217927 Test: Added unit tests to cover modified code. Change-Id: I2f39f99ce88cc2229d6d1aa9459c67c5b86ccef4
This commit is contained in:
@@ -32,24 +32,24 @@ void BaseEventMetric::Record(const std::string& field_names_values,
|
||||
distribution->Record(value);
|
||||
}
|
||||
|
||||
void BaseEventMetric::Publish(MetricNotification* notification) {
|
||||
void BaseEventMetric::Serialize(MetricSerializer* serializer) {
|
||||
AutoLock lock(internal_lock_);
|
||||
|
||||
for (std::map<std::string, Distribution*>::iterator it
|
||||
= value_map_.begin(); it != value_map_.end(); it++) {
|
||||
notification->UpdateInt64(
|
||||
serializer->SetInt64(
|
||||
metric_name_ + "/count" + it->first,
|
||||
it->second->Count());
|
||||
notification->UpdateDouble(
|
||||
serializer->SetDouble(
|
||||
metric_name_ + "/mean" + it->first,
|
||||
it->second->Mean());
|
||||
notification->UpdateDouble(
|
||||
serializer->SetDouble(
|
||||
metric_name_ + "/variance" + it->first,
|
||||
it->second->Variance());
|
||||
notification->UpdateDouble(
|
||||
serializer->SetDouble(
|
||||
metric_name_ + "/min" + it->first,
|
||||
it->second->Min());
|
||||
notification->UpdateDouble(
|
||||
serializer->SetDouble(
|
||||
metric_name_ + "/max" + it->first,
|
||||
it->second->Max());
|
||||
}
|
||||
|
||||
@@ -1,75 +1,27 @@
|
||||
// Copyright 2016 Google Inc. All Rights Reserved.
|
||||
|
||||
#include "metrics_group.h"
|
||||
#include "metrics_collections.h"
|
||||
|
||||
#include "metrics_front_end.h"
|
||||
#include <algorithm>
|
||||
|
||||
namespace {
|
||||
// Helper struct for comparing session ids.
|
||||
struct CompareSessionIds {
|
||||
const std::string& target_;
|
||||
|
||||
CompareSessionIds(const wvcdm::CdmSessionId& target) : target_(target) {};
|
||||
|
||||
bool operator()(const wvcdm::metrics::SessionMetrics* metrics) const {
|
||||
return metrics->GetSessionId() == target_;
|
||||
}
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
namespace wvcdm {
|
||||
namespace metrics {
|
||||
|
||||
MetricsGroup::MetricsGroup() :
|
||||
cdm_engine_add_key_(
|
||||
"/drm/widevine/cdm_engine/add_key/time",
|
||||
"error"),
|
||||
cdm_engine_close_session_(
|
||||
"/drm/widevine/cdm_engine/close_session/time",
|
||||
"error"),
|
||||
cdm_engine_decrypt_(
|
||||
"/drm/widevine/cdm_engine/decrypt/time",
|
||||
"error"),
|
||||
cdm_engine_find_session_for_key_(
|
||||
"/drm/widevine/cdm_engine/find_session_for_key/time",
|
||||
"success"),
|
||||
cdm_engine_generate_key_request_(
|
||||
"/drm/widevine/cdm_engine/generate_key_request/time",
|
||||
"error"),
|
||||
cdm_engine_get_provisioning_request_(
|
||||
"/drm/widevine/cdm_engine/get_provisioning_request/time",
|
||||
"error"),
|
||||
cdm_engine_get_usage_info_(
|
||||
"/drm/widevine/cdm_engine/get_usage_info/time",
|
||||
"error"),
|
||||
cdm_engine_handle_provisioning_response_(
|
||||
"/drm/widevine/cdm_engine/handle_provisioning_response/time",
|
||||
"error"),
|
||||
cdm_engine_life_span_(
|
||||
"/drm/widevine/cdm_engine/life_span/time"),
|
||||
cdm_engine_open_key_set_session_(
|
||||
"/drm/widevine/cdm_engine/open_key_set_session/time",
|
||||
"error"),
|
||||
cdm_engine_open_session_(
|
||||
"/drm/widevine/cdm_engine/open_session/time",
|
||||
"error"),
|
||||
cdm_engine_query_key_status_(
|
||||
"/drm/widevine/cdm_engine/query_key_status/time",
|
||||
"error"),
|
||||
cdm_engine_release_all_usage_info_(
|
||||
"/drm/widevine/cdm_engine/release_all_usage_info/time",
|
||||
"error"),
|
||||
cdm_engine_release_usage_info_(
|
||||
"/drm/widevine/cdm_engine/release_usage_info/time",
|
||||
"error"),
|
||||
cdm_engine_remove_keys_(
|
||||
"/drm/widevine/cdm_engine/remove_keys/time",
|
||||
"error"),
|
||||
cdm_engine_restore_key_(
|
||||
"/drm/widevine/cdm_engine/restore_key/time",
|
||||
"error"),
|
||||
cdm_engine_unprovision_(
|
||||
"/drm/widevine/cdm_engine/unprovision/time",
|
||||
"error",
|
||||
"security_level"),
|
||||
cdm_session_life_span_(
|
||||
"/drm/widevine/cdm_session/life_span/time"),
|
||||
cdm_session_renew_key_(
|
||||
"/drm/widevine/cdm_session/renew_key/time",
|
||||
"error"),
|
||||
cdm_session_restore_offline_session_(
|
||||
"/drm/widevine/cdm_session/restore_offline_session/time",
|
||||
"error"),
|
||||
cdm_session_restore_usage_session_(
|
||||
"/drm/widevine/cdm_session/restore_usage_session/time",
|
||||
"error"),
|
||||
CryptoMetrics::CryptoMetrics() :
|
||||
crypto_session_delete_all_usage_reports_(
|
||||
"/drm/widevine/crypto_session/delete_all_usage_reports/time",
|
||||
"error"),
|
||||
@@ -287,99 +239,106 @@ MetricsGroup::MetricsGroup() :
|
||||
oemcrypto_l1_api_version_(
|
||||
"/drm/widevine/oemcrypto/l1_api_version",
|
||||
"version",
|
||||
"min_version") { }
|
||||
"min_version") {}
|
||||
|
||||
MetricsGroup::~MetricsGroup() {
|
||||
#if 0 // Disable metrics for now to work around P0:b/35093325
|
||||
MetricNotification* subscriber = MFE.CreateSubscriber();
|
||||
if (subscriber) {
|
||||
Publish(subscriber);
|
||||
SessionMetrics::SessionMetrics() :
|
||||
cdm_session_life_span_(
|
||||
"/drm/widevine/cdm_session/life_span/time"),
|
||||
cdm_session_renew_key_(
|
||||
"/drm/widevine/cdm_session/renew_key/time",
|
||||
"error"),
|
||||
cdm_session_restore_offline_session_(
|
||||
"/drm/widevine/cdm_session/restore_offline_session/time",
|
||||
"error"),
|
||||
cdm_session_restore_usage_session_(
|
||||
"/drm/widevine/cdm_session/restore_usage_session/time",
|
||||
"error"),
|
||||
completed_(false) {
|
||||
}
|
||||
|
||||
EngineMetrics::EngineMetrics() :
|
||||
cdm_engine_add_key_(
|
||||
"/drm/widevine/cdm_engine/add_key/time",
|
||||
"error"),
|
||||
cdm_engine_close_session_(
|
||||
"/drm/widevine/cdm_engine/close_session/time",
|
||||
"error"),
|
||||
cdm_engine_decrypt_(
|
||||
"/drm/widevine/cdm_engine/decrypt/time",
|
||||
"error"),
|
||||
cdm_engine_find_session_for_key_(
|
||||
"/drm/widevine/cdm_engine/find_session_for_key/time",
|
||||
"success"),
|
||||
cdm_engine_generate_key_request_(
|
||||
"/drm/widevine/cdm_engine/generate_key_request/time",
|
||||
"error"),
|
||||
cdm_engine_get_provisioning_request_(
|
||||
"/drm/widevine/cdm_engine/get_provisioning_request/time",
|
||||
"error"),
|
||||
cdm_engine_get_usage_info_(
|
||||
"/drm/widevine/cdm_engine/get_usage_info/time",
|
||||
"error"),
|
||||
cdm_engine_handle_provisioning_response_(
|
||||
"/drm/widevine/cdm_engine/handle_provisioning_response/time",
|
||||
"error"),
|
||||
cdm_engine_life_span_(
|
||||
"/drm/widevine/cdm_engine/life_span/time"),
|
||||
cdm_engine_open_key_set_session_(
|
||||
"/drm/widevine/cdm_engine/open_key_set_session/time",
|
||||
"error"),
|
||||
cdm_engine_open_session_(
|
||||
"/drm/widevine/cdm_engine/open_session/time",
|
||||
"error"),
|
||||
cdm_engine_query_key_status_(
|
||||
"/drm/widevine/cdm_engine/query_key_status/time",
|
||||
"error"),
|
||||
cdm_engine_release_all_usage_info_(
|
||||
"/drm/widevine/cdm_engine/release_all_usage_info/time",
|
||||
"error"),
|
||||
cdm_engine_release_usage_info_(
|
||||
"/drm/widevine/cdm_engine/release_usage_info/time",
|
||||
"error"),
|
||||
cdm_engine_remove_keys_(
|
||||
"/drm/widevine/cdm_engine/remove_keys/time",
|
||||
"error"),
|
||||
cdm_engine_restore_key_(
|
||||
"/drm/widevine/cdm_engine/restore_key/time",
|
||||
"error"),
|
||||
cdm_engine_unprovision_(
|
||||
"/drm/widevine/cdm_engine/unprovision/time",
|
||||
"error",
|
||||
"security_level") {
|
||||
}
|
||||
|
||||
EngineMetrics::~EngineMetrics() {
|
||||
AutoLock kock(session_metrics_lock_);
|
||||
std::vector<SessionMetrics*>::iterator i;
|
||||
for (i = session_metrics_list_.begin(); i != session_metrics_list_.end();
|
||||
i++) {
|
||||
delete *i;
|
||||
}
|
||||
delete subscriber;
|
||||
#endif
|
||||
session_metrics_list_.clear();
|
||||
}
|
||||
|
||||
void MetricsGroup::Publish(MetricNotification* subscriber) {
|
||||
cdm_engine_add_key_.Publish(subscriber);
|
||||
cdm_engine_close_session_.Publish(subscriber);
|
||||
cdm_engine_decrypt_.Publish(subscriber);
|
||||
cdm_engine_find_session_for_key_.Publish(subscriber);
|
||||
cdm_engine_generate_key_request_.Publish(subscriber);
|
||||
cdm_engine_get_provisioning_request_.Publish(subscriber);
|
||||
cdm_engine_get_usage_info_.Publish(subscriber);
|
||||
cdm_engine_handle_provisioning_response_.Publish(subscriber);
|
||||
cdm_engine_life_span_.Publish(subscriber);
|
||||
cdm_engine_open_key_set_session_.Publish(subscriber);
|
||||
cdm_engine_open_session_.Publish(subscriber);
|
||||
cdm_engine_query_key_status_.Publish(subscriber);
|
||||
cdm_engine_release_all_usage_info_.Publish(subscriber);
|
||||
cdm_engine_release_usage_info_.Publish(subscriber);
|
||||
cdm_engine_remove_keys_.Publish(subscriber);
|
||||
cdm_engine_restore_key_.Publish(subscriber);
|
||||
cdm_engine_unprovision_.Publish(subscriber);
|
||||
cdm_session_life_span_.Publish(subscriber);
|
||||
cdm_session_renew_key_.Publish(subscriber);
|
||||
cdm_session_restore_offline_session_.Publish(subscriber);
|
||||
cdm_session_restore_usage_session_.Publish(subscriber);
|
||||
crypto_session_delete_all_usage_reports_.Publish(subscriber);
|
||||
crypto_session_delete_multiple_usage_information_.Publish(subscriber);
|
||||
crypto_session_generic_decrypt_.Publish(subscriber);
|
||||
crypto_session_generic_sign_.Publish(subscriber);
|
||||
crypto_session_generic_verify_.Publish(subscriber);
|
||||
crypto_session_get_device_unique_id_.Publish(subscriber);
|
||||
crypto_session_get_security_level_.Publish(subscriber);
|
||||
crypto_session_get_system_id_.Publish(subscriber);
|
||||
crypto_session_get_token_.Publish(subscriber);
|
||||
crypto_session_life_span_.Publish(subscriber);
|
||||
crypto_session_load_certificate_private_key_.Publish(subscriber);
|
||||
crypto_session_open_.Publish(subscriber);
|
||||
crypto_session_update_usage_information_.Publish(subscriber);
|
||||
crypto_session_usage_information_support_.Publish(subscriber);
|
||||
oemcrypto_api_version_.Publish(subscriber);
|
||||
oemcrypto_close_session_.Publish(subscriber);
|
||||
oemcrypto_copy_buffer_.Publish(subscriber);
|
||||
oemcrypto_deactivate_usage_entry_.Publish(subscriber);
|
||||
oemcrypto_decrypt_cenc_.Publish(subscriber);
|
||||
oemcrypto_delete_usage_entry_.Publish(subscriber);
|
||||
oemcrypto_delete_usage_table_.Publish(subscriber);
|
||||
oemcrypto_derive_keys_from_session_key_.Publish(subscriber);
|
||||
oemcrypto_force_delete_usage_entry_.Publish(subscriber);
|
||||
oemcrypto_generate_derived_keys_.Publish(subscriber);
|
||||
oemcrypto_generate_nonce_.Publish(subscriber);
|
||||
oemcrypto_generate_rsa_signature_.Publish(subscriber);
|
||||
oemcrypto_generate_signature_.Publish(subscriber);
|
||||
oemcrypto_generic_decrypt_.Publish(subscriber);
|
||||
oemcrypto_generic_encrypt_.Publish(subscriber);
|
||||
oemcrypto_generic_sign_.Publish(subscriber);
|
||||
oemcrypto_generic_verify_.Publish(subscriber);
|
||||
oemcrypto_get_device_id_.Publish(subscriber);
|
||||
oemcrypto_get_hdcp_capability_.Publish(subscriber);
|
||||
oemcrypto_get_key_data_.Publish(subscriber);
|
||||
oemcrypto_get_max_number_of_sessions_.Publish(subscriber);
|
||||
oemcrypto_get_number_of_open_sessions_.Publish(subscriber);
|
||||
oemcrypto_get_oem_public_certificate_.Publish(subscriber);
|
||||
oemcrypto_get_provisioning_method_.Publish(subscriber);
|
||||
oemcrypto_get_random_.Publish(subscriber);
|
||||
oemcrypto_install_keybox_.Publish(subscriber);
|
||||
oemcrypto_is_anti_rollback_hw_present_.Publish(subscriber);
|
||||
oemcrypto_is_keybox_valid_.Publish(subscriber);
|
||||
oemcrypto_load_device_rsa_key_.Publish(subscriber);
|
||||
oemcrypto_load_keys_.Publish(subscriber);
|
||||
oemcrypto_load_test_keybox_.Publish(subscriber);
|
||||
oemcrypto_load_test_rsa_key_.Publish(subscriber);
|
||||
oemcrypto_open_session_.Publish(subscriber);
|
||||
oemcrypto_refresh_keys_.Publish(subscriber);
|
||||
oemcrypto_report_usage_.Publish(subscriber);
|
||||
oemcrypto_rewrap_device_rsa_key_.Publish(subscriber);
|
||||
oemcrypto_rewrap_device_rsa_key_30_.Publish(subscriber);
|
||||
oemcrypto_security_level_.Publish(subscriber);
|
||||
oemcrypto_security_patch_level_.Publish(subscriber);
|
||||
oemcrypto_select_key_.Publish(subscriber);
|
||||
oemcrypto_supports_usage_table_.Publish(subscriber);
|
||||
oemcrypto_update_usage_table_.Publish(subscriber);
|
||||
oemcrypto_wrap_keybox_.Publish(subscriber);
|
||||
oemcrypto_initialization_mode_.Publish(subscriber);
|
||||
oemcrypto_l1_api_version_.Publish(subscriber);
|
||||
SessionMetrics* EngineMetrics::AddSession() {
|
||||
AutoLock lock(session_metrics_lock_);
|
||||
SessionMetrics* metrics = new SessionMetrics();
|
||||
session_metrics_list_.push_back(metrics);
|
||||
return metrics;
|
||||
}
|
||||
|
||||
void EngineMetrics::RemoveSession(wvcdm::CdmSessionId session_id) {
|
||||
AutoLock lock(session_metrics_lock_);
|
||||
session_metrics_list_.erase(
|
||||
std::remove_if(session_metrics_list_.begin(),
|
||||
session_metrics_list_.end(),
|
||||
CompareSessionIds(session_id)),
|
||||
session_metrics_list_.end());
|
||||
}
|
||||
|
||||
void JsonSerialize(std::string* out, bool completed_only) {
|
||||
// TODO(blueeyes): Implement this.
|
||||
}
|
||||
|
||||
} // metrics
|
||||
} // wvcdm
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright 2016 Google Inc. All Rights Reserved
|
||||
|
||||
#include "metrics_front_end.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <log.h>
|
||||
|
||||
namespace wvcdm {
|
||||
namespace metrics {
|
||||
|
||||
MetricsFrontEnd* MetricsFrontEnd::instance_ = NULL;
|
||||
|
||||
MetricsFrontEnd::MetricsFrontEnd(Report* root) :
|
||||
root_(root) { }
|
||||
|
||||
MetricNotification* MetricsFrontEnd::CreateSubscriber() {
|
||||
return root_ == NULL ? NULL : root_->NewReport();
|
||||
}
|
||||
|
||||
MetricsFrontEnd& MetricsFrontEnd::Instance() {
|
||||
static MetricsFrontEnd kDummy(NULL);
|
||||
return instance_ == NULL ? kDummy : *instance_;
|
||||
}
|
||||
|
||||
void MetricsFrontEnd::OverrideInstance(MetricsFrontEnd* instance) {
|
||||
instance_ = instance;
|
||||
}
|
||||
|
||||
} // namespace metrics
|
||||
} // namespace wvcdm
|
||||
Reference in New Issue
Block a user