diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc b/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc index 2cb4409e9d..7e3806fb84 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc @@ -1049,6 +1049,12 @@ void DefaultVideoQualityAnalyzer::ReportResults( metric_metadata); if (options_.report_detailed_frame_stats) { + metrics_logger_->LogSingleValueMetric( + "capture_frame_rate", test_case_name, + stats.capture_frame_rate.IsEmpty() + ? 0 + : stats.capture_frame_rate.GetEventsPerSecond(), + Unit::kHertz, ImprovementDirection::kBiggerIsBetter, metric_metadata); metrics_logger_->LogSingleValueMetric( "num_encoded_frames", test_case_name, frame_counters.encoded, Unit::kCount, ImprovementDirection::kBiggerIsBetter, metric_metadata); diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc index 739ab3d895..3b7dc407e3 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc @@ -434,6 +434,7 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( stats->ssim.AddSample( StatsSample(ssim, frame_stats.received_time, metadata)); } + stats->capture_frame_rate.AddEvent(frame_stats.captured_time); // Compute dropped phase for dropped frame if (comparison.type == FrameComparisonType::kDroppedFrame) { diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_metric_names_test.cc b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_metric_names_test.cc index e1458d4812..6b97612202 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_metric_names_test.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_metric_names_test.cc @@ -282,6 +282,11 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest, MetricNamesForP2PAreCorrect) { .name = "actual_encode_bitrate", .unit = Unit::kKilobitsPerSecond, .improvement_direction = ImprovementDirection::kNeitherIsBetter}, + MetricValidationInfo{ + .test_case = "test_case/alice_video", + .name = "capture_frame_rate", + .unit = Unit::kHertz, + .improvement_direction = ImprovementDirection::kBiggerIsBetter}, MetricValidationInfo{ .test_case = "test_case/alice_video", .name = "num_encoded_frames", @@ -446,6 +451,11 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest, .name = "actual_encode_bitrate", .unit = Unit::kKilobitsPerSecond, .improvement_direction = ImprovementDirection::kNeitherIsBetter}, + MetricValidationInfo{ + .test_case = "test_case/alice_video_alice_bob", + .name = "capture_frame_rate", + .unit = Unit::kHertz, + .improvement_direction = ImprovementDirection::kBiggerIsBetter}, MetricValidationInfo{ .test_case = "test_case/alice_video_alice_bob", .name = "num_encoded_frames", @@ -578,6 +588,11 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest, .name = "actual_encode_bitrate", .unit = Unit::kKilobitsPerSecond, .improvement_direction = ImprovementDirection::kNeitherIsBetter}, + MetricValidationInfo{ + .test_case = "test_case/alice_video_alice_charlie", + .name = "capture_frame_rate", + .unit = Unit::kHertz, + .improvement_direction = ImprovementDirection::kBiggerIsBetter}, MetricValidationInfo{ .test_case = "test_case/alice_video_alice_charlie", .name = "num_encoded_frames", @@ -641,10 +656,10 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest, std::vector metrics = ToTestCases(metrics_logger.GetCollectedMetrics()); - EXPECT_THAT(metrics, SizeIs(53)); - EXPECT_THAT(metrics, Contains("test_case/alice_video_alice_bob").Times(26)); + EXPECT_THAT(metrics, SizeIs(55)); + EXPECT_THAT(metrics, Contains("test_case/alice_video_alice_bob").Times(27)); EXPECT_THAT(metrics, - Contains("test_case/alice_video_alice_charlie").Times(26)); + Contains("test_case/alice_video_alice_charlie").Times(27)); EXPECT_THAT(metrics, Contains("test_case").Times(1)); } diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_shared_objects.h b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_shared_objects.h index a52914e6b7..69fb1cea83 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_shared_objects.h +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_shared_objects.h @@ -125,6 +125,7 @@ struct StreamStats { SamplesStatsCounter total_delay_incl_transport_ms; // Time between frames out from renderer. SamplesStatsCounter time_between_rendered_frames_ms; + SamplesRateCounter capture_frame_rate; SamplesRateCounter encode_frame_rate; SamplesStatsCounter encode_time_ms; SamplesStatsCounter decode_time_ms;