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:
parent
cf189c60d2
commit
d7a418f93a
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user