Parsing of pacing factor and alr probing in RateControlSettings
Bug: webrtc:10223 Change-Id: Ibba96a220414520872edcc9f87fddefbcab374d4 Reviewed-on: https://webrtc-review.googlesource.com/c/118740 Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Commit-Queue: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26353}
This commit is contained in:
parent
44f0f87748
commit
cd76eabdd7
@ -73,8 +73,11 @@ RateControlSettings::RateControlSettings(
|
||||
congestion_window_pushback_(
|
||||
"cwnd_pushback",
|
||||
MaybeReadCongestionWindowPushbackExperimentParameter(
|
||||
key_value_config)) {
|
||||
ParseFieldTrial({&congestion_window_, &congestion_window_pushback_},
|
||||
key_value_config)),
|
||||
pacing_factor_("pacing_factor"),
|
||||
alr_probing_("alr_probing", false) {
|
||||
ParseFieldTrial({&congestion_window_, &congestion_window_pushback_,
|
||||
&pacing_factor_, &alr_probing_},
|
||||
key_value_config->Lookup("WebRTC-VideoRateControl"));
|
||||
}
|
||||
|
||||
@ -111,4 +114,12 @@ uint32_t RateControlSettings::CongestionWindowMinPushbackTargetBitrateBps()
|
||||
kDefaultMinPushbackTargetBitrateBps);
|
||||
}
|
||||
|
||||
absl::optional<double> RateControlSettings::GetPacingFactor() const {
|
||||
return pacing_factor_.GetOptional();
|
||||
}
|
||||
|
||||
bool RateControlSettings::UseAlrProbing() const {
|
||||
return alr_probing_.Get();
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -14,6 +14,7 @@
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/transport/webrtc_key_value_config.h"
|
||||
#include "rtc_base/experiments/field_trial_parser.h"
|
||||
#include "rtc_base/experiments/field_trial_units.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
@ -34,12 +35,17 @@ class RateControlSettings final {
|
||||
bool UseCongestionWindowPushback() const;
|
||||
uint32_t CongestionWindowMinPushbackTargetBitrateBps() const;
|
||||
|
||||
absl::optional<double> GetPacingFactor() const;
|
||||
bool UseAlrProbing() const;
|
||||
|
||||
private:
|
||||
explicit RateControlSettings(
|
||||
const WebRtcKeyValueConfig* const key_value_config);
|
||||
|
||||
FieldTrialOptional<int> congestion_window_;
|
||||
FieldTrialOptional<int> congestion_window_pushback_;
|
||||
FieldTrialOptional<double> pacing_factor_;
|
||||
FieldTrialParameter<bool> alr_probing_;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -86,6 +86,7 @@ rtc_static_library("video") {
|
||||
"../rtc_base:stringutils",
|
||||
"../rtc_base/experiments:alr_experiment",
|
||||
"../rtc_base/experiments:quality_scaling_experiment",
|
||||
"../rtc_base/experiments:rate_control_settings",
|
||||
"../rtc_base/system:fallthrough",
|
||||
"../rtc_base/task_utils:repeating_task",
|
||||
"../system_wrappers:field_trial",
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
#include "rtc_base/atomic_ops.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/experiments/alr_experiment.h"
|
||||
#include "rtc_base/experiments/rate_control_settings.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/numerics/safe_conversions.h"
|
||||
#include "rtc_base/scoped_ref_ptr.h"
|
||||
@ -204,6 +205,7 @@ VideoSendStreamImpl::VideoSendStreamImpl(
|
||||
stats_proxy_(stats_proxy),
|
||||
config_(config),
|
||||
worker_queue_(worker_queue),
|
||||
timed_out_(false),
|
||||
call_stats_(call_stats),
|
||||
transport_(transport),
|
||||
bitrate_allocator_(bitrate_allocator),
|
||||
@ -278,9 +280,16 @@ VideoSendStreamImpl::VideoSendStreamImpl(
|
||||
configured_pacing_factor_ = alr_settings->pacing_factor;
|
||||
transport->SetQueueTimeLimit(alr_settings->max_paced_queue_time);
|
||||
} else {
|
||||
transport->EnablePeriodicAlrProbing(false);
|
||||
transport->SetPacingFactor(pacing_config_.pacing_factor);
|
||||
configured_pacing_factor_ = pacing_config_.pacing_factor;
|
||||
RateControlSettings rate_control_settings =
|
||||
RateControlSettings::ParseFromFieldTrials();
|
||||
|
||||
transport->EnablePeriodicAlrProbing(
|
||||
rate_control_settings.UseAlrProbing());
|
||||
const double pacing_factor =
|
||||
rate_control_settings.GetPacingFactor().value_or(
|
||||
pacing_config_.pacing_factor);
|
||||
transport->SetPacingFactor(pacing_factor);
|
||||
configured_pacing_factor_ = pacing_factor;
|
||||
transport->SetQueueTimeLimit(pacing_config_.max_pacing_delay.Get().ms());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user