diff --git a/modules/pacing/task_queue_paced_sender.cc b/modules/pacing/task_queue_paced_sender.cc index db8e87ae6e..5f268a76a4 100644 --- a/modules/pacing/task_queue_paced_sender.cc +++ b/modules/pacing/task_queue_paced_sender.cc @@ -35,10 +35,11 @@ const int TaskQueuePacedSender::kNoPacketHoldback = -1; TaskQueuePacedSender::SlackedPacerFlags::SlackedPacerFlags( const FieldTrialsView& field_trials) : allow_low_precision("Enabled"), - max_low_precision_expected_queue_time("max_queue_time") { - ParseFieldTrial( - {&allow_low_precision, &max_low_precision_expected_queue_time}, - field_trials.Lookup(kSlackedTaskQueuePacedSenderFieldTrial)); + max_low_precision_expected_queue_time("max_queue_time"), + send_burst_interval("send_burst_interval") { + ParseFieldTrial({&allow_low_precision, &max_low_precision_expected_queue_time, + &send_burst_interval}, + field_trials.Lookup(kSlackedTaskQueuePacedSenderFieldTrial)); } TaskQueuePacedSender::TaskQueuePacedSender( @@ -66,6 +67,11 @@ TaskQueuePacedSender::TaskQueuePacedSender( "TaskQueuePacedSender", TaskQueueFactory::Priority::NORMAL)) { RTC_DCHECK_GE(max_hold_back_window_, PacingController::kMinSleepTime); + if (slacked_pacer_flags_.allow_low_precision && + slacked_pacer_flags_.send_burst_interval) { + pacing_controller_.SetSendBurstInterval( + slacked_pacer_flags_.send_burst_interval.Value()); + } } TaskQueuePacedSender::~TaskQueuePacedSender() { diff --git a/modules/pacing/task_queue_paced_sender.h b/modules/pacing/task_queue_paced_sender.h index a390be28b2..769cedb124 100644 --- a/modules/pacing/task_queue_paced_sender.h +++ b/modules/pacing/task_queue_paced_sender.h @@ -141,10 +141,14 @@ class TaskQueuePacedSender : public RtpPacketPacer, public RtpPacketSender { // implementation supports slack. When probing, high precision is used // regardless to ensure good bandwidth estimation. FieldTrialFlag allow_low_precision; - // Controlled via the "max_queue_time" experiment arm. If set, uses high - // precision scheduling of MaybeProcessPackets() whenever the expected queue - // time is greater than or equal to this value. + // Controlled via the "max_queue_time" experiment argument. If set, uses + // high precision scheduling of MaybeProcessPackets() whenever the expected + // queue time is greater than or equal to this value. FieldTrialOptional max_low_precision_expected_queue_time; + // Controlled via "send_burst_interval" experiment argument. If set, the + // pacer is allowed to build up a packet "debt" that correspond to + // approximately the send rate during the specified interval. + FieldTrialOptional send_burst_interval; }; const SlackedPacerFlags slacked_pacer_flags_; // The holdback window prevents too frequent delayed MaybeProcessPackets()