Reset prev_sample bytes count when scalability mode changes.
Change-Id: I0499dec1a18d75e982b583c6caa0f3f20537529a
Bug: b/398190061
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/379640
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Jeremy Leconte <jleconte@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44031}
diff --git a/test/pc/e2e/analyzer/video/BUILD.gn b/test/pc/e2e/analyzer/video/BUILD.gn
index e055703..f9acf89 100644
--- a/test/pc/e2e/analyzer/video/BUILD.gn
+++ b/test/pc/e2e/analyzer/video/BUILD.gn
@@ -263,6 +263,7 @@
"../..:metric_metadata_keys",
"../../../../../api:peer_connection_quality_test_fixture_api",
"../../../../../api:rtc_stats_api",
+ "../../../../../api:scoped_refptr",
"../../../../../api:track_id_stream_info_map",
"../../../../../api/numerics",
"../../../../../api/test/metrics:metric",
@@ -272,7 +273,11 @@
"../../../../../api/units:time_delta",
"../../../../../api/units:timestamp",
"../../../../../rtc_base:checks",
+ "../../../../../rtc_base:logging",
+ "../../../../../rtc_base:macromagic",
"../../../../../rtc_base/synchronization:mutex",
+ "../../../../../rtc_base/synchronization:mutex",
+ "../../../../../system_wrappers",
"//third_party/abseil-cpp/absl/strings:string_view",
]
}
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 87f1590..8669457 100644
--- a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc
+++ b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc
@@ -13,13 +13,22 @@
#include <map>
#include <string>
+#include "absl/strings/string_view.h"
+#include "api/numerics/samples_stats_counter.h"
+#include "api/scoped_refptr.h"
#include "api/stats/rtc_stats.h"
+#include "api/stats/rtc_stats_report.h"
#include "api/stats/rtcstats_objects.h"
#include "api/test/metrics/metric.h"
+#include "api/test/metrics/metrics_logger.h"
+#include "api/test/track_id_stream_info_map.h"
#include "api/units/data_rate.h"
+#include "api/units/data_size.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "rtc_base/checks.h"
+#include "rtc_base/synchronization/mutex.h"
+#include "system_wrappers/include/clock.h"
#include "test/pc/e2e/metric_metadata_keys.h"
namespace webrtc {
@@ -28,7 +37,6 @@
using ::webrtc::test::ImprovementDirection;
using ::webrtc::test::Unit;
-using ::webrtc::webrtc_pc_e2e::MetricMetadataKey;
SamplesStatsCounter BytesPerSecondToKbps(const SamplesStatsCounter& counter) {
return counter * 0.008;
@@ -73,12 +81,10 @@
auto outbound_rtp_stats = report->GetStatsOfType<RTCOutboundRtpStreamStats>();
StatsSample sample;
for (auto& s : outbound_rtp_stats) {
- if (!s->kind.has_value()) {
+ if (!s->kind.has_value() || *s->kind != "video") {
continue;
}
- if (!(*s->kind == "video")) {
- continue;
- }
+ sample.scalability_mode = s->scalability_mode;
if (s->timestamp() > sample.sample_time) {
sample.sample_time = s->timestamp();
}
@@ -99,6 +105,12 @@
}
StatsSample prev_sample = last_stats_sample_[std::string(pc_label)];
+ if (prev_sample.scalability_mode != sample.scalability_mode) {
+ // Counters are reset when the scalability mode changes.
+ prev_sample.bytes_sent = DataSize::Zero();
+ prev_sample.header_bytes_sent = DataSize::Zero();
+ prev_sample.retransmitted_bytes_sent = DataSize::Zero();
+ }
if (prev_sample.sample_time.IsZero()) {
prev_sample.sample_time = start_time_.value();
}
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 cc31c48..75e2ace 100644
--- a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h
+++ b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h
@@ -12,16 +12,21 @@
#define TEST_PC_E2E_ANALYZER_VIDEO_VIDEO_QUALITY_METRICS_REPORTER_H_
#include <map>
+#include <optional>
#include <string>
#include "absl/strings/string_view.h"
#include "api/numerics/samples_stats_counter.h"
+#include "api/scoped_refptr.h"
+#include "api/stats/rtc_stats_report.h"
#include "api/test/metrics/metrics_logger.h"
#include "api/test/peerconnection_quality_test_fixture.h"
#include "api/test/track_id_stream_info_map.h"
#include "api/units/data_size.h"
#include "api/units/timestamp.h"
#include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread_annotations.h"
+#include "system_wrappers/include/clock.h"
namespace webrtc {
namespace webrtc_pc_e2e {
@@ -48,6 +53,7 @@
private:
struct StatsSample {
+ std::optional<std::string> scalability_mode;
DataSize bytes_sent = DataSize::Zero();
DataSize header_bytes_sent = DataSize::Zero();
DataSize retransmitted_bytes_sent = DataSize::Zero();