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();