Allow the SlackedPacer experiment to control SendBurstInterval.

When the slacked pacer experiment is enabled the next pacing opportunity
may be a full tick (~16 ms) from now. Add a flag to allow experimenting
with a burst interval (= 16 ms?) such that we can send bursts in
MaybeProcessPackets.

A common use case would be that EnqueuePackets triggers
MaybeProcessPackets when we are off-tick but we'd still like to create
an immediate burst instead of waiting for the next tick or two for that
to happen.

Bug: webrtc:14152
Change-Id: Ib0ed8312cb7d53b80f3520fff3a6e3bbb5a93fd1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264985
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37116}
This commit is contained in:
Henrik Boström 2022-06-03 13:09:46 +02:00 committed by WebRTC LUCI CQ
parent 71ff71b0f8
commit 8263020407
2 changed files with 17 additions and 7 deletions

View File

@ -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() {

View File

@ -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<TimeDelta> 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<TimeDelta> send_burst_interval;
};
const SlackedPacerFlags slacked_pacer_flags_;
// The holdback window prevents too frequent delayed MaybeProcessPackets()