diff --git a/api/test/metrics/metrics_logger_and_exporter.h b/api/test/metrics/metrics_logger_and_exporter.h index a761f7483c..454179028c 100644 --- a/api/test/metrics/metrics_logger_and_exporter.h +++ b/api/test/metrics/metrics_logger_and_exporter.h @@ -49,7 +49,7 @@ class MetricsLoggerAndExporter { double value, Unit unit, ImprovementDirection improvement_direction, - std::map metadata); + std::map metadata = {}); // Adds metrics with a time series created based on the provided `values`. // `metadata` - metric's level metadata to add. @@ -58,7 +58,7 @@ class MetricsLoggerAndExporter { const SamplesStatsCounter& values, Unit unit, ImprovementDirection improvement_direction, - std::map metadata); + std::map metadata = {}); // Adds metric with a time series with only stats object and without actual // collected values. @@ -68,7 +68,7 @@ class MetricsLoggerAndExporter { const Metric::Stats& metric_stats, Unit unit, ImprovementDirection improvement_direction, - std::map metadata); + std::map metadata = {}); // Returns all metrics collected by this logger. std::vector GetCollectedMetrics() const { diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index b68a93b813..0ace4cc525 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -688,6 +688,8 @@ if (!build_with_chromium) { "../../../api:rtc_stats_api", "../../../api:track_id_stream_info_map", "../../../api/numerics", + "../../../api/test/metrics:metric", + "../../../api/test/metrics:metrics_logger_and_exporter", "../../../api/units:data_rate", "../../../api/units:data_size", "../../../api/units:time_delta", diff --git a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc index 7a27ae0680..0270805351 100644 --- a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc +++ b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc @@ -12,12 +12,23 @@ #include "api/stats/rtc_stats.h" #include "api/stats/rtcstats_objects.h" +#include "api/test/metrics/metric.h" #include "api/units/data_rate.h" #include "api/units/time_delta.h" #include "api/units/timestamp.h" namespace webrtc { namespace webrtc_pc_e2e { +namespace { + +using ::webrtc::test::ImprovementDirection; +using ::webrtc::test::Unit; + +SamplesStatsCounter BytesPerSecondToKbps(const SamplesStatsCounter& counter) { + return counter * 0.008; +} + +} // namespace void VideoQualityMetricsReporter::Start( absl::string_view test_case_name, @@ -111,12 +122,27 @@ std::string VideoQualityMetricsReporter::GetTestCaseName( void VideoQualityMetricsReporter::ReportVideoBweResults( const std::string& test_case_name, const VideoBweStats& video_bwe_stats) { - ReportResult("available_send_bandwidth", test_case_name, - video_bwe_stats.available_send_bandwidth, "bytesPerSecond"); - ReportResult("transmission_bitrate", test_case_name, - video_bwe_stats.transmission_bitrate, "bytesPerSecond"); - ReportResult("retransmission_bitrate", test_case_name, - video_bwe_stats.retransmission_bitrate, "bytesPerSecond"); + if (metrics_logger_ == nullptr) { + ReportResult("available_send_bandwidth", test_case_name, + video_bwe_stats.available_send_bandwidth, "bytesPerSecond"); + ReportResult("transmission_bitrate", test_case_name, + video_bwe_stats.transmission_bitrate, "bytesPerSecond"); + ReportResult("retransmission_bitrate", test_case_name, + video_bwe_stats.retransmission_bitrate, "bytesPerSecond"); + } else { + metrics_logger_->LogMetric( + "available_send_bandwidth", test_case_name, + BytesPerSecondToKbps(video_bwe_stats.available_send_bandwidth), + Unit::kKilobitsPerSecond, ImprovementDirection::kNeitherIsBetter); + metrics_logger_->LogMetric( + "transmission_bitrate", test_case_name, + BytesPerSecondToKbps(video_bwe_stats.transmission_bitrate), + Unit::kKilobitsPerSecond, ImprovementDirection::kNeitherIsBetter); + metrics_logger_->LogMetric( + "retransmission_bitrate", test_case_name, + BytesPerSecondToKbps(video_bwe_stats.retransmission_bitrate), + Unit::kKilobitsPerSecond, ImprovementDirection::kNeitherIsBetter); + } } void VideoQualityMetricsReporter::ReportResult( diff --git a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h index ff195a450e..bab97e990b 100644 --- a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h +++ b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h @@ -16,6 +16,7 @@ #include "absl/strings/string_view.h" #include "api/numerics/samples_stats_counter.h" +#include "api/test/metrics/metrics_logger_and_exporter.h" #include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/track_id_stream_info_map.h" #include "api/units/data_size.h" @@ -35,7 +36,12 @@ struct VideoBweStats { class VideoQualityMetricsReporter : public PeerConnectionE2EQualityTestFixture::QualityMetricsReporter { public: - VideoQualityMetricsReporter(Clock* const clock) : clock_(clock) {} + explicit VideoQualityMetricsReporter(Clock* const clock) + : VideoQualityMetricsReporter(clock, /*metrics_logger=*/nullptr) {} + explicit VideoQualityMetricsReporter( + Clock* const clock, + test::MetricsLoggerAndExporter* const metrics_logger) + : clock_(clock), metrics_logger_(metrics_logger) {} ~VideoQualityMetricsReporter() override = default; void Start(absl::string_view test_case_name, @@ -55,8 +61,8 @@ class VideoQualityMetricsReporter }; std::string GetTestCaseName(const std::string& stream_label) const; - static void ReportVideoBweResults(const std::string& test_case_name, - const VideoBweStats& video_bwe_stats); + void ReportVideoBweResults(const std::string& test_case_name, + const VideoBweStats& video_bwe_stats); // Report result for single metric for specified stream. static void ReportResult(const std::string& metric_name, const std::string& test_case_name, @@ -67,6 +73,7 @@ class VideoQualityMetricsReporter Timestamp Now() const { return clock_->CurrentTime(); } Clock* const clock_; + test::MetricsLoggerAndExporter* const metrics_logger_; std::string test_case_name_; absl::optional start_time_;