tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 7548061f4841b764b096990b2158e7452a766ed0
parent daa0543385fb69af5c3830b9f2e7414a724ccb82
Author: Dan Baker <dbaker@mozilla.com>
Date:   Thu, 23 Oct 2025 14:30:22 -0600

Bug 1995393 - Vendor libwebrtc from 400bc0e544

Upstream commit: https://webrtc.googlesource.com/src/+/400bc0e544aa7d8b82f907b7e8287b649930ad57
    Rename Call(Send|Receive)Statistics to Channel...Statistics

    Follow-up from
      https://webrtc-review.googlesource.com/c/src/+/403188
    since "Call" is generally thought to refer to the APIs from call/
    nowadays. Also fix variable naming style and partially move from
    integer to TimeDelta.

    Bug: None
    Change-Id: I35e4028173c55e3fc3a81a4066a04eba920bf7f6
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/403481
    Reviewed-by: Harald Alvestrand <hta@webrtc.org>
    Commit-Queue: Philipp Hancke <phancke@meta.com>
    Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45319}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/audio/audio_receive_stream.cc | 44++++++++++++++++++++++++--------------------
Mthird_party/libwebrtc/audio/audio_receive_stream_unittest.cc | 18++++++++++--------
Mthird_party/libwebrtc/audio/audio_send_stream.cc | 27++++++++++++++-------------
Mthird_party/libwebrtc/audio/audio_send_stream_unittest.cc | 13+++++++------
Mthird_party/libwebrtc/audio/channel_receive.cc | 6+++---
Mthird_party/libwebrtc/audio/channel_receive.h | 4++--
Mthird_party/libwebrtc/audio/channel_receive_unittest.cc | 2+-
Mthird_party/libwebrtc/audio/channel_send.cc | 13+++++++------
Mthird_party/libwebrtc/audio/channel_send.h | 8++++----
Mthird_party/libwebrtc/audio/mock_voe_channel_proxy.h | 7+++++--
Mthird_party/libwebrtc/moz-patch-stack/s0029.patch | 41+++++++++++++++++++++--------------------
Mthird_party/libwebrtc/moz-patch-stack/s0035.patch | 6+++---
Mthird_party/libwebrtc/moz-patch-stack/s0039.patch | 4++--
Mthird_party/libwebrtc/moz-patch-stack/s0070.patch | 4++--
15 files changed, 107 insertions(+), 94 deletions(-)

diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor @@ -1,4 +1,4 @@ # ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-22T21:51:10.236824+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-23T20:30:04.691596+00:00. # base of lastest vendoring -f6aade0ada +400bc0e544 diff --git a/third_party/libwebrtc/audio/audio_receive_stream.cc b/third_party/libwebrtc/audio/audio_receive_stream.cc @@ -280,29 +280,33 @@ AudioReceiveStreamInterface::Stats AudioReceiveStreamImpl::GetStats( stats.codec_payload_type = receive_codec->first; } - CallReceiveStatistics call_stats = channel_receive_->GetRTCPStatistics(); - stats.payload_bytes_received = call_stats.payload_bytes_received; + ChannelReceiveStatistics channel_stats = + channel_receive_->GetRTCPStatistics(); + stats.payload_bytes_received = channel_stats.payload_bytes_received; stats.header_and_padding_bytes_received = - call_stats.header_and_padding_bytes_received; - stats.packets_received = call_stats.packets_received; - stats.packets_received_with_ect1 = call_stats.packets_received_with_ect1; - stats.packets_received_with_ce = call_stats.packets_received_with_ce; - stats.packets_lost = call_stats.packets_lost; - stats.jitter_ms = call_stats.jitter_ms; - stats.nacks_sent = call_stats.nacks_sent; - stats.capture_start_ntp_time_ms = call_stats.capture_start_ntp_time_ms; - stats.last_packet_received = call_stats.last_packet_received; - stats.last_sender_report_timestamp = call_stats.last_sender_report_timestamp; + channel_stats.header_and_padding_bytes_received; + stats.packets_received = channel_stats.packets_received; + stats.packets_received_with_ect1 = channel_stats.packets_received_with_ect1; + stats.packets_received_with_ce = channel_stats.packets_received_with_ce; + stats.packets_lost = channel_stats.packets_lost; + stats.jitter_ms = channel_stats.jitter_ms; + stats.nacks_sent = channel_stats.nacks_sent; + stats.capture_start_ntp_time_ms = channel_stats.capture_start_ntp_time_ms; + stats.last_packet_received = channel_stats.last_packet_received; + stats.last_sender_report_timestamp = + channel_stats.last_sender_report_timestamp; stats.last_sender_report_utc_timestamp = - call_stats.last_sender_report_utc_timestamp; + channel_stats.last_sender_report_utc_timestamp; stats.last_sender_report_remote_utc_timestamp = - call_stats.last_sender_report_remote_utc_timestamp; - stats.sender_reports_packets_sent = call_stats.sender_reports_packets_sent; - stats.sender_reports_bytes_sent = call_stats.sender_reports_bytes_sent; - stats.sender_reports_reports_count = call_stats.sender_reports_reports_count; - stats.round_trip_time = call_stats.round_trip_time; - stats.round_trip_time_measurements = call_stats.round_trip_time_measurements; - stats.total_round_trip_time = call_stats.total_round_trip_time; + channel_stats.last_sender_report_remote_utc_timestamp; + stats.sender_reports_packets_sent = channel_stats.sender_reports_packets_sent; + stats.sender_reports_bytes_sent = channel_stats.sender_reports_bytes_sent; + stats.sender_reports_reports_count = + channel_stats.sender_reports_reports_count; + stats.round_trip_time = channel_stats.round_trip_time; + stats.round_trip_time_measurements = + channel_stats.round_trip_time_measurements; + stats.total_round_trip_time = channel_stats.total_round_trip_time; stats.delay_estimate_ms = channel_receive_->GetDelayEstimate(); stats.audio_level = channel_receive_->GetSpeechOutputLevelFullRange(); diff --git a/third_party/libwebrtc/audio/audio_receive_stream_unittest.cc b/third_party/libwebrtc/audio/audio_receive_stream_unittest.cc @@ -74,7 +74,8 @@ constexpr double kTotalOutputEnergy = 0.25; constexpr double kTotalOutputDuration = 0.5; constexpr int64_t kPlayoutNtpTimestampMs = 5678; -const CallReceiveStatistics kCallStats = {678, 234, -12, 567, 78, 890, 123}; +const ChannelReceiveStatistics kChannelStats = {678, 234, -12, 567, + 78, 890, 123}; const std::pair<int, SdpAudioFormat> kReceiveCodec = { 123, {"codec_name_recv", 96000, 0}}; @@ -170,7 +171,7 @@ struct ConfigHelper { ASSERT_TRUE(channel_receive_); EXPECT_CALL(*channel_receive_, GetRTCPStatistics()) - .WillOnce(Return(kCallStats)); + .WillOnce(Return(kChannelStats)); EXPECT_CALL(*channel_receive_, GetDelayEstimate()) .WillOnce(Return(kJitterBufferDelay + kPlayoutBufferDelay)); EXPECT_CALL(*channel_receive_, GetSpeechOutputLevelFullRange()) @@ -256,14 +257,15 @@ TEST(AudioReceiveStreamTest, GetStats) { AudioReceiveStreamInterface::Stats stats = recv_stream->GetStats(/*get_and_clear_legacy_stats=*/true); EXPECT_EQ(kRemoteSsrc, stats.remote_ssrc); - EXPECT_EQ(kCallStats.payload_bytes_received, stats.payload_bytes_received); - EXPECT_EQ(kCallStats.header_and_padding_bytes_received, + EXPECT_EQ(kChannelStats.payload_bytes_received, + stats.payload_bytes_received); + EXPECT_EQ(kChannelStats.header_and_padding_bytes_received, stats.header_and_padding_bytes_received); - EXPECT_EQ(static_cast<uint32_t>(kCallStats.packets_received), + EXPECT_EQ(static_cast<uint32_t>(kChannelStats.packets_received), stats.packets_received); - EXPECT_EQ(kCallStats.packets_lost, stats.packets_lost); + EXPECT_EQ(kChannelStats.packets_lost, stats.packets_lost); EXPECT_EQ(kReceiveCodec.second.name, stats.codec_name); - EXPECT_EQ(kCallStats.jitter_ms, stats.jitter_ms); + EXPECT_EQ(kChannelStats.jitter_ms, stats.jitter_ms); EXPECT_EQ(kNetworkStats.currentBufferSize, stats.jitter_buffer_ms); EXPECT_EQ(kNetworkStats.preferredBufferSize, stats.jitter_buffer_preferred_ms); @@ -327,7 +329,7 @@ TEST(AudioReceiveStreamTest, GetStats) { EXPECT_EQ(kAudioDecodeStats.decoded_plc_cng, stats.decoding_plc_cng); EXPECT_EQ(kAudioDecodeStats.decoded_muted_output, stats.decoding_muted_output); - EXPECT_EQ(kCallStats.capture_start_ntp_time_ms, + EXPECT_EQ(kChannelStats.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); EXPECT_EQ(kPlayoutNtpTimestampMs, stats.estimated_playout_ntp_timestamp_ms); recv_stream->UnregisterFromTransport(); diff --git a/third_party/libwebrtc/audio/audio_send_stream.cc b/third_party/libwebrtc/audio/audio_send_stream.cc @@ -434,20 +434,21 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats( stats.local_ssrc = config_.rtp.ssrc; stats.target_bitrate_bps = channel_send_->GetTargetBitrate(); - webrtc::CallSendStatistics call_stats = channel_send_->GetRTCPStatistics(); - stats.rtcp_packet_type_counts = call_stats.rtcp_packet_type_counts; - stats.payload_bytes_sent = call_stats.payload_bytes_sent; + webrtc::ChannelSendStatistics channel_stats = + channel_send_->GetRTCPStatistics(); + stats.rtcp_packet_type_counts = channel_stats.rtcp_packet_type_counts; + stats.payload_bytes_sent = channel_stats.payload_bytes_sent; stats.header_and_padding_bytes_sent = - call_stats.header_and_padding_bytes_sent; - stats.retransmitted_bytes_sent = call_stats.retransmitted_bytes_sent; - stats.packets_sent = call_stats.packetsSent; - stats.packets_sent_with_ect1 = call_stats.packets_sent_with_ect1; - stats.total_packet_send_delay = call_stats.total_packet_send_delay; - stats.retransmitted_packets_sent = call_stats.retransmitted_packets_sent; + channel_stats.header_and_padding_bytes_sent; + stats.retransmitted_bytes_sent = channel_stats.retransmitted_bytes_sent; + stats.packets_sent = channel_stats.packets_sent; + stats.packets_sent_with_ect1 = channel_stats.packets_sent_with_ect1; + stats.total_packet_send_delay = channel_stats.total_packet_send_delay; + stats.retransmitted_packets_sent = channel_stats.retransmitted_packets_sent; // RTT isn't known until a RTCP report is received. Until then, VoiceEngine // returns 0 to indicate an error value. - if (call_stats.rttMs > 0) { - stats.rtt_ms = call_stats.rttMs; + if (channel_stats.round_trip_time.ms() > 0) { + stats.rtt_ms = channel_stats.round_trip_time.ms(); } if (config_.send_codec_spec) { const auto& spec = *config_.send_codec_spec; @@ -483,9 +484,9 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats( stats.apm_statistics = ap->GetStatistics(has_remote_tracks); } - stats.report_block_datas = std::move(call_stats.report_block_datas); + stats.report_block_datas = std::move(channel_stats.report_block_datas); - stats.nacks_received = call_stats.nacks_received; + stats.nacks_received = channel_stats.nacks_received; return stats; } diff --git a/third_party/libwebrtc/audio/audio_send_stream_unittest.cc b/third_party/libwebrtc/audio/audio_send_stream_unittest.cc @@ -90,7 +90,8 @@ constexpr double kEchoReturnLoss = -65; constexpr double kEchoReturnLossEnhancement = 101; constexpr double kResidualEchoLikelihood = -1.0f; constexpr double kResidualEchoLikelihoodMax = 23.0f; -constexpr CallSendStatistics kCallStats = {112, 12, 13456, 17890}; +constexpr ChannelSendStatistics kChannelStats = {TimeDelta::Millis(112), 12, + 13456, 17890}; constexpr int kFractionLost = 123; constexpr int kCumulativeLost = 567; constexpr uint32_t kInterarrivalJitter = 132; @@ -308,7 +309,7 @@ class ConfigHelper { EXPECT_TRUE(channel_send_); EXPECT_CALL(*channel_send_, GetRTCPStatistics()) - .WillRepeatedly(Return(kCallStats)); + .WillRepeatedly(Return(kChannelStats)); EXPECT_CALL(*channel_send_, GetRemoteRTCPReportBlocks()) .WillRepeatedly(Return(report_blocks)); EXPECT_CALL(*channel_send_, GetANAStatistics()) @@ -463,17 +464,17 @@ TEST(AudioSendStreamTest, GetStats) { helper.SetupMockForGetStats(use_null_audio_processing); AudioSendStream::Stats stats = send_stream->GetStats(true); EXPECT_EQ(kSsrc, stats.local_ssrc); - EXPECT_EQ(kCallStats.payload_bytes_sent, stats.payload_bytes_sent); - EXPECT_EQ(kCallStats.header_and_padding_bytes_sent, + EXPECT_EQ(kChannelStats.payload_bytes_sent, stats.payload_bytes_sent); + EXPECT_EQ(kChannelStats.header_and_padding_bytes_sent, stats.header_and_padding_bytes_sent); - EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); + EXPECT_EQ(kChannelStats.packets_sent, stats.packets_sent); EXPECT_EQ(stats.packets_lost, kCumulativeLost); EXPECT_FLOAT_EQ(stats.fraction_lost, Q8ToFloat(kFractionLost)); EXPECT_EQ(kIsacFormat.name, stats.codec_name); EXPECT_EQ(stats.jitter_ms, static_cast<int32_t>(kInterarrivalJitter / (kIsacFormat.clockrate_hz / 1000))); - EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); + EXPECT_EQ(kChannelStats.round_trip_time.ms(), stats.rtt_ms); EXPECT_EQ(0, stats.audio_level); EXPECT_EQ(0, stats.total_input_energy); EXPECT_EQ(0, stats.total_input_duration); diff --git a/third_party/libwebrtc/audio/channel_receive.cc b/third_party/libwebrtc/audio/channel_receive.cc @@ -187,7 +187,7 @@ class ChannelReceive : public ChannelReceiveInterface, PacketRouter* packet_router) override; void ResetReceiverCongestionControlObjects() override; - CallReceiveStatistics GetRTCPStatistics() const override; + ChannelReceiveStatistics GetRTCPStatistics() const override; void SetNACKStatus(bool enable, int max_packets) override; void SetRtcpMode(RtcpMode mode) override; void SetNonSenderRttMeasurement(bool enabled) override; @@ -827,9 +827,9 @@ void ChannelReceive::ResetReceiverCongestionControlObjects() { packet_router_ = nullptr; } -CallReceiveStatistics ChannelReceive::GetRTCPStatistics() const { +ChannelReceiveStatistics ChannelReceive::GetRTCPStatistics() const { RTC_DCHECK_RUN_ON(&worker_thread_checker_); - CallReceiveStatistics stats; + ChannelReceiveStatistics stats; // The jitter statistics is updated for each received RTP packet and is based // on received packets. diff --git a/third_party/libwebrtc/audio/channel_receive.h b/third_party/libwebrtc/audio/channel_receive.h @@ -51,7 +51,7 @@ class ReceiveStatistics; class RtpPacketReceived; class RtpRtcp; -struct CallReceiveStatistics { +struct ChannelReceiveStatistics { int packets_lost = 0; uint32_t jitter_ms = 0; int64_t payload_bytes_received = 0; @@ -146,7 +146,7 @@ class ChannelReceiveInterface : public RtpPacketSinkInterface { PacketRouter* packet_router) = 0; virtual void ResetReceiverCongestionControlObjects() = 0; - virtual CallReceiveStatistics GetRTCPStatistics() const = 0; + virtual ChannelReceiveStatistics GetRTCPStatistics() const = 0; virtual void SetNACKStatus(bool enable, int max_packets) = 0; virtual void SetRtcpMode(webrtc::RtcpMode mode) = 0; virtual void SetNonSenderRttMeasurement(bool enabled) = 0; diff --git a/third_party/libwebrtc/audio/channel_receive_unittest.cc b/third_party/libwebrtc/audio/channel_receive_unittest.cc @@ -163,7 +163,7 @@ class ChannelReceiveTest : public Test { AudioFrame audio_frame; channel.OnRtpPacket(CreateRtpPacket()); channel.GetAudioFrameWithInfo(kSampleRateHz, &audio_frame); - CallReceiveStatistics stats = channel.GetRTCPStatistics(); + ChannelReceiveStatistics stats = channel.GetRTCPStatistics(); return stats.capture_start_ntp_time_ms; } diff --git a/third_party/libwebrtc/audio/channel_send.cc b/third_party/libwebrtc/audio/channel_send.cc @@ -86,7 +86,8 @@ class RtcpCounterObserver : public RtcpPacketTypeCounterObserver { explicit RtcpCounterObserver(uint32_t ssrc) : ssrc_(ssrc) {} void RtcpPacketTypesCounterUpdated( - uint32_t ssrc, const RtcpPacketTypeCounter& packet_counter) override { + uint32_t ssrc, + const RtcpPacketTypeCounter& packet_counter) override { if (ssrc_ != ssrc) { return; } @@ -212,7 +213,7 @@ class ChannelSend : public ChannelSendInterface, void ResetSenderCongestionControlObjects() override; void SetRTCP_CNAME(absl::string_view c_name) override; std::vector<ReportBlockData> GetRemoteRTCPReportBlocks() const override; - CallSendStatistics GetRTCPStatistics() const override; + ChannelSendStatistics GetRTCPStatistics() const override; // ProcessAndEncodeAudio() posts a task on the shared encoder task queue, // which in turn calls (on the queue) ProcessAndEncodeAudioOnTaskQueue() where @@ -819,10 +820,10 @@ std::vector<ReportBlockData> ChannelSend::GetRemoteRTCPReportBlocks() const { return rtp_rtcp_->GetLatestReportBlockData(); } -CallSendStatistics ChannelSend::GetRTCPStatistics() const { +ChannelSendStatistics ChannelSend::GetRTCPStatistics() const { RTC_DCHECK_RUN_ON(&worker_thread_checker_); - CallSendStatistics stats = {0}; - stats.rttMs = rtp_rtcp_->LastRtt().value_or(TimeDelta::Zero()).ms(); + ChannelSendStatistics stats = { + .round_trip_time = rtp_rtcp_->LastRtt().value_or(TimeDelta::Zero())}; stats.rtcp_packet_type_counts = rtcp_counter_observer_->GetCounts(); StreamDataCounters rtp_stats; @@ -837,7 +838,7 @@ CallSendStatistics ChannelSend::GetRTCPStatistics() const { // 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; - stats.packetsSent = + stats.packets_sent = rtp_stats.transmitted.packets + rtx_stats.transmitted.packets; stats.packets_sent_with_ect1 = rtp_stats.transmitted.packets_with_ect1 + rtx_stats.transmitted.packets_with_ect1; diff --git a/third_party/libwebrtc/audio/channel_send.h b/third_party/libwebrtc/audio/channel_send.h @@ -39,13 +39,13 @@ namespace webrtc { class FrameEncryptorInterface; class RtpTransportControllerSendInterface; -struct CallSendStatistics { - int64_t rttMs; +struct ChannelSendStatistics { + TimeDelta round_trip_time; 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; + int packets_sent; // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-packetssentwithect1 int packets_sent_with_ect1; // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-totalpacketsenddelay @@ -69,7 +69,7 @@ class ChannelSendInterface { virtual void ReceivedRTCPPacket(const uint8_t* packet, size_t length) = 0; - virtual CallSendStatistics GetRTCPStatistics() const = 0; + virtual ChannelSendStatistics GetRTCPStatistics() const = 0; virtual void SetEncoder(int payload_type, const SdpAudioFormat& encoder_format, diff --git a/third_party/libwebrtc/audio/mock_voe_channel_proxy.h b/third_party/libwebrtc/audio/mock_voe_channel_proxy.h @@ -60,7 +60,10 @@ class MockChannelReceive : public voe::ChannelReceiveInterface { (PacketRouter*), (override)); MOCK_METHOD(void, ResetReceiverCongestionControlObjects, (), (override)); - MOCK_METHOD(CallReceiveStatistics, GetRTCPStatistics, (), (const, override)); + MOCK_METHOD(ChannelReceiveStatistics, + GetRTCPStatistics, + (), + (const, override)); MOCK_METHOD(NetworkStatistics, GetNetworkStatistics, (bool), @@ -155,7 +158,7 @@ class MockChannelSend : public voe::ChannelSendInterface { (RtpTransportControllerSendInterface*), (override)); MOCK_METHOD(void, ResetSenderCongestionControlObjects, (), (override)); - MOCK_METHOD(CallSendStatistics, GetRTCPStatistics, (), (const, override)); + MOCK_METHOD(ChannelSendStatistics, GetRTCPStatistics, (), (const, override)); MOCK_METHOD(std::vector<ReportBlockData>, GetRemoteRTCPReportBlocks, (), diff --git a/third_party/libwebrtc/moz-patch-stack/s0029.patch b/third_party/libwebrtc/moz-patch-stack/s0029.patch @@ -9,28 +9,28 @@ Differential Revision: https://phabricator.services.mozilla.com/D102273 Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/d380a43d59f4f7cbc001f4eab9b63ee993b32cd8 --- audio/audio_send_stream.cc | 1 + - audio/channel_send.cc | 31 +++++++++++++++++++++++++++++++ + audio/channel_send.cc | 32 ++++++++++++++++++++++++++++++++ audio/channel_send.h | 1 + call/audio_send_stream.h | 2 ++ - 4 files changed, 35 insertions(+) + 4 files changed, 36 insertions(+) diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc -index ac91dd55f7..9e638eba2c 100644 +index 024d6171cc..8100775eb7 100644 --- a/audio/audio_send_stream.cc +++ b/audio/audio_send_stream.cc -@@ -435,6 +435,7 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats( - stats.target_bitrate_bps = channel_send_->GetTargetBitrate(); +@@ -436,6 +436,7 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats( - webrtc::CallSendStatistics call_stats = channel_send_->GetRTCPStatistics(); -+ stats.rtcp_packet_type_counts = call_stats.rtcp_packet_type_counts; - stats.payload_bytes_sent = call_stats.payload_bytes_sent; + webrtc::ChannelSendStatistics channel_stats = + channel_send_->GetRTCPStatistics(); ++ stats.rtcp_packet_type_counts = channel_stats.rtcp_packet_type_counts; + stats.payload_bytes_sent = channel_stats.payload_bytes_sent; stats.header_and_padding_bytes_sent = - call_stats.header_and_padding_bytes_sent; + channel_stats.header_and_padding_bytes_sent; diff --git a/audio/channel_send.cc b/audio/channel_send.cc -index b0759406c8..7a262bcea3 100644 +index 791c597d19..1105ab5ca4 100644 --- a/audio/channel_send.cc +++ b/audio/channel_send.cc -@@ -81,6 +81,31 @@ constexpr TimeDelta kMinRetransmissionWindow = TimeDelta::Millis(30); +@@ -81,6 +81,32 @@ constexpr TimeDelta kMinRetransmissionWindow = TimeDelta::Millis(30); class RtpPacketSenderProxy; class TransportSequenceNumberProxy; @@ -39,7 +39,8 @@ index b0759406c8..7a262bcea3 100644 + explicit RtcpCounterObserver(uint32_t ssrc) : ssrc_(ssrc) {} + + void RtcpPacketTypesCounterUpdated( -+ uint32_t ssrc, const RtcpPacketTypeCounter& packet_counter) override { ++ uint32_t ssrc, ++ const RtcpPacketTypeCounter& packet_counter) override { + if (ssrc_ != ssrc) { + return; + } @@ -62,7 +63,7 @@ index b0759406c8..7a262bcea3 100644 class AudioBitrateAccountant { public: void RegisterPacketOverhead(int packet_byte_overhead) { -@@ -288,6 +313,8 @@ class ChannelSend : public ChannelSendInterface, +@@ -288,6 +314,8 @@ class ChannelSend : public ChannelSendInterface, bool input_mute_ RTC_GUARDED_BY(volume_settings_mutex_) = false; bool previous_frame_muted_ RTC_GUARDED_BY(encoder_queue_checker_) = false; @@ -71,7 +72,7 @@ index b0759406c8..7a262bcea3 100644 PacketRouter* packet_router_ RTC_GUARDED_BY(&worker_thread_checker_) = nullptr; const std::unique_ptr<RtpPacketSenderProxy> rtp_packet_pacer_proxy_; -@@ -500,6 +527,7 @@ ChannelSend::ChannelSend( +@@ -500,6 +528,7 @@ ChannelSend::ChannelSend( RtpTransportControllerSendInterface* transport_controller) : env_(env), ssrc_(ssrc), @@ -79,7 +80,7 @@ index b0759406c8..7a262bcea3 100644 rtp_packet_pacer_proxy_(new RtpPacketSenderProxy()), retransmission_rate_limiter_( new RateLimiter(&env_.clock(), kMaxRetransmissionWindow.ms())), -@@ -521,6 +549,8 @@ ChannelSend::ChannelSend( +@@ -521,6 +550,8 @@ ChannelSend::ChannelSend( configuration.paced_sender = rtp_packet_pacer_proxy_.get(); configuration.rtt_stats = rtcp_rtt_stats; @@ -88,19 +89,19 @@ index b0759406c8..7a262bcea3 100644 if (env_.field_trials().IsDisabled("WebRTC-DisableRtxRateLimiter")) { configuration.retransmission_rate_limiter = retransmission_rate_limiter_.get(); -@@ -795,6 +825,7 @@ CallSendStatistics ChannelSend::GetRTCPStatistics() const { +@@ -795,6 +826,7 @@ ChannelSendStatistics ChannelSend::GetRTCPStatistics() const { RTC_DCHECK_RUN_ON(&worker_thread_checker_); - CallSendStatistics stats = {0}; - stats.rttMs = rtp_rtcp_->LastRtt().value_or(TimeDelta::Zero()).ms(); + ChannelSendStatistics stats = { + .round_trip_time = rtp_rtcp_->LastRtt().value_or(TimeDelta::Zero())}; + stats.rtcp_packet_type_counts = rtcp_counter_observer_->GetCounts(); StreamDataCounters rtp_stats; StreamDataCounters rtx_stats; diff --git a/audio/channel_send.h b/audio/channel_send.h -index 1706406e4f..232748f33c 100644 +index 185f3e9975..5a2c547673 100644 --- a/audio/channel_send.h +++ b/audio/channel_send.h -@@ -52,6 +52,7 @@ struct CallSendStatistics { +@@ -52,6 +52,7 @@ struct ChannelSendStatistics { TimeDelta total_packet_send_delay = TimeDelta::Zero(); // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-retransmittedpacketssent uint64_t retransmitted_packets_sent; diff --git a/third_party/libwebrtc/moz-patch-stack/s0035.patch b/third_party/libwebrtc/moz-patch-stack/s0035.patch @@ -20,7 +20,7 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/d0b311007c033e838 11 files changed, 55 insertions(+), 10 deletions(-) diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc -index 0496aa8126..fad0e247a1 100644 +index 3a4ae1702a..84ea0c996b 100644 --- a/audio/audio_receive_stream.cc +++ b/audio/audio_receive_stream.cc @@ -61,6 +61,8 @@ std::string AudioReceiveStreamInterface::Config::Rtp::ToString() const { @@ -42,7 +42,7 @@ index 0496aa8126..fad0e247a1 100644 } // namespace diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc -index b98ac8efc8..149d4a287d 100644 +index 3e119fc562..21b1db50ca 100644 --- a/audio/channel_receive.cc +++ b/audio/channel_receive.cc @@ -132,7 +132,8 @@ class ChannelReceive : public ChannelReceiveInterface, @@ -91,7 +91,7 @@ index b98ac8efc8..149d4a287d 100644 } // namespace voe diff --git a/audio/channel_receive.h b/audio/channel_receive.h -index 7eb8639dd7..27ae061fd5 100644 +index da8129aa81..0bde07a6f9 100644 --- a/audio/channel_receive.h +++ b/audio/channel_receive.h @@ -39,6 +39,7 @@ diff --git a/third_party/libwebrtc/moz-patch-stack/s0039.patch b/third_party/libwebrtc/moz-patch-stack/s0039.patch @@ -16,10 +16,10 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/c186df8a088e46285 1 file changed, 1 deletion(-) diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc -index fad0e247a1..a276df5b24 100644 +index 84ea0c996b..e3601315cb 100644 --- a/audio/audio_receive_stream.cc +++ b/audio/audio_receive_stream.cc -@@ -385,7 +385,6 @@ int AudioReceiveStreamImpl::GetBaseMinimumPlayoutDelayMs() const { +@@ -389,7 +389,6 @@ int AudioReceiveStreamImpl::GetBaseMinimumPlayoutDelayMs() const { } std::vector<RtpSource> AudioReceiveStreamImpl::GetSources() const { diff --git a/third_party/libwebrtc/moz-patch-stack/s0070.patch b/third_party/libwebrtc/moz-patch-stack/s0070.patch @@ -12,10 +12,10 @@ Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/6ac6592a04a839a61 1 file changed, 2 deletions(-) diff --git a/audio/channel_send.cc b/audio/channel_send.cc -index 7a262bcea3..f275cc60d8 100644 +index 1105ab5ca4..43c31b5d15 100644 --- a/audio/channel_send.cc +++ b/audio/channel_send.cc -@@ -571,8 +571,6 @@ ChannelSend::ChannelSend( +@@ -572,8 +572,6 @@ ChannelSend::ChannelSend( int error = audio_coding_->RegisterTransportCallback(this); RTC_DCHECK_EQ(0, error);