[PCLF] Add possibility to use new perf metrics api in NetworkQualityMetricsReporter
Bug: b/246095034
Change-Id: I5198d73aaf2b32b59c9c15504628d0edd2bd9885
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/276201
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38146}
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index a44041c..141022d 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -853,6 +853,8 @@
"../../../api:peer_connection_quality_test_fixture_api",
"../../../api:rtc_stats_api",
"../../../api:track_id_stream_info_map",
+ "../../../api/test/metrics:metric",
+ "../../../api/test/metrics:metrics_logger_and_exporter",
"../../../api/units:data_size",
"../../../rtc_base:criticalsection",
"../../../rtc_base:rtc_event",
diff --git a/test/pc/e2e/network_quality_metrics_reporter.cc b/test/pc/e2e/network_quality_metrics_reporter.cc
index d63cd09..93d5438 100644
--- a/test/pc/e2e/network_quality_metrics_reporter.cc
+++ b/test/pc/e2e/network_quality_metrics_reporter.cc
@@ -13,6 +13,7 @@
#include "api/stats/rtc_stats.h"
#include "api/stats/rtcstats_objects.h"
+#include "api/test/metrics/metric.h"
#include "rtc_base/event.h"
#include "system_wrappers/include/field_trial.h"
#include "test/testsupport/perf_test.h"
@@ -21,6 +22,9 @@
namespace webrtc_pc_e2e {
namespace {
+using ::webrtc::test::ImprovementDirection;
+using ::webrtc::test::Unit;
+
constexpr TimeDelta kStatsWaitTimeout = TimeDelta::Seconds(1);
// Field trial which controls whether to report standard-compliant bytes
@@ -109,35 +113,79 @@
const std::string& network_label,
std::unique_ptr<EmulatedNetworkStats> stats,
int64_t packet_loss) {
- ReportResult("bytes_sent", network_label, stats->BytesSent().bytes(),
- "sizeInBytes");
- ReportResult("packets_sent", network_label, stats->PacketsSent(), "unitless");
- ReportResult(
- "average_send_rate", network_label,
- stats->PacketsSent() >= 2 ? stats->AverageSendRate().bytes_per_sec() : 0,
- "bytesPerSecond");
- ReportResult("bytes_discarded_no_receiver", network_label,
- stats->BytesDropped().bytes(), "sizeInBytes");
- ReportResult("packets_discarded_no_receiver", network_label,
- stats->PacketsDropped(), "unitless");
- ReportResult("bytes_received", network_label, stats->BytesReceived().bytes(),
- "sizeInBytes");
- ReportResult("packets_received", network_label, stats->PacketsReceived(),
- "unitless");
- ReportResult("average_receive_rate", network_label,
- stats->PacketsReceived() >= 2
- ? stats->AverageReceiveRate().bytes_per_sec()
- : 0,
- "bytesPerSecond");
- ReportResult("sent_packets_loss", network_label, packet_loss, "unitless");
+ if (metrics_logger_ == nullptr) {
+ ReportResult("bytes_sent", network_label, stats->BytesSent().bytes(),
+ "sizeInBytes");
+ ReportResult("packets_sent", network_label, stats->PacketsSent(),
+ "unitless");
+ ReportResult("average_send_rate", network_label,
+ stats->PacketsSent() >= 2
+ ? stats->AverageSendRate().bytes_per_sec()
+ : 0,
+ "bytesPerSecond");
+ ReportResult("bytes_discarded_no_receiver", network_label,
+ stats->BytesDropped().bytes(), "sizeInBytes");
+ ReportResult("packets_discarded_no_receiver", network_label,
+ stats->PacketsDropped(), "unitless");
+ ReportResult("bytes_received", network_label,
+ stats->BytesReceived().bytes(), "sizeInBytes");
+ ReportResult("packets_received", network_label, stats->PacketsReceived(),
+ "unitless");
+ ReportResult("average_receive_rate", network_label,
+ stats->PacketsReceived() >= 2
+ ? stats->AverageReceiveRate().bytes_per_sec()
+ : 0,
+ "bytesPerSecond");
+ ReportResult("sent_packets_loss", network_label, packet_loss, "unitless");
+ } else {
+ metrics_logger_->LogSingleValueMetric(
+ "bytes_sent", network_label, stats->BytesSent().bytes(), Unit::kBytes,
+ ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "packets_sent", network_label, stats->PacketsSent(), Unit::kUnitless,
+ ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "average_send_rate", network_label,
+ stats->PacketsSent() >= 2 ? stats->AverageSendRate().kbps() : 0,
+ Unit::kKilobitsPerSecond, ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "bytes_discarded_no_receiver", network_label,
+ stats->BytesDropped().bytes(), Unit::kBytes,
+ ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "packets_discarded_no_receiver", network_label, stats->PacketsDropped(),
+ Unit::kUnitless, ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "bytes_received", network_label, stats->BytesReceived().bytes(),
+ Unit::kBytes, ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "packets_received", network_label, stats->PacketsReceived(),
+ Unit::kUnitless, ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "average_receive_rate", network_label,
+ stats->PacketsReceived() >= 2 ? stats->AverageReceiveRate().kbps() : 0,
+ Unit::kKilobitsPerSecond, ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "sent_packets_loss", network_label, packet_loss, Unit::kUnitless,
+ ImprovementDirection::kNeitherIsBetter);
+ }
}
void NetworkQualityMetricsReporter::ReportPCStats(const std::string& pc_label,
const PCStats& stats) {
- ReportResult("payload_bytes_received", pc_label,
- stats.payload_received.bytes(), "sizeInBytes");
- ReportResult("payload_bytes_sent", pc_label, stats.payload_sent.bytes(),
- "sizeInBytes");
+ if (metrics_logger_ == nullptr) {
+ ReportResult("payload_bytes_received", pc_label,
+ stats.payload_received.bytes(), "sizeInBytes");
+ ReportResult("payload_bytes_sent", pc_label, stats.payload_sent.bytes(),
+ "sizeInBytes");
+ } else {
+ metrics_logger_->LogSingleValueMetric(
+ "payload_bytes_received", pc_label, stats.payload_received.bytes(),
+ Unit::kBytes, ImprovementDirection::kNeitherIsBetter);
+ metrics_logger_->LogSingleValueMetric(
+ "payload_bytes_sent", pc_label, stats.payload_sent.bytes(),
+ Unit::kBytes, ImprovementDirection::kNeitherIsBetter);
+ }
}
void NetworkQualityMetricsReporter::ReportResult(
diff --git a/test/pc/e2e/network_quality_metrics_reporter.h b/test/pc/e2e/network_quality_metrics_reporter.h
index 5cedce1..63b35e9 100644
--- a/test/pc/e2e/network_quality_metrics_reporter.h
+++ b/test/pc/e2e/network_quality_metrics_reporter.h
@@ -15,6 +15,7 @@
#include <string>
#include "absl/strings/string_view.h"
+#include "api/test/metrics/metrics_logger_and_exporter.h"
#include "api/test/network_emulation_manager.h"
#include "api/test/peerconnection_quality_test_fixture.h"
#include "api/test/track_id_stream_info_map.h"
@@ -29,7 +30,15 @@
public:
NetworkQualityMetricsReporter(EmulatedNetworkManagerInterface* alice_network,
EmulatedNetworkManagerInterface* bob_network)
- : alice_network_(alice_network), bob_network_(bob_network) {}
+ : NetworkQualityMetricsReporter(alice_network,
+ bob_network,
+ /*metrics_logger=*/nullptr) {}
+ NetworkQualityMetricsReporter(EmulatedNetworkManagerInterface* alice_network,
+ EmulatedNetworkManagerInterface* bob_network,
+ test::MetricsLoggerAndExporter* metrics_logger)
+ : alice_network_(alice_network),
+ bob_network_(bob_network),
+ metrics_logger_(metrics_logger) {}
~NetworkQualityMetricsReporter() override = default;
// Network stats must be empty when this method will be invoked.
@@ -62,8 +71,9 @@
std::string test_case_name_;
- EmulatedNetworkManagerInterface* alice_network_;
- EmulatedNetworkManagerInterface* bob_network_;
+ EmulatedNetworkManagerInterface* const alice_network_;
+ EmulatedNetworkManagerInterface* const bob_network_;
+ test::MetricsLoggerAndExporter* const metrics_logger_;
Mutex lock_;
std::map<std::string, PCStats> pc_stats_ RTC_GUARDED_BY(lock_);
};