Merge "Include DRM key type to SessionMetrics."

This commit is contained in:
Alex Dale
2021-02-23 23:25:51 +00:00
committed by Android (Google) Code Review
10 changed files with 38 additions and 18 deletions

View File

@@ -38,6 +38,7 @@
return false; \ return false; \
} }
namespace wvcdm {
namespace { namespace {
const size_t kKeySetIdLength = 14; const size_t kKeySetIdLength = 14;
@@ -49,10 +50,22 @@ void SetErrorDetail(int* error_detail, T error_code) {
} }
} }
int DrmKeyTypeToMetricValue(CryptoWrappedKey::Type type) {
constexpr int kUnknownMetricType = -1;
constexpr int kRsaMetricType = 0;
constexpr int kEccMetricType = 1;
switch (type) {
case CryptoWrappedKey::kRsa:
return kRsaMetricType;
case CryptoWrappedKey::kEcc:
return kEccMetricType;
default:
LOGE("Unexpected DRM key type: %d", static_cast<int>(type));
return kUnknownMetricType;
}
}
} // namespace } // namespace
namespace wvcdm {
CdmSession::CdmSession(FileSystem* file_system, CdmSession::CdmSession(FileSystem* file_system,
std::shared_ptr<metrics::SessionMetrics> metrics) std::shared_ptr<metrics::SessionMetrics> metrics)
: metrics_(metrics), : metrics_(metrics),
@@ -187,6 +200,8 @@ CdmResponseType CdmSession::Init(CdmClientPropertySet* cdm_client_property_set,
load_cert_sts); load_cert_sts);
switch (load_cert_sts) { switch (load_cert_sts) {
case NO_ERROR: case NO_ERROR:
metrics_->drm_certificate_key_type_.Record(
DrmKeyTypeToMetricValue(private_key.type()));
break; break;
case SESSION_LOST_STATE_ERROR: case SESSION_LOST_STATE_ERROR:
case SYSTEM_INVALIDATED_ERROR: case SYSTEM_INVALIDATED_ERROR:

View File

@@ -1300,7 +1300,7 @@ CdmResponseType CryptoSession::LoadCertificatePrivateKey(
oec_session_id_, key_type, oec_session_id_, key_type,
reinterpret_cast<const uint8_t*>(wrapped_key.data()), reinterpret_cast<const uint8_t*>(wrapped_key.data()),
wrapped_key.size()), wrapped_key.size()),
metrics_, oemcrypto_load_device_rsa_key_, sts); metrics_, oemcrypto_load_device_drm_key_, sts);
}); });
return MapOEMCryptoResult(sts, LOAD_DEVICE_RSA_KEY_ERROR, return MapOEMCryptoResult(sts, LOAD_DEVICE_RSA_KEY_ERROR,

View File

@@ -234,7 +234,7 @@ class CryptoMetrics {
ValueMetric<bool> oemcrypto_is_anti_rollback_hw_present_; ValueMetric<bool> oemcrypto_is_anti_rollback_hw_present_;
ValueMetric<bool> oemcrypto_is_keybox_valid_; ValueMetric<bool> oemcrypto_is_keybox_valid_;
EventMetric<kOemCryptoResultFieldNumber, OEMCryptoResult> EventMetric<kOemCryptoResultFieldNumber, OEMCryptoResult>
oemcrypto_load_device_rsa_key_; oemcrypto_load_device_drm_key_;
EventMetric<kOemCryptoResultFieldNumber, OEMCryptoResult> EventMetric<kOemCryptoResultFieldNumber, OEMCryptoResult>
oemcrypto_load_entitled_keys_; oemcrypto_load_entitled_keys_;
EventMetric<kOemCryptoResultFieldNumber, OEMCryptoResult> EventMetric<kOemCryptoResultFieldNumber, OEMCryptoResult>
@@ -338,6 +338,7 @@ class SessionMetrics {
ValueMetric<std::string> license_sdk_version_; ValueMetric<std::string> license_sdk_version_;
ValueMetric<std::string> license_service_version_; ValueMetric<std::string> license_service_version_;
ValueMetric<std::string> playback_id_; ValueMetric<std::string> playback_id_;
ValueMetric<int> drm_certificate_key_type_;
// Serialize the session metrics to the provided |metric_group|. // Serialize the session metrics to the provided |metric_group|.
// |metric_group| is owned by the caller and must not be null. // |metric_group| is owned by the caller and must not be null.

View File

@@ -140,8 +140,8 @@ void CryptoMetrics::Serialize(WvCdmMetrics::CryptoMetrics *crypto_metrics)
oemcrypto_is_anti_rollback_hw_present_.ToProto()); oemcrypto_is_anti_rollback_hw_present_.ToProto());
crypto_metrics->set_allocated_oemcrypto_is_keybox_valid( crypto_metrics->set_allocated_oemcrypto_is_keybox_valid(
oemcrypto_is_keybox_valid_.ToProto()); oemcrypto_is_keybox_valid_.ToProto());
oemcrypto_load_device_rsa_key_.ToProto( oemcrypto_load_device_drm_key_.ToProto(
crypto_metrics->mutable_oemcrypto_load_device_rsa_key_time_us()); crypto_metrics->mutable_oemcrypto_load_device_drm_key_time_us());
oemcrypto_load_entitled_keys_.ToProto( oemcrypto_load_entitled_keys_.ToProto(
crypto_metrics->mutable_oemcrypto_load_entitled_keys_time_us()); crypto_metrics->mutable_oemcrypto_load_entitled_keys_time_us());
oemcrypto_load_keys_.ToProto( oemcrypto_load_keys_.ToProto(
@@ -247,6 +247,8 @@ void SessionMetrics::SerializeSessionMetrics(
session_metrics->set_allocated_license_service_version( session_metrics->set_allocated_license_service_version(
license_service_version_.ToProto()); license_service_version_.ToProto());
session_metrics->set_allocated_playback_id(playback_id_.ToProto()); session_metrics->set_allocated_playback_id(playback_id_.ToProto());
session_metrics->set_allocated_drm_certificate_key_type(
drm_certificate_key_type_.ToProto());
} }
OemCryptoDynamicAdapterMetrics::OemCryptoDynamicAdapterMetrics() OemCryptoDynamicAdapterMetrics::OemCryptoDynamicAdapterMetrics()

View File

@@ -155,7 +155,7 @@ message WvCdmMetrics {
repeated DistributionMetric oemcrypto_initialize_time_us = 38; repeated DistributionMetric oemcrypto_initialize_time_us = 38;
optional ValueMetric oemcrypto_is_anti_rollback_hw_present = 39; optional ValueMetric oemcrypto_is_anti_rollback_hw_present = 39;
optional ValueMetric oemcrypto_is_keybox_valid = 40; optional ValueMetric oemcrypto_is_keybox_valid = 40;
repeated DistributionMetric oemcrypto_load_device_rsa_key_time_us = 41; repeated DistributionMetric oemcrypto_load_device_drm_key_time_us = 41;
repeated DistributionMetric oemcrypto_load_entitled_keys_time_us = 42; repeated DistributionMetric oemcrypto_load_entitled_keys_time_us = 42;
repeated DistributionMetric oemcrypto_load_keys_time_us = 43; repeated DistributionMetric oemcrypto_load_keys_time_us = 43;
optional ValueMetric oemcrypto_max_hdcp_capability = 44; optional ValueMetric oemcrypto_max_hdcp_capability = 44;
@@ -182,8 +182,6 @@ message WvCdmMetrics {
optional ValueMetric oemcrypto_set_sandbox = 70; optional ValueMetric oemcrypto_set_sandbox = 70;
repeated CounterMetric oemcrypto_set_decrypt_hash = 71; repeated CounterMetric oemcrypto_set_decrypt_hash = 71;
optional ValueMetric oemcrypto_resource_rating_tier = 72; optional ValueMetric oemcrypto_resource_rating_tier = 72;
// TODO(b/142684157): Remove this comment before closing bug.
// OemCrypto V16 metrics start at 77 (4 new metrics pending review).
repeated DistributionMetric repeated DistributionMetric
oemcrypto_prep_and_sign_license_request_time_us = 77; oemcrypto_prep_and_sign_license_request_time_us = 77;
repeated DistributionMetric repeated DistributionMetric
@@ -199,7 +197,7 @@ message WvCdmMetrics {
// This contains metrics that were captured within a CdmSession. This contains // This contains metrics that were captured within a CdmSession. This contains
// nested CryptoMetrics that were captured in the context of the session. // nested CryptoMetrics that were captured in the context of the session.
// next id: 9 // next id: 13
message SessionMetrics { message SessionMetrics {
optional ValueMetric session_id = 1; optional ValueMetric session_id = 1;
optional CryptoMetrics crypto_metrics = 2; optional CryptoMetrics crypto_metrics = 2;
@@ -212,6 +210,8 @@ message WvCdmMetrics {
optional ValueMetric license_sdk_version = 9; optional ValueMetric license_sdk_version = 9;
optional ValueMetric license_service_version = 10; optional ValueMetric license_service_version = 10;
optional ValueMetric playback_id = 11; optional ValueMetric playback_id = 11;
// Value is enumerated based on the OEMCrypto document: RSA = 0, ECC = 1
optional ValueMetric drm_certificate_key_type = 12;
} }
// These are metrics recorded at the Engine level. This includes CryptoSession // These are metrics recorded at the Engine level. This includes CryptoSession

View File

@@ -276,6 +276,7 @@ TEST_F(SessionMetricsTest, AllSessionMetrics) {
session_metrics.oemcrypto_build_info_.Record("test build info"); session_metrics.oemcrypto_build_info_.Record("test build info");
session_metrics.license_sdk_version_.Record("test license sdk version"); session_metrics.license_sdk_version_.Record("test license sdk version");
session_metrics.license_service_version_.Record("test license service version"); session_metrics.license_service_version_.Record("test license service version");
session_metrics.drm_certificate_key_type_.Record(1);
// Record a CryptoMetrics metric in the session. // Record a CryptoMetrics metric in the session.
session_metrics.GetCryptoMetrics()->crypto_session_generic_decrypt_ session_metrics.GetCryptoMetrics()->crypto_session_generic_decrypt_
@@ -297,6 +298,7 @@ TEST_F(SessionMetricsTest, AllSessionMetrics) {
actual.license_service_version().string_value().c_str()); actual.license_service_version().string_value().c_str());
EXPECT_GT( EXPECT_GT(
actual.crypto_metrics().crypto_session_generic_decrypt_time_us_size(), 0); actual.crypto_metrics().crypto_session_generic_decrypt_time_us_size(), 0);
EXPECT_EQ(1, actual.drm_certificate_key_type().int_value());
} }
TEST_F(SessionMetricsTest, EmptySessionMetrics) { TEST_F(SessionMetricsTest, EmptySessionMetrics) {
@@ -404,8 +406,8 @@ TEST_F(CryptoMetricsTest, AllCryptoMetrics) {
.Record(1.0, OEMCrypto_ERROR_INIT_FAILED); .Record(1.0, OEMCrypto_ERROR_INIT_FAILED);
crypto_metrics.oemcrypto_is_anti_rollback_hw_present_.Record(true); crypto_metrics.oemcrypto_is_anti_rollback_hw_present_.Record(true);
crypto_metrics.oemcrypto_is_keybox_valid_.Record(true); crypto_metrics.oemcrypto_is_keybox_valid_.Record(true);
crypto_metrics.oemcrypto_load_device_rsa_key_ crypto_metrics.oemcrypto_load_device_drm_key_.Record(
.Record(1.0, OEMCrypto_ERROR_INIT_FAILED); 1.0, OEMCrypto_ERROR_INIT_FAILED);
crypto_metrics.oemcrypto_load_keys_.Record(1.0, OEMCrypto_ERROR_INIT_FAILED); crypto_metrics.oemcrypto_load_keys_.Record(1.0, OEMCrypto_ERROR_INIT_FAILED);
crypto_metrics.oemcrypto_refresh_keys_ crypto_metrics.oemcrypto_refresh_keys_
.Record(1.0, OEMCrypto_ERROR_INIT_FAILED); .Record(1.0, OEMCrypto_ERROR_INIT_FAILED);
@@ -509,7 +511,7 @@ TEST_F(CryptoMetricsTest, AllCryptoMetrics) {
EXPECT_GT(actual.oemcrypto_initialize_time_us_size(), 0); EXPECT_GT(actual.oemcrypto_initialize_time_us_size(), 0);
EXPECT_EQ(true, actual.oemcrypto_is_anti_rollback_hw_present().int_value()); EXPECT_EQ(true, actual.oemcrypto_is_anti_rollback_hw_present().int_value());
EXPECT_EQ(true, actual.oemcrypto_is_keybox_valid().int_value()); EXPECT_EQ(true, actual.oemcrypto_is_keybox_valid().int_value());
EXPECT_GT(actual.oemcrypto_load_device_rsa_key_time_us_size(), 0); EXPECT_GT(actual.oemcrypto_load_device_drm_key_time_us_size(), 0);
EXPECT_GT(actual.oemcrypto_load_keys_time_us_size(), 0); EXPECT_GT(actual.oemcrypto_load_keys_time_us_size(), 0);
EXPECT_GT(actual.oemcrypto_refresh_keys_time_us_size(), 0); EXPECT_GT(actual.oemcrypto_refresh_keys_time_us_size(), 0);
EXPECT_GT(actual.oemcrypto_report_usage_size(), 0); EXPECT_GT(actual.oemcrypto_report_usage_size(), 0);

View File

@@ -570,8 +570,8 @@ void HidlMetricsAdapter::AddCryptoMetrics(
proto_metrics.oemcrypto_is_keybox_valid()); proto_metrics.oemcrypto_is_keybox_valid());
} }
group_builder->AddDistributions( group_builder->AddDistributions(
"oemcrypto_load_device_rsa_key_time_us", "oemcrypto_load_device_drm_key_time_us",
proto_metrics.oemcrypto_load_device_rsa_key_time_us()); proto_metrics.oemcrypto_load_device_drm_key_time_us());
group_builder->AddDistributions( group_builder->AddDistributions(
"oemcrypto_load_entitled_keys_time_us", "oemcrypto_load_entitled_keys_time_us",
proto_metrics.oemcrypto_load_entitled_keys_time_us()); proto_metrics.oemcrypto_load_entitled_keys_time_us());

View File

@@ -378,7 +378,7 @@ TEST(HidlMetricsAdapterTest, EngineAndSessionAllMetrics) {
crypto_metrics.mutable_oemcrypto_is_anti_rollback_hw_present crypto_metrics.mutable_oemcrypto_is_anti_rollback_hw_present
()->set_int_value(1); ()->set_int_value(1);
crypto_metrics.mutable_oemcrypto_is_keybox_valid()->set_int_value(1); crypto_metrics.mutable_oemcrypto_is_keybox_valid()->set_int_value(1);
crypto_metrics.add_oemcrypto_load_device_rsa_key_time_us()->set_min(1.0f); crypto_metrics.add_oemcrypto_load_device_drm_key_time_us()->set_min(1.0f);
crypto_metrics.add_oemcrypto_load_entitled_keys_time_us()->set_min(1.0f); crypto_metrics.add_oemcrypto_load_entitled_keys_time_us()->set_min(1.0f);
crypto_metrics.add_oemcrypto_load_keys_time_us()->set_min(1.0f); crypto_metrics.add_oemcrypto_load_keys_time_us()->set_min(1.0f);
crypto_metrics.mutable_oemcrypto_max_hdcp_capability()->set_int_value(1); crypto_metrics.mutable_oemcrypto_max_hdcp_capability()->set_int_value(1);

View File

@@ -333,7 +333,7 @@ void FormatCryptoMetrics(const WvCdmMetrics_CryptoMetrics metrics,
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_initialize_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_initialize_time_us, indent);
FORMAT_OPTIONAL_VALUE(oemcrypto_is_anti_rollback_hw_present, indent); FORMAT_OPTIONAL_VALUE(oemcrypto_is_anti_rollback_hw_present, indent);
FORMAT_OPTIONAL_VALUE(oemcrypto_is_keybox_valid, indent); FORMAT_OPTIONAL_VALUE(oemcrypto_is_keybox_valid, indent);
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_device_rsa_key_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_device_drm_key_time_us, indent);
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_entitled_keys_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_entitled_keys_time_us, indent);
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_keys_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_keys_time_us, indent);
FORMAT_OPTIONAL_HDCP_CAPABILITY(oemcrypto_max_hdcp_capability, indent); FORMAT_OPTIONAL_HDCP_CAPABILITY(oemcrypto_max_hdcp_capability, indent);

View File

@@ -330,7 +330,7 @@ void FormatCryptoMetrics(const drm_metrics::WvCdmMetrics_CryptoMetrics metrics,
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_initialize_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_initialize_time_us, indent);
FORMAT_OPTIONAL_VALUE(oemcrypto_is_anti_rollback_hw_present, indent); FORMAT_OPTIONAL_VALUE(oemcrypto_is_anti_rollback_hw_present, indent);
FORMAT_OPTIONAL_VALUE(oemcrypto_is_keybox_valid, indent); FORMAT_OPTIONAL_VALUE(oemcrypto_is_keybox_valid, indent);
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_device_rsa_key_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_device_drm_key_time_us, indent);
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_entitled_keys_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_entitled_keys_time_us, indent);
FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_keys_time_us, indent); FORMAT_REPEATED_DISTRIBUTION(oemcrypto_load_keys_time_us, indent);
FORMAT_OPTIONAL_HDCP_CAPABILITY(oemcrypto_max_hdcp_capability, indent); FORMAT_OPTIONAL_HDCP_CAPABILITY(oemcrypto_max_hdcp_capability, indent);