Reland "Fix GetStats bytesSent/Received, wireup headerBytesSent/Received"

This is a reland of fbde32e596f06893d6dda13eb7d29f4c251cf08b

The chromium problem should be fixed with
https://chromium-review.googlesource.com/c/chromium/src/+/1862437

Original change's description:
> Fix GetStats bytesSent/Received, wireup headerBytesSent/Received
>
> Changes the standard GetStats, legacy GetStats unchanged.
>
> Bug: webrtc:10525
> Change-Id: Ie10fe8079f1d8b4cc6bbe513f6a2fc91477b5441
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156084
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Niels Moller <nisse@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#29462}

Tbr: kwiberg@webrtc.org
Bug: webrtc:10525
Change-Id: I3b61f9535aa3f1fca2ed84f068233803d4ec9fe2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/157045
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29485}
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index 14dfd90..517f0de 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -188,7 +188,11 @@
     return stats;
   }
 
-  stats.bytes_rcvd = call_stats.bytesReceived;
+  stats.payload_bytes_rcvd = call_stats.payload_bytes_rcvd;
+  stats.header_and_padding_bytes_rcvd =
+      call_stats.header_and_padding_bytes_rcvd;
+  stats.bytes_rcvd =
+      stats.payload_bytes_rcvd + stats.header_and_padding_bytes_rcvd;
   stats.packets_rcvd = call_stats.packetsReceived;
   stats.packets_lost = call_stats.cumulativeLost;
   stats.capture_start_ntp_time_ms = call_stats.capture_start_ntp_time_ms_;
diff --git a/audio/audio_receive_stream_unittest.cc b/audio/audio_receive_stream_unittest.cc
index a14e8e1..ae6605c 100644
--- a/audio/audio_receive_stream_unittest.cc
+++ b/audio/audio_receive_stream_unittest.cc
@@ -63,7 +63,7 @@
 const double kTotalOutputEnergy = 0.25;
 const double kTotalOutputDuration = 0.5;
 
-const CallReceiveStatistics kCallStats = {678, 234, -12, 567, 890, 123};
+const CallReceiveStatistics kCallStats = {678, 234, -12, 567, 78, 890, 123};
 const std::pair<int, SdpAudioFormat> kReceiveCodec = {
     123,
     {"codec_name_recv", 96000, 0}};
@@ -266,7 +266,9 @@
   helper.SetupMockForGetStats();
   AudioReceiveStream::Stats stats = recv_stream->GetStats();
   EXPECT_EQ(kRemoteSsrc, stats.remote_ssrc);
-  EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesReceived), stats.bytes_rcvd);
+  EXPECT_EQ(kCallStats.payload_bytes_rcvd, stats.payload_bytes_rcvd);
+  EXPECT_EQ(kCallStats.header_and_padding_bytes_rcvd,
+            stats.header_and_padding_bytes_rcvd);
   EXPECT_EQ(static_cast<uint32_t>(kCallStats.packetsReceived),
             stats.packets_rcvd);
   EXPECT_EQ(kCallStats.cumulativeLost, stats.packets_lost);
diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc
index dbca457..e86667d 100644
--- a/audio/audio_send_stream.cc
+++ b/audio/audio_send_stream.cc
@@ -440,7 +440,11 @@
   stats.target_bitrate_bps = channel_send_->GetBitrate();
 
   webrtc::CallSendStatistics call_stats = channel_send_->GetRTCPStatistics();
-  stats.bytes_sent = call_stats.bytesSent;
+  stats.payload_bytes_sent = call_stats.payload_bytes_sent;
+  stats.header_and_padding_bytes_sent =
+      call_stats.header_and_padding_bytes_sent;
+  stats.bytes_sent =
+      stats.payload_bytes_sent + stats.header_and_padding_bytes_sent;
   stats.retransmitted_bytes_sent = call_stats.retransmitted_bytes_sent;
   stats.packets_sent = call_stats.packetsSent;
   stats.retransmitted_packets_sent = call_stats.retransmitted_packets_sent;
diff --git a/audio/audio_send_stream_unittest.cc b/audio/audio_send_stream_unittest.cc
index a49c0ee..ad959f2 100644
--- a/audio/audio_send_stream_unittest.cc
+++ b/audio/audio_send_stream_unittest.cc
@@ -64,7 +64,7 @@
 const double kEchoReturnLossEnhancement = 101;
 const double kResidualEchoLikelihood = -1.0f;
 const double kResidualEchoLikelihoodMax = 23.0f;
-const CallSendStatistics kCallStats = {112, 13456, 17890};
+const CallSendStatistics kCallStats = {112, 12, 13456, 17890};
 const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354};
 const int kTelephoneEventPayloadType = 123;
 const int kTelephoneEventPayloadFrequency = 65432;
@@ -414,7 +414,9 @@
   helper.SetupMockForGetStats();
   AudioSendStream::Stats stats = send_stream->GetStats(true);
   EXPECT_EQ(kSsrc, stats.local_ssrc);
-  EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent);
+  EXPECT_EQ(kCallStats.payload_bytes_sent, stats.payload_bytes_sent);
+  EXPECT_EQ(kCallStats.header_and_padding_bytes_sent,
+            stats.header_and_padding_bytes_sent);
   EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
   EXPECT_EQ(kReportBlock.cumulative_num_packets_lost, stats.packets_lost);
   EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 486dcb1..fa1463a 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -43,7 +43,6 @@
 #include "rtc_base/race_checker.h"
 #include "rtc_base/thread_checker.h"
 #include "rtc_base/time_utils.h"
-#include "system_wrappers/include/field_trial.h"
 #include "system_wrappers/include/metrics.h"
 
 namespace webrtc {
@@ -57,11 +56,6 @@
 constexpr int kVoiceEngineMinMinPlayoutDelayMs = 0;
 constexpr int kVoiceEngineMaxMinPlayoutDelayMs = 10000;
 
-// Field trial which controls whether to report standard-compliant bytes
-// sent/received per stream.  If enabled, padding and headers are not included
-// in bytes sent or received.
-constexpr char kUseStandardBytesStats[] = "WebRTC-UseStandardBytesStats";
-
 RTPHeader CreateRTPHeaderForMediaTransportFrame(
     const MediaTransportEncodedAudioFrame& frame,
     uint64_t channel_id) {
@@ -278,8 +272,6 @@
   // E2EE Audio Frame Decryption
   rtc::scoped_refptr<FrameDecryptorInterface> frame_decryptor_;
   webrtc::CryptoOptions crypto_options_;
-
-  const bool use_standard_bytes_stats_;
 };
 
 void ChannelReceive::OnReceivedPayloadData(
@@ -484,9 +476,7 @@
       associated_send_channel_(nullptr),
       media_transport_config_(media_transport_config),
       frame_decryptor_(frame_decryptor),
-      crypto_options_(crypto_options),
-      use_standard_bytes_stats_(
-          webrtc::field_trial::IsEnabled(kUseStandardBytesStats)) {
+      crypto_options_(crypto_options) {
   // TODO(nisse): Use _moduleProcessThreadPtr instead?
   module_process_thread_checker_.Detach();
 
@@ -734,16 +724,17 @@
 
   // --- Data counters
   if (statistician) {
-    if (use_standard_bytes_stats_) {
-      stats.bytesReceived = rtp_stats.packet_counter.payload_bytes;
-    } else {
-      stats.bytesReceived = rtp_stats.packet_counter.TotalBytes();
-    }
+    stats.payload_bytes_rcvd = rtp_stats.packet_counter.payload_bytes;
+
+    stats.header_and_padding_bytes_rcvd =
+        rtp_stats.packet_counter.header_bytes +
+        rtp_stats.packet_counter.padding_bytes;
     stats.packetsReceived = rtp_stats.packet_counter.packets;
     stats.last_packet_received_timestamp_ms =
         rtp_stats.last_packet_received_timestamp_ms;
   } else {
-    stats.bytesReceived = 0;
+    stats.payload_bytes_rcvd = 0;
+    stats.header_and_padding_bytes_rcvd = 0;
     stats.packetsReceived = 0;
     stats.last_packet_received_timestamp_ms = absl::nullopt;
   }
diff --git a/audio/channel_receive.h b/audio/channel_receive.h
index 7527ef2..5f71ea3 100644
--- a/audio/channel_receive.h
+++ b/audio/channel_receive.h
@@ -54,7 +54,8 @@
   unsigned int cumulativeLost;
   unsigned int jitterSamples;
   int64_t rttMs;
-  size_t bytesReceived;
+  int64_t payload_bytes_rcvd = 0;
+  int64_t header_and_padding_bytes_rcvd = 0;
   int packetsReceived;
   // The capture ntp time (in local timebase) of the first played out audio
   // frame.
diff --git a/audio/channel_send.cc b/audio/channel_send.cc
index 2a969ab..f803bf9 100644
--- a/audio/channel_send.cc
+++ b/audio/channel_send.cc
@@ -52,11 +52,6 @@
 constexpr int64_t kMaxRetransmissionWindowMs = 1000;
 constexpr int64_t kMinRetransmissionWindowMs = 30;
 
-// Field trial which controls whether to report standard-compliant bytes
-// sent/received per stream.  If enabled, padding and headers are not included
-// in bytes sent or received.
-constexpr char kUseStandardBytesStats[] = "WebRTC-UseStandardBytesStats";
-
 MediaTransportEncodedAudioFrame::FrameType
 MediaTransportFrameTypeForWebrtcFrameType(webrtc::AudioFrameType frame_type) {
   switch (frame_type) {
@@ -263,7 +258,6 @@
   rtc::ThreadChecker construction_thread_;
 
   const bool use_twcc_plr_for_ana_;
-  const bool use_standard_bytes_stats_;
 
   bool encoder_queue_is_active_ RTC_GUARDED_BY(encoder_queue_) = false;
 
@@ -609,8 +603,6 @@
           new RateLimiter(clock, kMaxRetransmissionWindowMs)),
       use_twcc_plr_for_ana_(
           webrtc::field_trial::FindFullName("UseTwccPlrForAna") == "Enabled"),
-      use_standard_bytes_stats_(
-          webrtc::field_trial::IsEnabled(kUseStandardBytesStats)),
       media_transport_config_(media_transport_config),
       frame_encryptor_(frame_encryptor),
       crypto_options_(crypto_options),
@@ -1019,17 +1011,12 @@
   StreamDataCounters rtp_stats;
   StreamDataCounters rtx_stats;
   _rtpRtcpModule->GetSendStreamDataCounters(&rtp_stats, &rtx_stats);
-  if (use_standard_bytes_stats_) {
-    stats.bytesSent = rtp_stats.transmitted.payload_bytes +
-                      rtx_stats.transmitted.payload_bytes;
-  } else {
-    stats.bytesSent = rtp_stats.transmitted.payload_bytes +
-                      rtp_stats.transmitted.padding_bytes +
-                      rtp_stats.transmitted.header_bytes +
-                      rtx_stats.transmitted.payload_bytes +
-                      rtx_stats.transmitted.padding_bytes +
-                      rtx_stats.transmitted.header_bytes;
-  }
+  stats.payload_bytes_sent =
+      rtp_stats.transmitted.payload_bytes + rtx_stats.transmitted.payload_bytes;
+  stats.header_and_padding_bytes_sent =
+      rtp_stats.transmitted.padding_bytes + rtp_stats.transmitted.header_bytes +
+      rtx_stats.transmitted.padding_bytes + rtx_stats.transmitted.header_bytes;
+
   // TODO(https://crbug.com/webrtc/10555): RTX retransmissions should show up in
   // separate outbound-rtp stream objects.
   stats.retransmitted_bytes_sent = rtp_stats.retransmitted.payload_bytes;
diff --git a/audio/channel_send.h b/audio/channel_send.h
index 6f94610..11f8332 100644
--- a/audio/channel_send.h
+++ b/audio/channel_send.h
@@ -36,7 +36,8 @@
 
 struct CallSendStatistics {
   int64_t rttMs;
-  size_t bytesSent;
+  int64_t payload_bytes_sent;
+  int64_t header_and_padding_bytes_sent;
   // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-retransmittedbytessent
   uint64_t retransmitted_bytes_sent;
   int packetsSent;
diff --git a/audio/test/audio_stats_test.cc b/audio/test/audio_stats_test.cc
index ec55db3..c91183c 100644
--- a/audio/test/audio_stats_test.cc
+++ b/audio/test/audio_stats_test.cc
@@ -46,7 +46,7 @@
 
   void OnStreamsStopped() override {
     AudioSendStream::Stats send_stats = send_stream()->GetStats();
-    EXPECT_PRED2(IsNear, kBytesSent, send_stats.bytes_sent);
+    EXPECT_PRED2(IsNear, kBytesSent, send_stats.payload_bytes_sent);
     EXPECT_PRED2(IsNear, kPacketsSent, send_stats.packets_sent);
     EXPECT_EQ(0, send_stats.packets_lost);
     EXPECT_EQ(0.0f, send_stats.fraction_lost);
@@ -66,7 +66,7 @@
     EXPECT_EQ(false, send_stats.typing_noise_detected);
 
     AudioReceiveStream::Stats recv_stats = receive_stream()->GetStats();
-    EXPECT_PRED2(IsNear, kBytesSent, recv_stats.bytes_rcvd);
+    EXPECT_PRED2(IsNear, kBytesSent, recv_stats.payload_bytes_rcvd);
     EXPECT_PRED2(IsNear, kPacketsSent, recv_stats.packets_rcvd);
     EXPECT_EQ(0u, recv_stats.packets_lost);
     EXPECT_EQ("opus", send_stats.codec_name);