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:
parent
71ff71b0f8
commit
8263020407
@ -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() {
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user