From 86b1cf776e717458219c91d0666a2046ca774141 Mon Sep 17 00:00:00 2001 From: Per K Date: Fri, 8 Dec 2023 14:57:13 +0100 Subject: [PATCH] Allow configuring pacer burst through RtcConfiguration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allow exernal applications to control how many packets can be sent relative current BWE. This is a partial revert of https://webrtc-review.googlesource.com/c/src/+/311102 Bug: chromium:1354491 Change-Id: Ia236aaacc468ddac12341efa555041bb2dfdde62 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/330580 Commit-Queue: Per Kjellander Reviewed-by: Mirko Bonadei Reviewed-by: Erik Språng Cr-Commit-Position: refs/heads/main@{#41343} --- api/peer_connection_interface.h | 1 - call/call_config.cc | 1 + call/call_config.h | 3 +++ call/rtp_transport_config.h | 3 +++ call/rtp_transport_controller_send.cc | 4 ++++ pc/peer_connection_factory.cc | 1 + 6 files changed, 12 insertions(+), 1 deletion(-) diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h index e8dc3ddc89..c44e741a43 100644 --- a/api/peer_connection_interface.h +++ b/api/peer_connection_interface.h @@ -686,7 +686,6 @@ class RTC_EXPORT PeerConnectionInterface : public webrtc::RefCountInterface { PortAllocatorConfig port_allocator_config; // The burst interval of the pacer, see TaskQueuePacedSender constructor. - // TODO(hbos): Deprecated, Remove once Chromium is not setting it. absl::optional pacer_burst_interval; // diff --git a/call/call_config.cc b/call/call_config.cc index 5f77714956..ae4ff8656d 100644 --- a/call/call_config.cc +++ b/call/call_config.cc @@ -31,6 +31,7 @@ RtpTransportConfig CallConfig::ExtractTransportConfig() const { network_state_predictor_factory; transportConfig.task_queue_factory = &env.task_queue_factory(); transportConfig.trials = &env.field_trials(); + transportConfig.pacer_burst_interval = pacer_burst_interval; return transportConfig; } diff --git a/call/call_config.h b/call/call_config.h index 0642cc2b85..b99c644dae 100644 --- a/call/call_config.h +++ b/call/call_config.h @@ -70,6 +70,9 @@ struct CallConfig { Metronome* decode_metronome = nullptr; + // The burst interval of the pacer, see TaskQueuePacedSender constructor. + absl::optional pacer_burst_interval; + // Enables send packet batching from the egress RTP sender. bool enable_send_packet_batching = false; }; diff --git a/call/rtp_transport_config.h b/call/rtp_transport_config.h index f2030b3672..6c94f7d911 100644 --- a/call/rtp_transport_config.h +++ b/call/rtp_transport_config.h @@ -44,6 +44,9 @@ struct RtpTransportConfig { // Key-value mapping of internal configurations to apply, // e.g. field trials. const FieldTrialsView* trials = nullptr; + + // The burst interval of the pacer, see TaskQueuePacedSender constructor. + absl::optional pacer_burst_interval; }; } // namespace webrtc diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc index 8d24f7551e..afe6cb0875 100644 --- a/call/rtp_transport_controller_send.cc +++ b/call/rtp_transport_controller_send.cc @@ -111,6 +111,10 @@ RtpTransportControllerSend::RtpTransportControllerSend( pacer_.SetPacingRates( DataRate::BitsPerSec(config.bitrate_config.start_bitrate_bps), DataRate::Zero()); + if (config.pacer_burst_interval) { + // Default burst interval overriden by config. + pacer_.SetSendBurstInterval(*config.pacer_burst_interval); + } } RtpTransportControllerSend::~RtpTransportControllerSend() { diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc index 951da5fa44..06ca790ea2 100644 --- a/pc/peer_connection_factory.cc +++ b/pc/peer_connection_factory.cc @@ -344,6 +344,7 @@ std::unique_ptr PeerConnectionFactory::CreateCall_w( call_config.rtp_transport_controller_send_factory = transport_controller_send_factory_.get(); call_config.decode_metronome = decode_metronome_.get(); + call_config.pacer_burst_interval = configuration.pacer_burst_interval; return context_->call_factory()->CreateCall(call_config); }