diff --git a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc index 09fd7c8a82..bca52d9bfc 100644 --- a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc +++ b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc @@ -62,6 +62,9 @@ void DefaultAudioQualityAnalyzer::OnStatsReports( TimeDelta::Seconds(stat->jitter_buffer_target_delay.ValueOrDefault(0.)); sample.jitter_buffer_emitted_count = stat->jitter_buffer_emitted_count.ValueOrDefault(0ul); + sample.total_samples_duration = + stat->total_samples_duration.ValueOrDefault(0.); + sample.total_audio_energy = stat->total_audio_energy.ValueOrDefault(0.); TrackIdStreamInfoMap::StreamInfo stream_info = analyzer_helper_->GetStreamInfoFromTrackId(*stat->track_identifier); @@ -115,6 +118,9 @@ void DefaultAudioQualityAnalyzer::OnStatsReports( jitter_buffer_target_delay_diff.ms() / jitter_buffer_emitted_count_diff); } + audio_stream_stats.energy.AddSample(sqrt( + (sample.total_audio_energy - prev_sample.total_audio_energy) / + (sample.total_samples_duration - prev_sample.total_samples_duration))); last_stats_sample_[stream_info.stream_label] = sample; } @@ -161,6 +167,10 @@ void DefaultAudioQualityAnalyzer::Stop() { "preferred_buffer_size_ms", GetTestCaseName(item.first), item.second.preferred_buffer_size_ms, Unit::kMilliseconds, ImprovementDirection::kNeitherIsBetter, metric_metadata); + metrics_logger_->LogMetric("energy", GetTestCaseName(item.first), + item.second.energy, Unit::kUnitless, + ImprovementDirection::kNeitherIsBetter, + metric_metadata); } } diff --git a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h index 9e427afed8..c59f727422 100644 --- a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h +++ b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h @@ -32,6 +32,7 @@ struct AudioStreamStats { SamplesStatsCounter speech_expand_rate; SamplesStatsCounter average_jitter_buffer_delay_ms; SamplesStatsCounter preferred_buffer_size_ms; + SamplesStatsCounter energy; }; class DefaultAudioQualityAnalyzer : public AudioQualityAnalyzerInterface { @@ -59,6 +60,8 @@ class DefaultAudioQualityAnalyzer : public AudioQualityAnalyzerInterface { TimeDelta jitter_buffer_delay = TimeDelta::Zero(); TimeDelta jitter_buffer_target_delay = TimeDelta::Zero(); uint64_t jitter_buffer_emitted_count = 0; + double total_samples_duration = 0.0; + double total_audio_energy = 0.0; }; std::string GetTestCaseName(const std::string& stream_label) const; diff --git a/test/pc/e2e/peer_connection_quality_test_metric_names_test.cc b/test/pc/e2e/peer_connection_quality_test_metric_names_test.cc index a2830af72d..46f7e93243 100644 --- a/test/pc/e2e/peer_connection_quality_test_metric_names_test.cc +++ b/test/pc/e2e/peer_connection_quality_test_metric_names_test.cc @@ -1090,10 +1090,32 @@ TEST(PeerConnectionE2EQualityTestMetricNamesTest, .name = "video_ahead_ms", .unit = Unit::kMilliseconds, .improvement_direction = ImprovementDirection::kSmallerIsBetter, + .metadata = + {{MetricMetadataKey::kAudioStreamMetadataKey, "bob_video"}, + {MetricMetadataKey::kPeerMetadataKey, "alice"}, + {MetricMetadataKey::kPeerSyncGroupMetadataKey, "bob"}, + {MetricMetadataKey::kReceiverMetadataKey, "alice"}, + {MetricMetadataKey::kExperimentalTestNameMetadataKey, + "test_case"}}}, + MetricValidationInfo{ + .test_case = "test_case/alice_audio", + .name = "energy", + .unit = Unit::kUnitless, + .improvement_direction = ImprovementDirection::kNeitherIsBetter, + .metadata = {{MetricMetadataKey::kAudioStreamMetadataKey, + "alice_audio"}, + {MetricMetadataKey::kPeerMetadataKey, "bob"}, + {MetricMetadataKey::kReceiverMetadataKey, "bob"}, + {MetricMetadataKey::kExperimentalTestNameMetadataKey, + "test_case"}}}, + MetricValidationInfo{ + .test_case = "test_case/bob_audio", + .name = "energy", + .unit = Unit::kUnitless, + .improvement_direction = ImprovementDirection::kNeitherIsBetter, .metadata = { - {MetricMetadataKey::kAudioStreamMetadataKey, "bob_video"}, + {MetricMetadataKey::kAudioStreamMetadataKey, "bob_audio"}, {MetricMetadataKey::kPeerMetadataKey, "alice"}, - {MetricMetadataKey::kPeerSyncGroupMetadataKey, "bob"}, {MetricMetadataKey::kReceiverMetadataKey, "alice"}, {MetricMetadataKey::kExperimentalTestNameMetadataKey, "test_case"}}}));