[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}
This commit is contained in:
Artem Titov 2022-10-17 23:47:27 +02:00 committed by WebRTC LUCI CQ
parent 64a33f2453
commit 048f5c7516
4 changed files with 26 additions and 3 deletions

View File

@ -1049,6 +1049,12 @@ void DefaultVideoQualityAnalyzer::ReportResults(
metric_metadata); metric_metadata);
if (options_.report_detailed_frame_stats) { 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( metrics_logger_->LogSingleValueMetric(
"num_encoded_frames", test_case_name, frame_counters.encoded, "num_encoded_frames", test_case_name, frame_counters.encoded,
Unit::kCount, ImprovementDirection::kBiggerIsBetter, metric_metadata); Unit::kCount, ImprovementDirection::kBiggerIsBetter, metric_metadata);

View File

@ -434,6 +434,7 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison(
stats->ssim.AddSample( stats->ssim.AddSample(
StatsSample(ssim, frame_stats.received_time, metadata)); StatsSample(ssim, frame_stats.received_time, metadata));
} }
stats->capture_frame_rate.AddEvent(frame_stats.captured_time);
// Compute dropped phase for dropped frame // Compute dropped phase for dropped frame
if (comparison.type == FrameComparisonType::kDroppedFrame) { if (comparison.type == FrameComparisonType::kDroppedFrame) {

View File

@ -282,6 +282,11 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest, MetricNamesForP2PAreCorrect) {
.name = "actual_encode_bitrate", .name = "actual_encode_bitrate",
.unit = Unit::kKilobitsPerSecond, .unit = Unit::kKilobitsPerSecond,
.improvement_direction = ImprovementDirection::kNeitherIsBetter}, .improvement_direction = ImprovementDirection::kNeitherIsBetter},
MetricValidationInfo{
.test_case = "test_case/alice_video",
.name = "capture_frame_rate",
.unit = Unit::kHertz,
.improvement_direction = ImprovementDirection::kBiggerIsBetter},
MetricValidationInfo{ MetricValidationInfo{
.test_case = "test_case/alice_video", .test_case = "test_case/alice_video",
.name = "num_encoded_frames", .name = "num_encoded_frames",
@ -446,6 +451,11 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest,
.name = "actual_encode_bitrate", .name = "actual_encode_bitrate",
.unit = Unit::kKilobitsPerSecond, .unit = Unit::kKilobitsPerSecond,
.improvement_direction = ImprovementDirection::kNeitherIsBetter}, .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{ MetricValidationInfo{
.test_case = "test_case/alice_video_alice_bob", .test_case = "test_case/alice_video_alice_bob",
.name = "num_encoded_frames", .name = "num_encoded_frames",
@ -578,6 +588,11 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest,
.name = "actual_encode_bitrate", .name = "actual_encode_bitrate",
.unit = Unit::kKilobitsPerSecond, .unit = Unit::kKilobitsPerSecond,
.improvement_direction = ImprovementDirection::kNeitherIsBetter}, .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{ MetricValidationInfo{
.test_case = "test_case/alice_video_alice_charlie", .test_case = "test_case/alice_video_alice_charlie",
.name = "num_encoded_frames", .name = "num_encoded_frames",
@ -641,10 +656,10 @@ TEST(DefaultVideoQualityAnalyzerMetricNamesTest,
std::vector<std::string> metrics = std::vector<std::string> metrics =
ToTestCases(metrics_logger.GetCollectedMetrics()); ToTestCases(metrics_logger.GetCollectedMetrics());
EXPECT_THAT(metrics, SizeIs(53)); EXPECT_THAT(metrics, SizeIs(55));
EXPECT_THAT(metrics, Contains("test_case/alice_video_alice_bob").Times(26)); EXPECT_THAT(metrics, Contains("test_case/alice_video_alice_bob").Times(27));
EXPECT_THAT(metrics, 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)); EXPECT_THAT(metrics, Contains("test_case").Times(1));
} }

View File

@ -125,6 +125,7 @@ struct StreamStats {
SamplesStatsCounter total_delay_incl_transport_ms; SamplesStatsCounter total_delay_incl_transport_ms;
// Time between frames out from renderer. // Time between frames out from renderer.
SamplesStatsCounter time_between_rendered_frames_ms; SamplesStatsCounter time_between_rendered_frames_ms;
SamplesRateCounter capture_frame_rate;
SamplesRateCounter encode_frame_rate; SamplesRateCounter encode_frame_rate;
SamplesStatsCounter encode_time_ms; SamplesStatsCounter encode_time_ms;
SamplesStatsCounter decode_time_ms; SamplesStatsCounter decode_time_ms;