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}
This commit is contained in:
Jianhui Dai 2021-11-24 22:23:21 +08:00 committed by WebRTC LUCI CQ
parent e9ab88570b
commit bf28797b09

View File

@ -420,10 +420,16 @@ void RtpTransportControllerSend::OnSentPacket(
RTC_DCHECK_RUN_ON(&task_queue_); RTC_DCHECK_RUN_ON(&task_queue_);
absl::optional<SentPacket> packet_msg = absl::optional<SentPacket> packet_msg =
transport_feedback_adapter_.ProcessSentPacket(sent_packet); transport_feedback_adapter_.ProcessSentPacket(sent_packet);
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( pacer()->UpdateOutstandingData(
transport_feedback_adapter_.GetOutstandingData()); transport_feedback_adapter_.GetOutstandingData());
if (packet_msg && controller_) if (controller_)
PostUpdates(controller_->OnSentPacket(*packet_msg)); PostUpdates(controller_->OnSentPacket(*packet_msg));
}
}); });
} }
@ -574,11 +580,15 @@ void RtpTransportControllerSend::OnTransportFeedback(
absl::optional<TransportPacketsFeedback> feedback_msg = absl::optional<TransportPacketsFeedback> feedback_msg =
transport_feedback_adapter_.ProcessTransportFeedback(feedback, transport_feedback_adapter_.ProcessTransportFeedback(feedback,
feedback_time); feedback_time);
if (feedback_msg && controller_) { if (feedback_msg) {
if (controller_)
PostUpdates(controller_->OnTransportPacketsFeedback(*feedback_msg)); PostUpdates(controller_->OnTransportPacketsFeedback(*feedback_msg));
}
// Only update outstanding data in pacer if any packet is first time
// acked.
pacer()->UpdateOutstandingData( pacer()->UpdateOutstandingData(
transport_feedback_adapter_.GetOutstandingData()); transport_feedback_adapter_.GetOutstandingData());
}
}); });
} }