From: Andreas Pehrson Date: Mon, 18 Jan 2021 11:04:00 +0100 Subject: Bug 1654112 - Include RtcpPacketTypeCounter in audio send stats, to not regress nackCount. r=ng This is similar to how it's already included for video send. 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.h | 1 + call/audio_send_stream.h | 2 ++ 4 files changed, 35 insertions(+) diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc index 7d6ec794d4..20af3f7722 100644 --- a/audio/audio_send_stream.cc +++ b/audio/audio_send_stream.cc @@ -442,6 +442,7 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats( 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; stats.header_and_padding_bytes_sent = call_stats.header_and_padding_bytes_sent; diff --git a/audio/channel_send.cc b/audio/channel_send.cc index 0bca328846..c84a91770e 100644 --- a/audio/channel_send.cc +++ b/audio/channel_send.cc @@ -56,6 +56,31 @@ class RtpPacketSenderProxy; class TransportSequenceNumberProxy; class VoERtcpObserver; +class RtcpCounterObserver : public RtcpPacketTypeCounterObserver { + public: + explicit RtcpCounterObserver(uint32_t ssrc) : ssrc_(ssrc) {} + + void RtcpPacketTypesCounterUpdated( + uint32_t ssrc, const RtcpPacketTypeCounter& packet_counter) override { + if (ssrc_ != ssrc) { + return; + } + + MutexLock lock(&mutex_); + packet_counter_ = packet_counter; + } + + RtcpPacketTypeCounter GetCounts() { + MutexLock lock(&mutex_); + return packet_counter_; + } + + private: + Mutex mutex_; + const uint32_t ssrc_; + RtcpPacketTypeCounter packet_counter_; +}; + class ChannelSend : public ChannelSendInterface, public AudioPacketizationCallback, // receive encoded // packets from the ACM @@ -208,6 +233,8 @@ class ChannelSend : public ChannelSendInterface, // RtcpBandwidthObserver const std::unique_ptr rtcp_observer_; + const std::unique_ptr rtcp_counter_observer_; + PacketRouter* packet_router_ RTC_GUARDED_BY(&worker_thread_checker_) = nullptr; TransportFeedbackObserver* const feedback_observer_; @@ -460,6 +487,7 @@ ChannelSend::ChannelSend( : ssrc_(ssrc), event_log_(rtc_event_log), rtcp_observer_(new VoERtcpObserver(this)), + rtcp_counter_observer_(new RtcpCounterObserver(ssrc)), feedback_observer_(feedback_observer), rtp_packet_pacer_proxy_(new RtpPacketSenderProxy()), retransmission_rate_limiter_( @@ -482,6 +510,8 @@ ChannelSend::ChannelSend( configuration.event_log = event_log_; configuration.rtt_stats = rtcp_rtt_stats; + configuration.rtcp_packet_type_counter_observer = + rtcp_counter_observer_.get(); configuration.retransmission_rate_limiter = retransmission_rate_limiter_.get(); configuration.extmap_allow_mixed = extmap_allow_mixed; @@ -759,6 +789,7 @@ CallSendStatistics ChannelSend::GetRTCPStatistics() const { RTC_DCHECK_RUN_ON(&worker_thread_checker_); CallSendStatistics stats = {0}; stats.rttMs = GetRTT(); + 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 cf9a273f70..9b3969161c 100644 --- a/audio/channel_send.h +++ b/audio/channel_send.h @@ -43,6 +43,7 @@ struct CallSendStatistics { TimeDelta total_packet_send_delay = TimeDelta::Zero(); // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-retransmittedpacketssent uint64_t retransmitted_packets_sent; + RtcpPacketTypeCounter rtcp_packet_type_counts; // A snapshot of Report Blocks with additional data of interest to statistics. // Within this list, the sender-source SSRC pair is unique and per-pair the // ReportBlockData represents the latest Report Block that was received for diff --git a/call/audio_send_stream.h b/call/audio_send_stream.h index 0f42d0fb82..bafa22d312 100644 --- a/call/audio_send_stream.h +++ b/call/audio_send_stream.h @@ -31,6 +31,7 @@ #include "call/rtp_config.h" #include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" +#include "modules/rtp_rtcp/include/rtcp_statistics.h" namespace webrtc { @@ -65,6 +66,7 @@ class AudioSendStream : public AudioSender { ANAStats ana_statistics; AudioProcessingStats apm_statistics; + RtcpPacketTypeCounter rtcp_packet_type_counts; int64_t target_bitrate_bps = 0; // A snapshot of Report Blocks with additional data of interest to -- 2.34.1