/* * Copyright 2018 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "rtc_base/experiments/congestion_controller_experiment.h" #include #include "system_wrappers/include/field_trial.h" namespace webrtc { namespace { const char kBbrControllerExperiment[] = "WebRTC-BweCongestionController"; } // namespace bool CongestionControllerExperiment::BbrControllerEnabled() { std::string trial_string = webrtc::field_trial::FindFullName(kBbrControllerExperiment); return trial_string.find("Enabled,BBR") == 0; } rtc::Optional CongestionControllerExperiment::GetBbrExperimentConfig() { if (!BbrControllerEnabled()) return rtc::nullopt; std::string trial_string = webrtc::field_trial::FindFullName(kBbrControllerExperiment); BbrExperimentConfig config; if (sscanf( trial_string.c_str(), "Enabled,BBR," "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d," "%lf,%lf,%lf,%lf,%lf,%lf", &config.exit_startup_on_loss, &config.exit_startup_rtt_threshold_ms, &config.fully_drain_queue, &config.initial_conservation_in_startup, &config.num_startup_rtts, &config.probe_rtt_based_on_bdp, &config.probe_rtt_disabled_if_app_limited, &config.probe_rtt_skipped_if_similar_rtt, &config.rate_based_recovery, &config.rate_based_startup, &config.slower_startup, &config.encoder_rate_gain, &config.encoder_rate_gain_in_probe_rtt, &config.max_ack_height_window_multiplier, &config.max_aggregation_bytes_multiplier, &config.probe_bw_pacing_gain_offset, &config.probe_rtt_congestion_window_gain) == 17) { return config; } else { return rtc::nullopt; } } } // namespace webrtc