[DVQA] Add capture_frame_rate metric as detailed stats Bug: b/240540204 Change-Id: I3e4a8f903f5b01c31418cc3e29d4e663d62a86a3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/279640 Reviewed-by: Björn Terelius <terelius@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38427}
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 2cb4409..7e3806f 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc
@@ -1050,6 +1050,12 @@ 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); metrics_logger_->LogSingleValueMetric(
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 739ab3d..3b7dc40 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 @@ 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 e1458d4..6b97612 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
@@ -284,6 +284,11 @@ .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", .unit = Unit::kCount, .improvement_direction = ImprovementDirection::kBiggerIsBetter}, @@ -448,6 +453,11 @@ .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", .unit = Unit::kCount, .improvement_direction = ImprovementDirection::kBiggerIsBetter}, @@ -580,6 +590,11 @@ .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", .unit = Unit::kCount, .improvement_direction = ImprovementDirection::kBiggerIsBetter}, @@ -641,10 +656,10 @@ std::vector<std::string> 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 a52914e..69fb1ce 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 @@ 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;