Add field trials to configure the backoff factor and the trendline window of the BWE.
These field trials can be set with a string similar to: WebRTC-BweWindowSizeInPackets/Enabled-150/WebRTC-BweBackOffFactor/Enabled-0.95/ BweWindowSizeInPackets Number of packets which the delay-based BWE window is based on. A larger value means lower delay-sensitivity. Default in WebRTC: 20 Reasonable values for streaming: 50-150 BweBackOffFactor How far the BWE will back off when the delay increases. A value closer to 1.0 means smaller back-off. Range: > 0.0, < 1.0 Default in WebRTC: 0.85 Reasonable values for streaming: 0.85-0.95 Bug: webrtc:8212 Change-Id: I61f0883788b689847a43273b63cef663042f4d42 Reviewed-on: https://webrtc-review.googlesource.com/6764 Commit-Queue: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20172}
This commit is contained in:
parent
e68b6c970e
commit
ea00e483d1
@ -48,11 +48,23 @@ constexpr double kDefaultTrendlineThresholdGain = 4.0;
|
||||
constexpr int kMaxConsecutiveFailedLookups = 5;
|
||||
|
||||
const char kBweSparseUpdateExperiment[] = "WebRTC-BweSparseUpdateExperiment";
|
||||
const char kBweWindowSizeInPacketsExperiment[] =
|
||||
"WebRTC-BweWindowSizeInPackets";
|
||||
|
||||
bool BweSparseUpdateExperimentIsEnabled() {
|
||||
size_t ReadTrendlineFilterWindowSize() {
|
||||
std::string experiment_string =
|
||||
webrtc::field_trial::FindFullName(kBweSparseUpdateExperiment);
|
||||
return experiment_string == "Enabled";
|
||||
webrtc::field_trial::FindFullName(kBweWindowSizeInPacketsExperiment);
|
||||
size_t window_size;
|
||||
int parsed_values =
|
||||
sscanf(experiment_string.c_str(), "Enabled-%zu", &window_size);
|
||||
if (parsed_values == 1) {
|
||||
if (window_size > 1)
|
||||
return window_size;
|
||||
LOG(WARNING) << "Window size must be greater than 1.";
|
||||
}
|
||||
LOG(LS_WARNING) << "Failed to parse parameters for BweTrendlineFilter "
|
||||
"experiment from field trial string. Using default.";
|
||||
return kDefaultTrendlineWindowSize;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@ -81,14 +93,20 @@ DelayBasedBwe::DelayBasedBwe(RtcEventLog* event_log, const Clock* clock)
|
||||
last_seen_packet_ms_(-1),
|
||||
uma_recorded_(false),
|
||||
probe_bitrate_estimator_(event_log),
|
||||
trendline_window_size_(kDefaultTrendlineWindowSize),
|
||||
trendline_window_size_(
|
||||
webrtc::field_trial::IsEnabled(kBweWindowSizeInPacketsExperiment)
|
||||
? ReadTrendlineFilterWindowSize()
|
||||
: kDefaultTrendlineWindowSize),
|
||||
trendline_smoothing_coeff_(kDefaultTrendlineSmoothingCoeff),
|
||||
trendline_threshold_gain_(kDefaultTrendlineThresholdGain),
|
||||
consecutive_delayed_feedbacks_(0),
|
||||
prev_bitrate_(0),
|
||||
prev_state_(BandwidthUsage::kBwNormal),
|
||||
in_sparse_update_experiment_(BweSparseUpdateExperimentIsEnabled()) {
|
||||
LOG(LS_INFO) << "Using Trendline filter for delay change estimation.";
|
||||
in_sparse_update_experiment_(
|
||||
webrtc::field_trial::IsEnabled(kBweSparseUpdateExperiment)) {
|
||||
LOG(LS_INFO)
|
||||
<< "Using Trendline filter for delay change estimation with window size "
|
||||
<< trendline_window_size_;
|
||||
}
|
||||
|
||||
DelayBasedBwe::~DelayBasedBwe() {}
|
||||
|
||||
@ -170,6 +170,7 @@ if (rtc_include_tests) {
|
||||
":bwe_simulator_lib",
|
||||
":remote_bitrate_estimator",
|
||||
"../../rtc_base:rtc_base_approved",
|
||||
"../../test:field_trial",
|
||||
"../../test:test_support",
|
||||
]
|
||||
if (!build_with_chromium && is_clang) {
|
||||
|
||||
@ -13,19 +13,45 @@
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <string>
|
||||
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/safe_minmax.h"
|
||||
|
||||
#include "modules/remote_bitrate_estimator/overuse_detector.h"
|
||||
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
||||
#include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
|
||||
#include "modules/remote_bitrate_estimator/overuse_detector.h"
|
||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
static const int64_t kDefaultRttMs = 200;
|
||||
static const int64_t kMaxFeedbackIntervalMs = 1000;
|
||||
static const float kDefaultBackoffFactor = 0.85f;
|
||||
|
||||
const char kBweBackOffFactorExperiment[] = "WebRTC-BweBackOffFactor";
|
||||
|
||||
float ReadTrendlineFilterWindowSize() {
|
||||
std::string experiment_string =
|
||||
webrtc::field_trial::FindFullName(kBweBackOffFactorExperiment);
|
||||
float backoff_factor;
|
||||
int parsed_values =
|
||||
sscanf(experiment_string.c_str(), "Enabled-%f", &backoff_factor);
|
||||
if (parsed_values == 1) {
|
||||
if (backoff_factor < 1.0f) {
|
||||
LOG(WARNING) << "Back-off factor must be less than 1.";
|
||||
} else if (backoff_factor > 0.0f) {
|
||||
LOG(WARNING) << "Back-off factor must be greater than 0.";
|
||||
} else {
|
||||
return backoff_factor;
|
||||
}
|
||||
}
|
||||
LOG(LS_WARNING) << "Failed to parse parameters for AimdRateControl "
|
||||
"experiment from field trial string. Using default.";
|
||||
return kDefaultBackoffFactor;
|
||||
}
|
||||
|
||||
AimdRateControl::AimdRateControl()
|
||||
: min_configured_bitrate_bps_(congestion_controller::GetMinBitrateBps()),
|
||||
@ -38,9 +64,13 @@ AimdRateControl::AimdRateControl()
|
||||
time_last_bitrate_change_(-1),
|
||||
time_first_incoming_estimate_(-1),
|
||||
bitrate_is_initialized_(false),
|
||||
beta_(0.85f),
|
||||
beta_(webrtc::field_trial::IsEnabled(kBweBackOffFactorExperiment)
|
||||
? ReadTrendlineFilterWindowSize()
|
||||
: kDefaultBackoffFactor),
|
||||
rtt_(kDefaultRttMs),
|
||||
in_experiment_(!AdaptiveThresholdExperimentIsDisabled()) {}
|
||||
in_experiment_(!AdaptiveThresholdExperimentIsDisabled()) {
|
||||
LOG(LS_INFO) << "Using aimd rate control with back off factor " << beta_;
|
||||
}
|
||||
|
||||
AimdRateControl::~AimdRateControl() {}
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include "modules/remote_bitrate_estimator/test/packet_sender.h"
|
||||
#include "rtc_base/constructormagic.h"
|
||||
#include "rtc_base/random.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/testsupport/fileutils.h"
|
||||
|
||||
namespace webrtc {
|
||||
@ -142,6 +143,24 @@ TEST_P(BweFeedbackTest, GoogleWifiTrace3Mbps) {
|
||||
0, receiver.GetDelayStats(), counter2.GetBitrateStats());
|
||||
}
|
||||
|
||||
TEST_P(BweFeedbackTest, GoogleWifiTrace3MbpsStreaming) {
|
||||
test::ScopedFieldTrials override_field_trials(
|
||||
"WebRTC-BweWindowSizeInPackets/Enabled-100/"
|
||||
"WebRTC-BweBackOffFactor/Enabled-0.95/");
|
||||
AdaptiveVideoSource source(0, 30, 300, 0, 0);
|
||||
VideoSender sender(&uplink_, &source, GetParam());
|
||||
RateCounterFilter counter1(&uplink_, 0, "sender_output",
|
||||
bwe_names[GetParam()]);
|
||||
TraceBasedDeliveryFilter filter(&uplink_, 0, "link_capacity");
|
||||
filter.set_max_delay_ms(500);
|
||||
RateCounterFilter counter2(&uplink_, 0, "Receiver", bwe_names[GetParam()]);
|
||||
PacketReceiver receiver(&uplink_, 0, GetParam(), false, false);
|
||||
ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx")));
|
||||
RunFor(300 * 1000);
|
||||
PrintResults(filter.GetBitrateStats().GetMean(), counter2.GetBitrateStats(),
|
||||
0, receiver.GetDelayStats(), counter2.GetBitrateStats());
|
||||
}
|
||||
|
||||
TEST_P(BweFeedbackTest, PacedSelfFairness50msTest) {
|
||||
int64_t kRttMs = 100;
|
||||
int64_t kMaxJitterMs = 15;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user