[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}
This commit is contained in:
Artem Titov 2022-09-21 08:48:45 +02:00 committed by WebRTC LUCI CQ
parent a5d2c7ecd6
commit 164bb2fcca
4 changed files with 47 additions and 12 deletions

View File

@ -49,7 +49,7 @@ class MetricsLoggerAndExporter {
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 @@ class MetricsLoggerAndExporter {
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 @@ class MetricsLoggerAndExporter {
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 {

View File

@ -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",

View File

@ -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(

View File

@ -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<Timestamp> start_time_;