Commit 7140b50c authored by Dale Curtis's avatar Dale Curtis Committed by Commit Bot

Add VideoCodecProfile to WatchTime secondary properties.

Since we have been unable to join on the VideoDecoderStats table due to
processing times and lack of cross correlation per resolution, metrics
leadership has asked we add this field directly to watch time
calculations.

BUG=1002587
R=chcunningham

Change-Id: Id7ef8a28ec43607920885d62f3597b54aad647cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1869681Reviewed-by: default avatarRobert Kaplow <rkaplow@chromium.org>
Reviewed-by: default avatarMustafa Emre Acer <meacer@chromium.org>
Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708765}
parent 43085c39
......@@ -12,6 +12,7 @@
#include "base/test/test_mock_time_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "media/base/mock_media_log.h"
#include "media/base/video_codecs.h"
#include "media/base/watch_time_keys.h"
#include "media/blink/watch_time_reporter.h"
#include "media/mojo/mojom/media_metrics_provider.mojom.h"
......@@ -804,6 +805,7 @@ TEST_P(WatchTimeReporterTest, WatchTimeReporterSecondaryProperties) {
auto properties = mojom::SecondaryPlaybackProperties::New(
has_audio_ ? kCodecAAC : kUnknownAudioCodec,
has_video_ ? kCodecH264 : kUnknownVideoCodec,
has_video_ ? H264PROFILE_MAIN : VIDEO_CODEC_PROFILE_UNKNOWN,
has_audio_ ? "FirstAudioDecoder" : "",
has_video_ ? "FirstVideoDecoder" : "",
has_audio_ ? EncryptionMode::kCenc : EncryptionMode::kUnencrypted,
......@@ -840,8 +842,8 @@ TEST_P(WatchTimeReporterTest, SecondaryProperties_SizeIncreased) {
EXPECT_CALL(*this, OnUpdateSecondaryProperties(_))
.Times((has_audio_ && has_video_) ? 3 : 2);
wtr_->UpdateSecondaryProperties(mojom::SecondaryPlaybackProperties::New(
kUnknownAudioCodec, kUnknownVideoCodec, "", "",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
kUnknownAudioCodec, kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN, "",
"", EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
kSizeJustRight));
EXPECT_TRUE(IsMonitoring());
......@@ -862,8 +864,8 @@ TEST_P(WatchTimeReporterTest, SecondaryProperties_SizeDecreased) {
EXPECT_CALL(*this, OnUpdateSecondaryProperties(_))
.Times((has_audio_ && has_video_) ? 3 : 2);
wtr_->UpdateSecondaryProperties(mojom::SecondaryPlaybackProperties::New(
kUnknownAudioCodec, kUnknownVideoCodec, "", "",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
kUnknownAudioCodec, kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN, "",
"", EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
kSizeTooSmall));
EXPECT_WATCH_TIME_FINALIZED();
CycleReportingTimer();
......
......@@ -3187,8 +3187,9 @@ void WebMediaPlayerImpl::UpdateSecondaryProperties() {
watch_time_reporter_->UpdateSecondaryProperties(
mojom::SecondaryPlaybackProperties::New(
pipeline_metadata_.audio_decoder_config.codec(),
pipeline_metadata_.video_decoder_config.codec(), audio_decoder_name_,
video_decoder_name_,
pipeline_metadata_.video_decoder_config.codec(),
pipeline_metadata_.video_decoder_config.profile(),
audio_decoder_name_, video_decoder_name_,
DetermineEncryptionMode(
pipeline_metadata_.audio_decoder_config.encryption_scheme()),
DetermineEncryptionMode(
......
......@@ -27,6 +27,7 @@ struct PlaybackProperties {
struct SecondaryPlaybackProperties {
AudioCodec audio_codec; // Note: We may not know the codec during all
VideoCodec video_codec; // playbacks (HLS, remoting, etc).
VideoCodecProfile video_codec_profile;
string audio_decoder_name;
string video_decoder_name;
EncryptionMode audio_encryption_scheme;
......
......@@ -11,6 +11,7 @@
#include "base/metrics/histogram_functions.h"
#include "base/strings/string_piece.h"
#include "media/base/limits.h"
#include "media/base/video_codecs.h"
#include "media/base/video_decoder.h"
#include "media/base/watch_time_keys.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
......@@ -263,6 +264,8 @@ void WatchTimeRecorder::UpdateSecondaryProperties(
// capture changes in encryption schemes.
if (last_record.secondary_properties->audio_codec == kUnknownAudioCodec ||
last_record.secondary_properties->video_codec == kUnknownVideoCodec ||
last_record.secondary_properties->video_codec_profile ==
VIDEO_CODEC_PROFILE_UNKNOWN ||
last_record.secondary_properties->audio_decoder_name.empty() ||
last_record.secondary_properties->video_decoder_name.empty()) {
auto temp_props = last_record.secondary_properties.Clone();
......@@ -270,6 +273,11 @@ void WatchTimeRecorder::UpdateSecondaryProperties(
temp_props->audio_codec = secondary_properties->audio_codec;
if (last_record.secondary_properties->video_codec == kUnknownVideoCodec)
temp_props->video_codec = secondary_properties->video_codec;
if (last_record.secondary_properties->video_codec_profile ==
VIDEO_CODEC_PROFILE_UNKNOWN) {
temp_props->video_codec_profile =
secondary_properties->video_codec_profile;
}
if (last_record.secondary_properties->audio_decoder_name.empty()) {
temp_props->audio_decoder_name =
secondary_properties->audio_decoder_name;
......@@ -434,6 +442,8 @@ void WatchTimeRecorder::RecordUkmPlaybackData() {
// See note in mojom::PlaybackProperties about why we have both of these.
builder.SetAudioCodec(ukm_record.secondary_properties->audio_codec);
builder.SetVideoCodec(ukm_record.secondary_properties->video_codec);
builder.SetVideoCodecProfile(
ukm_record.secondary_properties->video_codec_profile);
builder.SetHasAudio(properties_->has_audio);
builder.SetHasVideo(properties_->has_video);
......
......@@ -19,6 +19,7 @@
#include "base/test/test_message_loop.h"
#include "base/threading/thread_task_runner_handle.h"
#include "components/ukm/test_ukm_recorder.h"
#include "media/base/video_codecs.h"
#include "media/base/watch_time_keys.h"
#include "media/mojo/services/media_metrics_provider.h"
#include "services/metrics/public/cpp/ukm_builders.h"
......@@ -157,6 +158,13 @@ class WatchTimeRecorderTest : public testing::Test {
test_recorder_->UpdateSourceURL(source_id_, GURL(kTestOrigin));
}
mojom::SecondaryPlaybackPropertiesPtr CreateSecondaryProperties() {
return mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, H264PROFILE_MAIN, "", "",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(800, 600));
}
ukm::SourceId GetSourceId() { return source_id_; }
MOCK_METHOD0(GetCurrentMediaTime, base::TimeDelta());
......@@ -190,9 +198,7 @@ TEST_F(WatchTimeRecorderTest, TestBasicReporting) {
// Values for |is_background| and |is_muted| don't matter in this test since
// they don't prevent the muted or background keys from being recorded.
Initialize(true, false, true, true);
wtr_->UpdateSecondaryProperties(mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600)));
wtr_->UpdateSecondaryProperties(CreateSecondaryProperties());
wtr_->RecordWatchTime(WatchTimeKey::kWatchTimeKeyMax, kWatchTime1);
wtr_->RecordWatchTime(key, kWatchTime1);
......@@ -374,9 +380,7 @@ TEST_F(WatchTimeRecorderTest, TestRebufferingMetrics) {
TEST_F(WatchTimeRecorderTest, TestDiscardMetrics) {
Initialize(true, false, true, true);
wtr_->UpdateSecondaryProperties(mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600)));
wtr_->UpdateSecondaryProperties(CreateSecondaryProperties());
constexpr base::TimeDelta kWatchTime = base::TimeDelta::FromSeconds(5);
for (auto key : computation_keys_)
......@@ -411,9 +415,7 @@ TEST_F(WatchTimeRecorderTest, TestFinalizeNoDuplication) {
mojom::PlaybackPropertiesPtr properties = mojom::PlaybackProperties::New(
true, true, false, false, false, false, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
CreateSecondaryProperties();
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -450,6 +452,8 @@ TEST_F(WatchTimeRecorderTest, TestFinalizeNoDuplication) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -487,9 +491,7 @@ TEST_F(WatchTimeRecorderTest, FinalizeWithoutWatchTime) {
mojom::PlaybackPropertiesPtr properties = mojom::PlaybackProperties::New(
true, true, false, false, false, false, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
CreateSecondaryProperties();
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -523,6 +525,8 @@ TEST_F(WatchTimeRecorderTest, FinalizeWithoutWatchTime) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -561,8 +565,8 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideo) {
true, true, false, false, false, false, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kCenc,
EncryptionMode::kCbcs, gfx::Size(800, 600));
kCodecAAC, kCodecH264, H264PROFILE_MAIN, "", "",
EncryptionMode::kCenc, EncryptionMode::kCbcs, gfx::Size(800, 600));
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -581,6 +585,8 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideo) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -618,8 +624,9 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoWithExtras) {
true, true, false, false, true, true, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecOpus, kCodecVP9, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
kCodecOpus, kCodecVP9, VP9PROFILE_PROFILE0, "", "",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(800, 600));
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -688,6 +695,8 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoWithExtras) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -712,9 +721,7 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoBackgroundMuted) {
mojom::PlaybackPropertiesPtr properties = mojom::PlaybackProperties::New(
true, true, true, true, false, false, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
CreateSecondaryProperties();
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -733,6 +740,8 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoBackgroundMuted) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -770,9 +779,7 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoDuration) {
mojom::PlaybackPropertiesPtr properties = mojom::PlaybackProperties::New(
true, true, false, false, false, false, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
CreateSecondaryProperties();
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -789,6 +796,8 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoDuration) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -828,9 +837,7 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoDurationInfinite) {
mojom::PlaybackPropertiesPtr properties = mojom::PlaybackProperties::New(
true, true, false, false, false, false, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "", "", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
CreateSecondaryProperties();
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties.Clone());
......@@ -847,6 +854,8 @@ TEST_F(WatchTimeRecorderTest, BasicUkmAudioVideoDurationInfinite) {
EXPECT_UKM(UkmEntry::kIsMutedName, properties->is_muted);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties->video_codec_profile);
EXPECT_UKM(UkmEntry::kHasAudioName, properties->has_audio);
EXPECT_UKM(UkmEntry::kHasVideoName, properties->has_video);
EXPECT_UKM(
......@@ -901,8 +910,8 @@ TEST_F(WatchTimeRecorderTest, SingleSecondaryPropertiesUnknownToKnown) {
true, true, false, false, true, true, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties1 =
mojom::SecondaryPlaybackProperties::New(
kUnknownAudioCodec, kUnknownVideoCodec, "", "",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
kUnknownAudioCodec, kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN,
"", "", EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(800, 600));
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties1.Clone());
......@@ -912,9 +921,9 @@ TEST_F(WatchTimeRecorderTest, SingleSecondaryPropertiesUnknownToKnown) {
mojom::SecondaryPlaybackPropertiesPtr secondary_properties2 =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "FFmpegAudioDecoder", "FFmpegVideoDecoder",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(800, 600));
kCodecAAC, kCodecH264, H264PROFILE_MAIN, "FFmpegAudioDecoder",
"FFmpegVideoDecoder", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
wtr_->UpdateSecondaryProperties(secondary_properties2.Clone());
wtr_.reset();
......@@ -941,6 +950,8 @@ TEST_F(WatchTimeRecorderTest, SingleSecondaryPropertiesUnknownToKnown) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, 0);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties2->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties2->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties2->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties2->audio_encryption_scheme));
......@@ -960,9 +971,9 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalize) {
true, true, false, false, true, true, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties1 =
mojom::SecondaryPlaybackProperties::New(
kCodecOpus, kCodecVP9, "MojoAudioDecoder", "MojoVideoDecoder",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(400, 300));
kCodecOpus, kCodecVP9, VP9PROFILE_PROFILE0, "MojoAudioDecoder",
"MojoVideoDecoder", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(400, 300));
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties1.Clone());
......@@ -973,8 +984,9 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalize) {
mojom::SecondaryPlaybackPropertiesPtr secondary_properties2 =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "FFmpegAudioDecoder", "FFmpegVideoDecoder",
EncryptionMode::kCenc, EncryptionMode::kCenc, gfx::Size(800, 600));
kCodecAAC, kCodecH264, H264PROFILE_MAIN, "FFmpegAudioDecoder",
"FFmpegVideoDecoder", EncryptionMode::kCenc, EncryptionMode::kCenc,
gfx::Size(800, 600));
wtr_->UpdateSecondaryProperties(secondary_properties2.Clone());
constexpr base::TimeDelta kWatchTime2 = base::TimeDelta::FromSeconds(25);
......@@ -1020,6 +1032,8 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalize) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, kUnderflowCount1);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties1->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties1->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties1->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties1->audio_encryption_scheme));
......@@ -1041,6 +1055,8 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalize) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, kUnderflowCount2);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties2->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties2->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties2->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties2->audio_encryption_scheme));
......@@ -1058,9 +1074,9 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalizeNo2ndWT) {
true, true, false, false, true, true, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties1 =
mojom::SecondaryPlaybackProperties::New(
kCodecOpus, kCodecVP9, "MojoAudioDecoder", "MojoVideoDecoder",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(400, 300));
kCodecOpus, kCodecVP9, VP9PROFILE_PROFILE0, "MojoAudioDecoder",
"MojoVideoDecoder", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(400, 300));
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties1.Clone());
......@@ -1071,9 +1087,9 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalizeNo2ndWT) {
mojom::SecondaryPlaybackPropertiesPtr secondary_properties2 =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "FFmpegAudioDecoder", "FFmpegVideoDecoder",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(800, 600));
kCodecAAC, kCodecH264, H264PROFILE_MAIN, "FFmpegAudioDecoder",
"FFmpegVideoDecoder", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
wtr_->UpdateSecondaryProperties(secondary_properties2.Clone());
// Don't record any watch time to the new record, it should report zero watch
......@@ -1109,6 +1125,8 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalizeNo2ndWT) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, kUnderflowCount1);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties1->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties1->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties1->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties1->audio_encryption_scheme));
......@@ -1128,6 +1146,8 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesNoFinalizeNo2ndWT) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, 0);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties2->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties2->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties2->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties2->audio_encryption_scheme));
......@@ -1145,8 +1165,9 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesWithFinalize) {
true, true, false, false, true, true, false);
mojom::SecondaryPlaybackPropertiesPtr secondary_properties1 =
mojom::SecondaryPlaybackProperties::New(
kCodecOpus, kCodecVP9, "MojoAudioDecoder", "MojoVideoDecoder",
EncryptionMode::kCbcs, EncryptionMode::kCbcs, gfx::Size(400, 300));
kCodecOpus, kCodecVP9, VP9PROFILE_PROFILE0, "MojoAudioDecoder",
"MojoVideoDecoder", EncryptionMode::kCbcs, EncryptionMode::kCbcs,
gfx::Size(400, 300));
Initialize(properties.Clone());
wtr_->UpdateSecondaryProperties(secondary_properties1.Clone());
......@@ -1161,9 +1182,9 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesWithFinalize) {
mojom::SecondaryPlaybackPropertiesPtr secondary_properties2 =
mojom::SecondaryPlaybackProperties::New(
kCodecAAC, kCodecH264, "FFmpegAudioDecoder", "FFmpegVideoDecoder",
EncryptionMode::kUnencrypted, EncryptionMode::kUnencrypted,
gfx::Size(800, 600));
kCodecAAC, kCodecH264, H264PROFILE_MAIN, "FFmpegAudioDecoder",
"FFmpegVideoDecoder", EncryptionMode::kUnencrypted,
EncryptionMode::kUnencrypted, gfx::Size(800, 600));
wtr_->UpdateSecondaryProperties(secondary_properties2.Clone());
constexpr base::TimeDelta kWatchTime2 = base::TimeDelta::FromSeconds(25);
......@@ -1205,6 +1226,8 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesWithFinalize) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, kUnderflowCount1);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties1->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties1->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties1->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties1->audio_encryption_scheme));
......@@ -1226,6 +1249,8 @@ TEST_F(WatchTimeRecorderTest, MultipleSecondaryPropertiesWithFinalize) {
EXPECT_UKM(UkmEntry::kRebuffersCountName, kUnderflowCount2);
EXPECT_UKM(UkmEntry::kAudioCodecName, secondary_properties2->audio_codec);
EXPECT_UKM(UkmEntry::kVideoCodecName, secondary_properties2->video_codec);
EXPECT_UKM(UkmEntry::kVideoCodecProfileName,
secondary_properties2->video_codec_profile);
EXPECT_UKM(
UkmEntry::kAudioEncryptionSchemeName,
static_cast<int64_t>(secondary_properties2->audio_encryption_scheme));
......
......@@ -3688,7 +3688,7 @@ be describing additional metrics about the same event.
</summary>
<metric name="AudioCodec">
<summary>
media::AudioCodec enum value. Can be kUnknownAudioCodec even with HasAudio
media::AudioCodec enum value. Can be kUnknownAudioCodec even when HasAudio
is true because we don't always know the codec.
</summary>
</metric>
......@@ -3783,10 +3783,16 @@ be describing additional metrics about the same event.
</metric>
<metric name="VideoCodec">
<summary>
media::VideoCodec enum value. Can be kUnknownVideoCodec even with HasVideo
media::VideoCodec enum value. Can be kUnknownVideoCodec even when HasVideo
is true because we don't always know the codec.
</summary>
</metric>
<metric name="VideoCodecProfile">
<summary>
media::VideoCodecProfile enum value. Can be VIDEO_CODEC_PROFILE_UNKNOWN
even when HasVideo is true because we don't always know the codec profile.
</summary>
</metric>
<metric name="VideoDecoderName">
<summary>
Enumeration of video decoder names, zero if none or unknown (Cast, HLS,
......@@ -4156,7 +4162,7 @@ be describing additional metrics about the same event.
<metric name="Video.CodecProfile">
<summary>
media::VideoCodecProfile enum value. Can be VIDEO_CODEC_PROFILE_UNKNOWN if
we don't know the audio codec.
we don't know the video codec.
</summary>
</metric>
<metric name="Video.EME.KeySystem">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment