[PCLF] Add possibility to use new perf metrics api in VideoQualityMetricsReporter

Bug: b/246095034
Change-Id: Ia7a50404750538a65042562bd80f0cb88f78ab90
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/276102
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38142}
diff --git a/api/test/metrics/metrics_logger_and_exporter.h b/api/test/metrics/metrics_logger_and_exporter.h
index a761f74..4541790 100644
--- a/api/test/metrics/metrics_logger_and_exporter.h
+++ b/api/test/metrics/metrics_logger_and_exporter.h
@@ -49,7 +49,7 @@
                             double value,
                             Unit unit,
                             ImprovementDirection improvement_direction,
-                            std::map<std::string, std::string> metadata);
+                            std::map<std::string, std::string> metadata = {});
 
   // Adds metrics with a time series created based on the provided `values`.
   // `metadata` - metric's level metadata to add.
@@ -58,7 +58,7 @@
                  const SamplesStatsCounter& values,
                  Unit unit,
                  ImprovementDirection improvement_direction,
-                 std::map<std::string, std::string> metadata);
+                 std::map<std::string, std::string> metadata = {});
 
   // Adds metric with a time series with only stats object and without actual
   // collected values.
@@ -68,7 +68,7 @@
                  const Metric::Stats& metric_stats,
                  Unit unit,
                  ImprovementDirection improvement_direction,
-                 std::map<std::string, std::string> metadata);
+                 std::map<std::string, std::string> metadata = {});
 
   // Returns all metrics collected by this logger.
   std::vector<Metric> GetCollectedMetrics() const {
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index b68a93b..0ace4cc 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -688,6 +688,8 @@
       "../../../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 7a27ae0..0270805 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 @@
 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 ff195a4..bab97e9 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 @@
 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 @@
   };
 
   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 @@
   Timestamp Now() const { return clock_->CurrentTime(); }
 
   Clock* const clock_;
+  test::MetricsLoggerAndExporter* const metrics_logger_;
 
   std::string test_case_name_;
   absl::optional<Timestamp> start_time_;