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

Bug: b/246095034
Change-Id: I8d6dd352cb12ee2b729bb534a1646b178fe0b6db
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/276181
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38147}
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 141022d..cc2707a 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -909,6 +909,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:timestamp",
       "../../../rtc_base:criticalsection",
       "../../../rtc_base:rtc_event",
diff --git a/test/pc/e2e/cross_media_metrics_reporter.cc b/test/pc/e2e/cross_media_metrics_reporter.cc
index 96f661f..2b5373f 100644
--- a/test/pc/e2e/cross_media_metrics_reporter.cc
+++ b/test/pc/e2e/cross_media_metrics_reporter.cc
@@ -14,6 +14,7 @@
 
 #include "api/stats/rtc_stats.h"
 #include "api/stats/rtcstats_objects.h"
+#include "api/test/metrics/metric.h"
 #include "api/units/timestamp.h"
 #include "rtc_base/event.h"
 #include "system_wrappers/include/field_trial.h"
@@ -21,6 +22,9 @@
 namespace webrtc {
 namespace webrtc_pc_e2e {
 
+using ::webrtc::test::ImprovementDirection;
+using ::webrtc::test::Unit;
+
 void CrossMediaMetricsReporter::Start(
     absl::string_view test_case_name,
     const TrackIdStreamInfoMap* reporter_helper) {
@@ -98,14 +102,27 @@
   MutexLock lock(&mutex_);
   for (const auto& pair : stats_info_) {
     const std::string& sync_group = pair.first;
-    ReportResult("audio_ahead_ms",
-                 GetTestCaseName(pair.second.audio_stream_label, sync_group),
-                 pair.second.audio_ahead_ms, "ms",
-                 webrtc::test::ImproveDirection::kSmallerIsBetter);
-    ReportResult("video_ahead_ms",
-                 GetTestCaseName(pair.second.video_stream_label, sync_group),
-                 pair.second.video_ahead_ms, "ms",
-                 webrtc::test::ImproveDirection::kSmallerIsBetter);
+    if (metrics_logger_ == nullptr) {
+      ReportResult("audio_ahead_ms",
+                   GetTestCaseName(pair.second.audio_stream_label, sync_group),
+                   pair.second.audio_ahead_ms, "ms",
+                   webrtc::test::ImproveDirection::kSmallerIsBetter);
+      ReportResult("video_ahead_ms",
+                   GetTestCaseName(pair.second.video_stream_label, sync_group),
+                   pair.second.video_ahead_ms, "ms",
+                   webrtc::test::ImproveDirection::kSmallerIsBetter);
+    } else {
+      metrics_logger_->LogMetric(
+          "audio_ahead_ms",
+          GetTestCaseName(pair.second.audio_stream_label, sync_group),
+          pair.second.audio_ahead_ms, Unit::kMilliseconds,
+          webrtc::test::ImprovementDirection::kSmallerIsBetter);
+      metrics_logger_->LogMetric(
+          "video_ahead_ms",
+          GetTestCaseName(pair.second.video_stream_label, sync_group),
+          pair.second.video_ahead_ms, Unit::kMilliseconds,
+          webrtc::test::ImprovementDirection::kSmallerIsBetter);
+    }
   }
 }
 
diff --git a/test/pc/e2e/cross_media_metrics_reporter.h b/test/pc/e2e/cross_media_metrics_reporter.h
index 6ddc994..fbb90b2 100644
--- a/test/pc/e2e/cross_media_metrics_reporter.h
+++ b/test/pc/e2e/cross_media_metrics_reporter.h
@@ -17,6 +17,7 @@
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.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/timestamp.h"
@@ -29,7 +30,11 @@
 class CrossMediaMetricsReporter
     : public PeerConnectionE2EQualityTestFixture::QualityMetricsReporter {
  public:
-  CrossMediaMetricsReporter() = default;
+  CrossMediaMetricsReporter()
+      : CrossMediaMetricsReporter(/*metrics_logger=*/nullptr) {}
+  explicit CrossMediaMetricsReporter(
+      test::MetricsLoggerAndExporter* metrics_logger)
+      : metrics_logger_(metrics_logger) {}
   ~CrossMediaMetricsReporter() override = default;
 
   void Start(absl::string_view test_case_name,
@@ -57,6 +62,8 @@
   std::string GetTestCaseName(const std::string& stream_label,
                               const std::string& sync_group) const;
 
+  test::MetricsLoggerAndExporter* const metrics_logger_;
+
   std::string test_case_name_;
   const TrackIdStreamInfoMap* reporter_helper_;