From 59b8654045d47e86274c3298ccb25ba0abf5e56a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Sun, 23 Jun 2019 18:24:46 +0200 Subject: [PATCH] Switch from RtpPacketSender to RtpPacketPacer interface usage. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RtpPacketSender interface will be removed when downstream projects have been updated. Bug: webrtc:10633 Change-Id: Ie127b9814f39bd213d00ded0f7b98380f2f01084 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/143175 Commit-Queue: Erik Språng Reviewed-by: Sebastian Jansson Reviewed-by: Danil Chapovalov Reviewed-by: Oskar Sundbom Cr-Commit-Position: refs/heads/master@{#28350} --- audio/channel_send.cc | 35 +++++++++++-------- call/rtp_transport_controller_send.cc | 2 +- call/rtp_transport_controller_send.h | 2 +- .../rtp_transport_controller_send_interface.h | 3 +- .../test/mock_rtp_transport_controller_send.h | 2 +- modules/rtp_rtcp/include/rtp_rtcp.h | 3 +- modules/rtp_rtcp/source/rtp_sender.cc | 2 +- modules/rtp_rtcp/source/rtp_sender.h | 5 +-- .../rtp_rtcp/source/rtp_sender_unittest.cc | 11 +++--- 9 files changed, 38 insertions(+), 27 deletions(-) diff --git a/audio/channel_send.cc b/audio/channel_send.cc index 040464049a..f8b94ca274 100644 --- a/audio/channel_send.cc +++ b/audio/channel_send.cc @@ -259,7 +259,7 @@ class ChannelSend : public ChannelSendInterface, nullptr; const std::unique_ptr feedback_observer_proxy_; const std::unique_ptr seq_num_allocator_proxy_; - const std::unique_ptr rtp_packet_sender_proxy_; + const std::unique_ptr rtp_packet_pacer_proxy_; const std::unique_ptr retransmission_rate_limiter_; rtc::ThreadChecker construction_thread_; @@ -364,14 +364,19 @@ class TransportSequenceNumberProxy : public TransportSequenceNumberAllocator { TransportSequenceNumberAllocator* seq_num_allocator_ RTC_GUARDED_BY(&crit_); }; -class RtpPacketSenderProxy : public RtpPacketSender { +class RtpPacketSenderProxy : public RtpPacketPacer { public: - RtpPacketSenderProxy() : rtp_packet_sender_(nullptr) {} + RtpPacketSenderProxy() : rtp_packet_pacer_(nullptr) {} - void SetPacketSender(RtpPacketSender* rtp_packet_sender) { + void SetPacketPacer(RtpPacketPacer* rtp_packet_pacer) { RTC_DCHECK(thread_checker_.IsCurrent()); rtc::CritScope lock(&crit_); - rtp_packet_sender_ = rtp_packet_sender; + rtp_packet_pacer_ = rtp_packet_pacer; + } + + void EnqueuePacket(std::unique_ptr packet) override { + rtc::CritScope lock(&crit_); + rtp_packet_pacer_->EnqueuePacket(std::move(packet)); } // Implements RtpPacketSender. @@ -382,9 +387,9 @@ class RtpPacketSenderProxy : public RtpPacketSender { size_t bytes, bool retransmission) override { rtc::CritScope lock(&crit_); - if (rtp_packet_sender_) { - rtp_packet_sender_->InsertPacket(priority, ssrc, sequence_number, - capture_time_ms, bytes, retransmission); + if (rtp_packet_pacer_) { + rtp_packet_pacer_->InsertPacket(priority, ssrc, sequence_number, + capture_time_ms, bytes, retransmission); } } @@ -395,7 +400,7 @@ class RtpPacketSenderProxy : public RtpPacketSender { private: rtc::ThreadChecker thread_checker_; rtc::CriticalSection crit_; - RtpPacketSender* rtp_packet_sender_ RTC_GUARDED_BY(&crit_); + RtpPacketPacer* rtp_packet_pacer_ RTC_GUARDED_BY(&crit_); }; class VoERtcpObserver : public RtcpBandwidthObserver { @@ -643,7 +648,7 @@ ChannelSend::ChannelSend(Clock* clock, rtcp_observer_(new VoERtcpObserver(this)), feedback_observer_proxy_(new TransportFeedbackProxy()), seq_num_allocator_proxy_(new TransportSequenceNumberProxy()), - rtp_packet_sender_proxy_(new RtpPacketSenderProxy()), + rtp_packet_pacer_proxy_(new RtpPacketSenderProxy()), retransmission_rate_limiter_( new RateLimiter(clock, kMaxRetransmissionWindowMs)), use_twcc_plr_for_ana_( @@ -676,7 +681,7 @@ ChannelSend::ChannelSend(Clock* clock, configuration.clock = Clock::GetRealTimeClock(); configuration.outgoing_transport = rtp_transport; - configuration.paced_sender = rtp_packet_sender_proxy_.get(); + configuration.paced_sender = rtp_packet_pacer_proxy_.get(); configuration.transport_sequence_number_allocator = seq_num_allocator_proxy_.get(); @@ -993,12 +998,12 @@ void ChannelSend::RegisterSenderCongestionControlObjects( RtpTransportControllerSendInterface* transport, RtcpBandwidthObserver* bandwidth_observer) { RTC_DCHECK_RUN_ON(&worker_thread_checker_); - RtpPacketSender* rtp_packet_sender = transport->packet_sender(); + RtpPacketPacer* rtp_packet_pacer = transport->packet_sender(); TransportFeedbackObserver* transport_feedback_observer = transport->transport_feedback_observer(); PacketRouter* packet_router = transport->packet_router(); - RTC_DCHECK(rtp_packet_sender); + RTC_DCHECK(rtp_packet_pacer); RTC_DCHECK(transport_feedback_observer); RTC_DCHECK(packet_router); RTC_DCHECK(!packet_router_); @@ -1006,7 +1011,7 @@ void ChannelSend::RegisterSenderCongestionControlObjects( feedback_observer_proxy_->SetTransportFeedbackObserver( transport_feedback_observer); seq_num_allocator_proxy_->SetSequenceNumberAllocator(packet_router); - rtp_packet_sender_proxy_->SetPacketSender(rtp_packet_sender); + rtp_packet_pacer_proxy_->SetPacketPacer(rtp_packet_pacer); _rtpRtcpModule->SetStorePacketsStatus(true, 600); constexpr bool remb_candidate = false; packet_router->AddSendRtpModule(_rtpRtcpModule.get(), remb_candidate); @@ -1022,7 +1027,7 @@ void ChannelSend::ResetSenderCongestionControlObjects() { seq_num_allocator_proxy_->SetSequenceNumberAllocator(nullptr); packet_router_->RemoveSendRtpModule(_rtpRtcpModule.get()); packet_router_ = nullptr; - rtp_packet_sender_proxy_->SetPacketSender(nullptr); + rtp_packet_pacer_proxy_->SetPacketPacer(nullptr); } void ChannelSend::SetRTCP_CNAME(absl::string_view c_name) { diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc index 7ff65257fb..a7acf53736 100644 --- a/call/rtp_transport_controller_send.cc +++ b/call/rtp_transport_controller_send.cc @@ -161,7 +161,7 @@ RtpTransportControllerSend::transport_feedback_observer() { return this; } -RtpPacketSender* RtpTransportControllerSend::packet_sender() { +RtpPacketPacer* RtpTransportControllerSend::packet_sender() { return &pacer_; } diff --git a/call/rtp_transport_controller_send.h b/call/rtp_transport_controller_send.h index 10af91df0c..235fc152d9 100644 --- a/call/rtp_transport_controller_send.h +++ b/call/rtp_transport_controller_send.h @@ -74,7 +74,7 @@ class RtpTransportControllerSend final PacketRouter* packet_router() override; TransportFeedbackObserver* transport_feedback_observer() override; - RtpPacketSender* packet_sender() override; + RtpPacketPacer* packet_sender() override; void SetAllocatedSendBitrateLimits(int min_send_bitrate_bps, int max_padding_bitrate_bps, diff --git a/call/rtp_transport_controller_send_interface.h b/call/rtp_transport_controller_send_interface.h index 860b705142..4cfe7c9647 100644 --- a/call/rtp_transport_controller_send_interface.h +++ b/call/rtp_transport_controller_send_interface.h @@ -27,6 +27,7 @@ #include "logging/rtc_event_log/rtc_event_log.h" #include "modules/rtp_rtcp/include/report_block_data.h" #include "modules/rtp_rtcp/include/rtcp_statistics.h" +#include "modules/rtp_rtcp/include/rtp_packet_pacer.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" @@ -117,7 +118,7 @@ class RtpTransportControllerSendInterface { virtual TransportFeedbackObserver* transport_feedback_observer() = 0; - virtual RtpPacketSender* packet_sender() = 0; + virtual RtpPacketPacer* packet_sender() = 0; // SetAllocatedSendBitrateLimits sets bitrates limits imposed by send codec // settings. diff --git a/call/test/mock_rtp_transport_controller_send.h b/call/test/mock_rtp_transport_controller_send.h index 98f42518de..2e813963a0 100644 --- a/call/test/mock_rtp_transport_controller_send.h +++ b/call/test/mock_rtp_transport_controller_send.h @@ -46,7 +46,7 @@ class MockRtpTransportControllerSend MOCK_METHOD0(GetWorkerQueue, rtc::TaskQueue*()); MOCK_METHOD0(packet_router, PacketRouter*()); MOCK_METHOD0(transport_feedback_observer, TransportFeedbackObserver*()); - MOCK_METHOD0(packet_sender, RtpPacketSender*()); + MOCK_METHOD0(packet_sender, RtpPacketPacer*()); MOCK_METHOD3(SetAllocatedSendBitrateLimits, void(int, int, int)); MOCK_METHOD1(SetPacingFactor, void(float)); MOCK_METHOD1(SetQueueTimeLimit, void(int)); diff --git a/modules/rtp_rtcp/include/rtp_rtcp.h b/modules/rtp_rtcp/include/rtp_rtcp.h index dbe6345a92..8dcb760d8c 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp.h +++ b/modules/rtp_rtcp/include/rtp_rtcp.h @@ -25,6 +25,7 @@ #include "modules/rtp_rtcp/include/flexfec_sender.h" #include "modules/rtp_rtcp/include/receive_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" +#include "modules/rtp_rtcp/include/rtp_packet_pacer.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtp_packet_to_send.h" #include "modules/rtp_rtcp/source/rtp_sender.h" @@ -86,7 +87,7 @@ class RtpRtcp : public Module, public RtcpFeedbackSenderInterface { RemoteBitrateEstimator* remote_bitrate_estimator = nullptr; // Spread any bursts of packets into smaller bursts to minimize packet loss. - RtpPacketSender* paced_sender = nullptr; + RtpPacketPacer* paced_sender = nullptr; // Generate FlexFEC packets. // TODO(brandtr): Remove when FlexfecSender is wired up to PacedSender. diff --git a/modules/rtp_rtcp/source/rtp_sender.cc b/modules/rtp_rtcp/source/rtp_sender.cc index ae811a252a..2863680e2a 100644 --- a/modules/rtp_rtcp/source/rtp_sender.cc +++ b/modules/rtp_rtcp/source/rtp_sender.cc @@ -129,7 +129,7 @@ RTPSender::RTPSender( bool audio, Clock* clock, Transport* transport, - RtpPacketSender* paced_sender, + RtpPacketPacer* paced_sender, absl::optional flexfec_ssrc, TransportSequenceNumberAllocator* sequence_number_allocator, TransportFeedbackObserver* transport_feedback_observer, diff --git a/modules/rtp_rtcp/source/rtp_sender.h b/modules/rtp_rtcp/source/rtp_sender.h index 5e86742f0e..d8d7865000 100644 --- a/modules/rtp_rtcp/source/rtp_sender.h +++ b/modules/rtp_rtcp/source/rtp_sender.h @@ -24,6 +24,7 @@ #include "api/transport/webrtc_key_value_config.h" #include "modules/rtp_rtcp/include/flexfec_sender.h" #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" +#include "modules/rtp_rtcp/include/rtp_packet_pacer.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtp_packet_history.h" #include "modules/rtp_rtcp/source/rtp_rtcp_config.h" @@ -47,7 +48,7 @@ class RTPSender { RTPSender(bool audio, Clock* clock, Transport* transport, - RtpPacketSender* paced_sender, + RtpPacketPacer* paced_sender, absl::optional flexfec_ssrc, TransportSequenceNumberAllocator* sequence_number_allocator, TransportFeedbackObserver* transport_feedback_callback, @@ -238,7 +239,7 @@ class RTPSender { const absl::optional flexfec_ssrc_; - RtpPacketSender* const paced_sender_; + RtpPacketPacer* const paced_sender_; TransportSequenceNumberAllocator* const transport_sequence_number_allocator_; TransportFeedbackObserver* const transport_feedback_observer_; rtc::CriticalSection send_critsect_; diff --git a/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_unittest.cc index cbb72a173a..cebc813719 100644 --- a/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -20,6 +20,7 @@ #include "modules/rtp_rtcp/include/rtp_cvo.h" #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" #include "modules/rtp_rtcp/include/rtp_header_parser.h" +#include "modules/rtp_rtcp/include/rtp_packet_pacer.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" #include "modules/rtp_rtcp/source/rtp_format_video_generic.h" @@ -140,10 +141,12 @@ MATCHER_P(SameRtcEventTypeAs, value, "") { } // namespace -class MockRtpPacketSender : public RtpPacketSender { +class MockRtpPacketPacer : public RtpPacketPacer { public: - MockRtpPacketSender() {} - virtual ~MockRtpPacketSender() {} + MockRtpPacketPacer() {} + virtual ~MockRtpPacketPacer() {} + + MOCK_METHOD1(EnqueuePacket, void(std::unique_ptr)); MOCK_METHOD6(InsertPacket, void(Priority priority, @@ -212,7 +215,7 @@ class RtpSenderTest : public ::testing::TestWithParam { SimulatedClock fake_clock_; NiceMock mock_rtc_event_log_; - MockRtpPacketSender mock_paced_sender_; + MockRtpPacketPacer mock_paced_sender_; StrictMock seq_num_allocator_; StrictMock send_packet_observer_; StrictMock feedback_observer_;