From 2d1907bfd24f9a713db4d357bd13230fa7b84c31 Mon Sep 17 00:00:00 2001 From: Artem Titov Date: Wed, 21 Sep 2022 09:28:56 +0200 Subject: [PATCH] [PCLF] Add possibility to use new perf metrics api in DefaultAudioQualityAnalyzer Bug: b/246095034 Change-Id: I045fd739ac31c0f13ee46adc831063d9773c39c7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/276180 Reviewed-by: Mirko Bonadei Commit-Queue: Artem Titov Cr-Commit-Position: refs/heads/main@{#38144} --- test/pc/e2e/BUILD.gn | 2 + .../audio/default_audio_quality_analyzer.cc | 57 ++++++++++++++----- .../audio/default_audio_quality_analyzer.h | 9 +++ 3 files changed, 53 insertions(+), 15 deletions(-) diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index 93e8800b49..49897a3f76 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -644,6 +644,8 @@ if (!build_with_chromium) { "../../../api:stats_observer_interface", "../../../api:track_id_stream_info_map", "../../../api/numerics", + "../../../api/test/metrics:metric", + "../../../api/test/metrics:metrics_logger_and_exporter", "../../../api/units:time_delta", "../../../api/units:timestamp", "../../../rtc_base:criticalsection", 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 0577bccb62..63b5960e6a 100644 --- a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc +++ b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.cc @@ -12,11 +12,15 @@ #include "api/stats/rtc_stats.h" #include "api/stats/rtcstats_objects.h" +#include "api/test/metrics/metric.h" #include "rtc_base/logging.h" namespace webrtc { namespace webrtc_pc_e2e { +using ::webrtc::test::ImprovementDirection; +using ::webrtc::test::Unit; + void DefaultAudioQualityAnalyzer::Start(std::string test_case_name, TrackIdStreamInfoMap* analyzer_helper) { test_case_name_ = std::move(test_case_name); @@ -115,21 +119,44 @@ void DefaultAudioQualityAnalyzer::Stop() { using ::webrtc::test::ImproveDirection; MutexLock lock(&lock_); for (auto& item : streams_stats_) { - ReportResult("expand_rate", item.first, item.second.expand_rate, "unitless", - ImproveDirection::kSmallerIsBetter); - ReportResult("accelerate_rate", item.first, item.second.accelerate_rate, - "unitless", ImproveDirection::kSmallerIsBetter); - ReportResult("preemptive_rate", item.first, item.second.preemptive_rate, - "unitless", ImproveDirection::kSmallerIsBetter); - ReportResult("speech_expand_rate", item.first, - item.second.speech_expand_rate, "unitless", - ImproveDirection::kSmallerIsBetter); - ReportResult("average_jitter_buffer_delay_ms", item.first, - item.second.average_jitter_buffer_delay_ms, "ms", - ImproveDirection::kNone); - ReportResult("preferred_buffer_size_ms", item.first, - item.second.preferred_buffer_size_ms, "ms", - ImproveDirection::kNone); + if (metrics_logger_ == nullptr) { + ReportResult("expand_rate", item.first, item.second.expand_rate, + "unitless", ImproveDirection::kSmallerIsBetter); + ReportResult("accelerate_rate", item.first, item.second.accelerate_rate, + "unitless", ImproveDirection::kSmallerIsBetter); + ReportResult("preemptive_rate", item.first, item.second.preemptive_rate, + "unitless", ImproveDirection::kSmallerIsBetter); + ReportResult("speech_expand_rate", item.first, + item.second.speech_expand_rate, "unitless", + ImproveDirection::kSmallerIsBetter); + ReportResult("average_jitter_buffer_delay_ms", item.first, + item.second.average_jitter_buffer_delay_ms, "ms", + ImproveDirection::kNone); + ReportResult("preferred_buffer_size_ms", item.first, + item.second.preferred_buffer_size_ms, "ms", + ImproveDirection::kNone); + } else { + metrics_logger_->LogMetric("expand_rate", item.first, + item.second.expand_rate, Unit::kUnitless, + ImprovementDirection::kSmallerIsBetter); + metrics_logger_->LogMetric("accelerate_rate", item.first, + item.second.accelerate_rate, Unit::kUnitless, + ImprovementDirection::kSmallerIsBetter); + metrics_logger_->LogMetric("preemptive_rate", item.first, + item.second.preemptive_rate, Unit::kUnitless, + ImprovementDirection::kSmallerIsBetter); + metrics_logger_->LogMetric( + "speech_expand_rate", item.first, item.second.speech_expand_rate, + Unit::kUnitless, ImprovementDirection::kSmallerIsBetter); + metrics_logger_->LogMetric("average_jitter_buffer_delay_ms", item.first, + item.second.average_jitter_buffer_delay_ms, + Unit::kMilliseconds, + ImprovementDirection::kNeitherIsBetter); + metrics_logger_->LogMetric("preferred_buffer_size_ms", item.first, + item.second.preferred_buffer_size_ms, + Unit::kMilliseconds, + ImprovementDirection::kNeitherIsBetter); + } } } 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 4ad0dd3da2..673f9079ce 100644 --- a/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h +++ b/test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h @@ -17,6 +17,7 @@ #include "absl/strings/string_view.h" #include "api/numerics/samples_stats_counter.h" #include "api/test/audio_quality_analyzer_interface.h" +#include "api/test/metrics/metrics_logger_and_exporter.h" #include "api/test/track_id_stream_info_map.h" #include "api/units/time_delta.h" #include "rtc_base/synchronization/mutex.h" @@ -36,6 +37,12 @@ struct AudioStreamStats { class DefaultAudioQualityAnalyzer : public AudioQualityAnalyzerInterface { public: + DefaultAudioQualityAnalyzer() + : DefaultAudioQualityAnalyzer(/*metrics_logger=*/nullptr) {} + explicit DefaultAudioQualityAnalyzer( + test::MetricsLoggerAndExporter* const metrics_logger) + : metrics_logger_(metrics_logger) {} + void Start(std::string test_case_name, TrackIdStreamInfoMap* analyzer_helper) override; void OnStatsReports( @@ -65,6 +72,8 @@ class DefaultAudioQualityAnalyzer : public AudioQualityAnalyzerInterface { const std::string& unit, webrtc::test::ImproveDirection improve_direction) const; + test::MetricsLoggerAndExporter* const metrics_logger_; + std::string test_case_name_; TrackIdStreamInfoMap* analyzer_helper_;