[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_;