From cd76eabdd7a04298a3b0c82f6176072f8e845a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Mon, 21 Jan 2019 18:06:46 +0100 Subject: [PATCH] Parsing of pacing factor and alr probing in RateControlSettings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:10223 Change-Id: Ibba96a220414520872edcc9f87fddefbcab374d4 Reviewed-on: https://webrtc-review.googlesource.com/c/118740 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Erik Språng Cr-Commit-Position: refs/heads/master@{#26353} --- rtc_base/experiments/rate_control_settings.cc | 15 +++++++++++++-- rtc_base/experiments/rate_control_settings.h | 6 ++++++ video/BUILD.gn | 1 + video/video_send_stream_impl.cc | 15 ++++++++++++--- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/rtc_base/experiments/rate_control_settings.cc b/rtc_base/experiments/rate_control_settings.cc index 81089b83ff..018ef1a9ff 100644 --- a/rtc_base/experiments/rate_control_settings.cc +++ b/rtc_base/experiments/rate_control_settings.cc @@ -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 RateControlSettings::GetPacingFactor() const { + return pacing_factor_.GetOptional(); +} + +bool RateControlSettings::UseAlrProbing() const { + return alr_probing_.Get(); +} + } // namespace webrtc diff --git a/rtc_base/experiments/rate_control_settings.h b/rtc_base/experiments/rate_control_settings.h index 0afda877b6..b4a3755268 100644 --- a/rtc_base/experiments/rate_control_settings.h +++ b/rtc_base/experiments/rate_control_settings.h @@ -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 GetPacingFactor() const; + bool UseAlrProbing() const; + private: explicit RateControlSettings( const WebRtcKeyValueConfig* const key_value_config); FieldTrialOptional congestion_window_; FieldTrialOptional congestion_window_pushback_; + FieldTrialOptional pacing_factor_; + FieldTrialParameter alr_probing_; }; } // namespace webrtc diff --git a/video/BUILD.gn b/video/BUILD.gn index 1b3e698ea6..a56e506f7f 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -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", diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc index f455d18de2..2b6dbb5e11 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -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()); } }