RtpTransportControllerSend: Restrict pacer outstanding data update
`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 <hbos@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35485}
diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc
index 11c299c..c9388e4 100644
--- a/call/rtp_transport_controller_send.cc
+++ b/call/rtp_transport_controller_send.cc
@@ -420,10 +420,16 @@
RTC_DCHECK_RUN_ON(&task_queue_);
absl::optional<SentPacket> 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 @@
absl::optional<TransportPacketsFeedback> 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());
});
}