Add an experiment for stricter pacing and ALR probing.

BUG=webrtc:8072

Review-Url: https://codereview.webrtc.org/2994623002
Cr-Commit-Position: refs/heads/master@{#19270}
This commit is contained in:
stefan 2017-08-08 06:51:05 -07:00 committed by Commit Bot
parent cf189c60d2
commit d7a418f93a
3 changed files with 38 additions and 16 deletions

View File

@ -22,14 +22,24 @@ namespace webrtc {
const char* AlrDetector::kScreenshareProbingBweExperimentName =
"WebRTC-ProbingScreenshareBwe";
const char* AlrDetector::kStrictPacingAndProbingExperimentName =
"WebRTC-StrictPacingAndProbing";
AlrDetector::AlrDetector()
: bandwidth_usage_percent_(kDefaultAlrBandwidthUsagePercent),
alr_start_budget_level_percent_(kDefaultAlrStartBudgetLevelPercent),
alr_stop_budget_level_percent_(kDefaultAlrStopBudgetLevelPercent),
alr_budget_(0, true) {
RTC_CHECK(
field_trial::FindFullName(kStrictPacingAndProbingExperimentName)
.empty() ||
field_trial::FindFullName(kScreenshareProbingBweExperimentName).empty());
rtc::Optional<AlrExperimentSettings> experiment_settings =
ParseAlrSettingsFromFieldTrial();
ParseAlrSettingsFromFieldTrial(kScreenshareProbingBweExperimentName);
if (!experiment_settings) {
experiment_settings =
ParseAlrSettingsFromFieldTrial(kStrictPacingAndProbingExperimentName);
}
if (experiment_settings) {
alr_stop_budget_level_percent_ =
experiment_settings->alr_stop_budget_level_percent;
@ -67,10 +77,9 @@ rtc::Optional<int64_t> AlrDetector::GetApplicationLimitedRegionStartTime()
}
rtc::Optional<AlrDetector::AlrExperimentSettings>
AlrDetector::ParseAlrSettingsFromFieldTrial() {
AlrDetector::ParseAlrSettingsFromFieldTrial(const char* experiment_name) {
rtc::Optional<AlrExperimentSettings> ret;
std::string group_name =
field_trial::FindFullName(kScreenshareProbingBweExperimentName);
std::string group_name = field_trial::FindFullName(experiment_name);
const std::string kIgnoredSuffix = "_Dogfood";
if (group_name.rfind(kIgnoredSuffix) ==
@ -88,7 +97,7 @@ AlrDetector::ParseAlrSettingsFromFieldTrial() {
&settings.alr_start_budget_level_percent,
&settings.alr_stop_budget_level_percent) == 5) {
ret.emplace(settings);
LOG(LS_INFO) << "Using screenshare ALR experiment settings: "
LOG(LS_INFO) << "Using ALR experiment settings: "
"pacing factor: "
<< settings.pacing_factor << ", max pacer queue length: "
<< settings.max_paced_queue_time
@ -98,6 +107,8 @@ AlrDetector::ParseAlrSettingsFromFieldTrial() {
<< settings.alr_start_budget_level_percent
<< ", ALR end budget level percent: "
<< settings.alr_stop_budget_level_percent;
} else {
LOG(LS_INFO) << "Failed to parse ALR experiment: " << experiment_name;
}
return ret;

View File

@ -48,7 +48,8 @@ class AlrDetector {
int alr_start_budget_level_percent = kDefaultAlrStartBudgetLevelPercent;
int alr_stop_budget_level_percent = kDefaultAlrStopBudgetLevelPercent;
};
static rtc::Optional<AlrExperimentSettings> ParseAlrSettingsFromFieldTrial();
static rtc::Optional<AlrExperimentSettings> ParseAlrSettingsFromFieldTrial(
const char* experiment_name);
// Sent traffic percentage as a function of network capacity used to determine
// application-limited region. ALR region start when bandwidth usage drops
@ -59,6 +60,7 @@ class AlrDetector {
static constexpr int kDefaultAlrStartBudgetLevelPercent = 80;
static constexpr int kDefaultAlrStopBudgetLevelPercent = 50;
static const char* kScreenshareProbingBweExperimentName;
static const char* kStrictPacingAndProbingExperimentName;
void UpdateBudgetWithElapsedTime(int64_t delta_time_ms);
void UpdateBudgetWithBytesSent(size_t bytes_sent);

View File

@ -828,17 +828,26 @@ VideoSendStreamImpl::VideoSendStreamImpl(
RTC_DCHECK(call_stats_);
RTC_DCHECK(transport_);
RTC_DCHECK(transport_->send_side_cc());
RTC_CHECK(field_trial::FindFullName(
AlrDetector::kStrictPacingAndProbingExperimentName)
.empty() ||
field_trial::FindFullName(
AlrDetector::kScreenshareProbingBweExperimentName)
.empty());
rtc::Optional<AlrDetector::AlrExperimentSettings> alr_settings;
if (content_type == VideoEncoderConfig::ContentType::kScreen) {
rtc::Optional<AlrDetector::AlrExperimentSettings> alr_settings =
AlrDetector::ParseAlrSettingsFromFieldTrial();
if (alr_settings) {
transport->send_side_cc()->EnablePeriodicAlrProbing(true);
transport->send_side_cc()->pacer()->SetPacingFactor(
alr_settings->pacing_factor);
transport->send_side_cc()->pacer()->SetQueueTimeLimit(
alr_settings->max_paced_queue_time);
}
alr_settings = AlrDetector::ParseAlrSettingsFromFieldTrial(
AlrDetector::kScreenshareProbingBweExperimentName);
} else {
alr_settings = AlrDetector::ParseAlrSettingsFromFieldTrial(
AlrDetector::kStrictPacingAndProbingExperimentName);
}
if (alr_settings) {
transport->send_side_cc()->EnablePeriodicAlrProbing(true);
transport->send_side_cc()->pacer()->SetPacingFactor(
alr_settings->pacing_factor);
transport->send_side_cc()->pacer()->SetQueueTimeLimit(
alr_settings->max_paced_queue_time);
}
if (config_->periodic_alr_bandwidth_probing) {