Fixes widevine metrics proto serialization
Changes to a much more efficient and more reusable protobuf format for metrics. Test: Widevine tests, Google Play and MediaDrm CTS test. Bug: 73724218 Change-Id: I3299051d7a16bcd7758c8f272415ca40e10c1313
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "gmock/gmock.h"
|
||||
#include "log.h"
|
||||
#include "metrics.pb.h"
|
||||
#include "string_conversions.h"
|
||||
#include "test_base.h"
|
||||
#include "test_printers.h"
|
||||
#include "wv_cdm_types.h"
|
||||
@@ -14,6 +15,8 @@
|
||||
using ::testing::Eq;
|
||||
using ::testing::StrEq;
|
||||
using ::testing::Ge;
|
||||
using ::testing::Gt;
|
||||
using ::testing::Lt;
|
||||
using ::testing::Test;
|
||||
using wvcdm::CdmResponseType;
|
||||
|
||||
@@ -48,22 +51,27 @@ TEST_F(WvContentDecryptionModuleMetricsTest, EngineOnlyMetrics) {
|
||||
std::string serialized_metrics;
|
||||
decryptor_.GetSerializedMetrics(&serialized_metrics);
|
||||
|
||||
// Spot check some metric values.
|
||||
drm_metrics::MetricsGroup metrics;
|
||||
ASSERT_TRUE(metrics.ParseFromString(serialized_metrics));
|
||||
EXPECT_THAT(metrics.metric_size(), Eq(0));
|
||||
ASSERT_THAT(metrics.metric_sub_group_size(), Eq(1));
|
||||
ASSERT_THAT(metrics.metric_sub_group(0).metric_size(), Ge(6));
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric_sub_group_size(), Eq(0));
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric(0).name(),
|
||||
StrEq("/drm/widevine/oemcrypto/initialization_mode"));
|
||||
// Can't check the initialization mode value. Different devices will have
|
||||
// different values.
|
||||
drm_metrics::WvCdmMetricsGroup metrics_group;
|
||||
ASSERT_TRUE(metrics_group.ParseFromString(serialized_metrics))
|
||||
<< "Unexpected failure deserializing metrics: "
|
||||
<< wvcdm::b2a_hex(serialized_metrics);
|
||||
ASSERT_THAT(metrics_group.metrics().size(), Eq(1));
|
||||
|
||||
// 100 is an arbitrary high value that shouldn't ever occur.
|
||||
EXPECT_THAT(
|
||||
metrics.metric_sub_group(0).metric(5).name(),
|
||||
StrEq("/drm/widevine/cdm_engine/"
|
||||
"get_provisioning_request/time/count{error:0}"));
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric(5).value().int_value(), Eq(1));
|
||||
metrics_group.metrics(0).engine_metrics()
|
||||
.oemcrypto_initialization_mode().int_value(),
|
||||
Lt(100));
|
||||
EXPECT_THAT(
|
||||
metrics_group.metrics(0).engine_metrics()
|
||||
.oemcrypto_initialization_mode().int_value(),
|
||||
Ge(0));
|
||||
ASSERT_THAT(metrics_group.metrics(0).engine_metrics()
|
||||
.cdm_engine_get_provisioning_request_time_us().size(), Eq(1));
|
||||
EXPECT_THAT(metrics_group.metrics(0).engine_metrics()
|
||||
.cdm_engine_get_provisioning_request_time_us(0)
|
||||
.operation_count(),
|
||||
Eq(1u));
|
||||
}
|
||||
|
||||
|
||||
@@ -82,25 +90,32 @@ TEST_F(WvContentDecryptionModuleMetricsTest, EngineAndSessionMetrics) {
|
||||
decryptor_.GetSerializedMetrics(&serialized_metrics);
|
||||
|
||||
// Spot check some metric values.
|
||||
drm_metrics::MetricsGroup metrics;
|
||||
ASSERT_TRUE(metrics.ParseFromString(serialized_metrics));
|
||||
// The outer container will never have metrics.
|
||||
EXPECT_THAT(metrics.metric_size(), Eq(0));
|
||||
ASSERT_THAT(metrics.metric_sub_group_size(), Eq(1));
|
||||
ASSERT_THAT(metrics.metric_sub_group(0).metric_size(), Ge(6));
|
||||
drm_metrics::WvCdmMetricsGroup metrics_group;
|
||||
ASSERT_TRUE(metrics_group.ParseFromString(serialized_metrics))
|
||||
<< "Unexpected failure deserializing metrics: "
|
||||
<< wvcdm::b2a_hex(serialized_metrics);
|
||||
ASSERT_THAT(metrics_group.metrics().size(), Eq(1));
|
||||
|
||||
// Validate engine-level metrics.
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric(0).name(),
|
||||
StrEq("/drm/widevine/oemcrypto/initialization_mode"));
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric(5).name(),
|
||||
StrEq("/drm/widevine/cdm_engine/open_session/count{error:7}"));
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric(5).value().int_value(), Eq(1));
|
||||
EXPECT_TRUE(metrics_group.metrics(0).engine_metrics()
|
||||
.has_oemcrypto_initialization_mode());
|
||||
ASSERT_THAT(
|
||||
metrics_group.metrics(0).engine_metrics().cdm_engine_open_session().size(),
|
||||
Eq(1));
|
||||
EXPECT_THAT(metrics_group.metrics(0).engine_metrics()
|
||||
.cdm_engine_open_session(0).count(), Eq(1));
|
||||
EXPECT_THAT(metrics_group.metrics(0).engine_metrics()
|
||||
.cdm_engine_open_session(0).attributes().error_code(),
|
||||
Eq(CdmResponseType::NEED_PROVISIONING));
|
||||
|
||||
// Validate a session-level metric.
|
||||
EXPECT_THAT(metrics.metric_sub_group(0).metric_sub_group_size(), Eq(1));
|
||||
ASSERT_THAT(metrics_group.metrics(0).session_metrics().size(), Eq(1));
|
||||
EXPECT_THAT(
|
||||
metrics.metric_sub_group(0).metric_sub_group(0).metric(0).name(),
|
||||
StrEq("/drm/widevine/cdm_session/session_id"));
|
||||
metrics_group.metrics(0).session_metrics(0)
|
||||
.cdm_session_life_span_ms().double_value(),
|
||||
Gt(0.0))
|
||||
<< "Unexpected failure with session_metrics: "
|
||||
<< wvcdm::b2a_hex(serialized_metrics);
|
||||
}
|
||||
|
||||
TEST_F(WvContentDecryptionModuleMetricsTest, MultipleEngineMetric) {
|
||||
@@ -123,33 +138,28 @@ TEST_F(WvContentDecryptionModuleMetricsTest, MultipleEngineMetric) {
|
||||
decryptor_.GetSerializedMetrics(&serialized_metrics);
|
||||
|
||||
// Spot check some metric values.
|
||||
drm_metrics::MetricsGroup metrics;
|
||||
ASSERT_TRUE(metrics.ParseFromString(serialized_metrics));
|
||||
// The outer container will never have metrics.
|
||||
EXPECT_THAT(metrics.metric_size(), Eq(0));
|
||||
drm_metrics::WvCdmMetricsGroup metrics_group;
|
||||
ASSERT_TRUE(metrics_group.ParseFromString(serialized_metrics));
|
||||
|
||||
// Two engine-level metrics are expected.
|
||||
ASSERT_THAT(metrics.metric_sub_group_size(), Eq(2));
|
||||
ASSERT_THAT(metrics_group.metrics().size(), Eq(2));
|
||||
|
||||
for (int i = 0; i < metrics.metric_sub_group_size(); i++) {
|
||||
// Validate the engine-level metric.
|
||||
ASSERT_THAT(metrics.metric_sub_group(i).metric_size(), Ge(6));
|
||||
EXPECT_THAT(metrics.metric_sub_group(i).metric(0).name(),
|
||||
StrEq("/drm/widevine/oemcrypto/initialization_mode"));
|
||||
EXPECT_THAT(metrics.metric_sub_group(i).metric(5).name(),
|
||||
StrEq("/drm/widevine/cdm_engine/open_session/count{error:7}"));
|
||||
EXPECT_THAT(metrics.metric_sub_group(i).metric(5).value().int_value(),
|
||||
Eq(1));
|
||||
for (int i = 0; i < metrics_group.metrics().size(); i++) {
|
||||
drm_metrics::WvCdmMetrics::EngineMetrics engine_metrics =
|
||||
metrics_group.metrics(i).engine_metrics();
|
||||
// Validate an engine-level metric.
|
||||
EXPECT_TRUE(engine_metrics.has_oemcrypto_initialization_mode());
|
||||
ASSERT_THAT(engine_metrics.cdm_engine_open_session().size(), Eq(1));
|
||||
EXPECT_THAT(engine_metrics.cdm_engine_open_session(0).count(), Eq(1));
|
||||
EXPECT_THAT(
|
||||
engine_metrics.cdm_engine_open_session(0).attributes().error_code(),
|
||||
Eq(CdmResponseType::NEED_PROVISIONING));
|
||||
|
||||
// Validate a session-level metric.
|
||||
EXPECT_THAT(metrics.metric_sub_group(i).metric_sub_group_size(), Eq(1));
|
||||
EXPECT_THAT(
|
||||
metrics.metric_sub_group(i).metric_sub_group(0).metric(0).name(),
|
||||
StrEq("/drm/widevine/cdm_session/session_id"));
|
||||
ASSERT_THAT(metrics_group.metrics(i).session_metrics().size(), Eq(1));
|
||||
EXPECT_THAT(metrics_group.metrics(i).session_metrics(0)
|
||||
.cdm_session_life_span_ms().double_value(), Gt(0.0));
|
||||
}
|
||||
|
||||
// Verify that the second metrics app package name is set.
|
||||
EXPECT_THAT(metrics.metric_sub_group(1).app_package_name(), StrEq("baz"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user