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