From 048f5c751679ddb653f77a8d5baa0ed48cb79edc Mon Sep 17 00:00:00 2001 From: Artem Titov Date: Mon, 17 Oct 2022 23:47:27 +0200 Subject: [PATCH] [DVQA] Add capture_frame_rate metric as detailed stats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: b/240540204 Change-Id: I3e4a8f903f5b01c31418cc3e29d4e663d62a86a3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/279640 Reviewed-by: Björn Terelius Commit-Queue: Artem Titov Cr-Commit-Position: refs/heads/main@{#38427} --- .../video/default_video_quality_analyzer.cc | 6 ++++++ ...ideo_quality_analyzer_frames_comparator.cc | 1 + ...ideo_quality_analyzer_metric_names_test.cc | 21 ++++++++++++++++--- ...lt_video_quality_analyzer_shared_objects.h | 1 + 4 files changed, 26 insertions(+), 3 deletions(-) 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;