From bf28797b09e8f45d5295438417c6e858f6d74753 Mon Sep 17 00:00:00 2001 From: Jianhui Dai Date: Wed, 24 Nov 2021 22:23:21 +0800 Subject: [PATCH] RtpTransportControllerSend: Restrict pacer outstanding data update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `TransportFeedbackAdapter` return NULL indicates outstanding data is unchanged. This CL excludes outgoing retransmitted packets, rtcp packets and invalid transport feedbacks to wakeup pacer. Bug: webrtc:13417 Change-Id: Ie94956232c13cd548bb7038b5ce76617756fb207 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/238741 Reviewed-by: Henrik Boström Reviewed-by: Erik Språng Commit-Queue: Erik Språng Cr-Commit-Position: refs/heads/main@{#35485} --- call/rtp_transport_controller_send.cc | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc index 11c299c19b..c9388e47aa 100644 --- a/call/rtp_transport_controller_send.cc +++ b/call/rtp_transport_controller_send.cc @@ -420,10 +420,16 @@ void RtpTransportControllerSend::OnSentPacket( RTC_DCHECK_RUN_ON(&task_queue_); absl::optional packet_msg = transport_feedback_adapter_.ProcessSentPacket(sent_packet); - pacer()->UpdateOutstandingData( - transport_feedback_adapter_.GetOutstandingData()); - if (packet_msg && controller_) - PostUpdates(controller_->OnSentPacket(*packet_msg)); + if (packet_msg) { + // Only update outstanding data in pacer if: + // 1. Packet feadback is used. + // 2. The packet has not yet received an acknowledgement. + // 3. It is not a retransmission of an earlier packet. + pacer()->UpdateOutstandingData( + transport_feedback_adapter_.GetOutstandingData()); + if (controller_) + PostUpdates(controller_->OnSentPacket(*packet_msg)); + } }); } @@ -574,11 +580,15 @@ void RtpTransportControllerSend::OnTransportFeedback( absl::optional feedback_msg = transport_feedback_adapter_.ProcessTransportFeedback(feedback, feedback_time); - if (feedback_msg && controller_) { - PostUpdates(controller_->OnTransportPacketsFeedback(*feedback_msg)); + if (feedback_msg) { + if (controller_) + PostUpdates(controller_->OnTransportPacketsFeedback(*feedback_msg)); + + // Only update outstanding data in pacer if any packet is first time + // acked. + pacer()->UpdateOutstandingData( + transport_feedback_adapter_.GetOutstandingData()); } - pacer()->UpdateOutstandingData( - transport_feedback_adapter_.GetOutstandingData()); }); }