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:
Erik Språng 2019-01-21 18:06:46 +01:00 committed by Commit Bot
parent 44f0f87748
commit cd76eabdd7
4 changed files with 32 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -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());
}
}