diff --git a/modules/remote_bitrate_estimator/aimd_rate_control.cc b/modules/remote_bitrate_estimator/aimd_rate_control.cc index b625a745df..c8c7ca92fb 100644 --- a/modules/remote_bitrate_estimator/aimd_rate_control.cc +++ b/modules/remote_bitrate_estimator/aimd_rate_control.cc @@ -86,7 +86,6 @@ AimdRateControl::AimdRateControl(const FieldTrialsView* key_value_config, in_alr_(false), rtt_(kDefaultRtt), send_side_(send_side), - in_experiment_(!AdaptiveThresholdExperimentIsDisabled(*key_value_config)), no_bitrate_increase_in_alr_( IsEnabled(*key_value_config, "WebRTC-DontIncreaseDelayBasedBweInAlr")), @@ -233,7 +232,7 @@ double AimdRateControl::GetNearMaxIncreaseRateBpsPerSecond() const { // Approximate the over-use estimator delay to 100 ms. TimeDelta response_time = rtt_ + TimeDelta::Millis(100); - if (in_experiment_) + response_time = response_time * 2; double increase_rate_bps_per_second = (avg_packet_size / response_time).bps(); diff --git a/modules/remote_bitrate_estimator/aimd_rate_control.h b/modules/remote_bitrate_estimator/aimd_rate_control.h index 6c770cdc45..ce226c9f28 100644 --- a/modules/remote_bitrate_estimator/aimd_rate_control.h +++ b/modules/remote_bitrate_estimator/aimd_rate_control.h @@ -100,7 +100,6 @@ class AimdRateControl { bool in_alr_; TimeDelta rtt_; const bool send_side_; - const bool in_experiment_; // Allow the delay based estimate to only increase as long as application // limited region (alr) is not detected. const bool no_bitrate_increase_in_alr_; diff --git a/modules/remote_bitrate_estimator/overuse_detector.cc b/modules/remote_bitrate_estimator/overuse_detector.cc index 672822bbcd..bd2d756876 100644 --- a/modules/remote_bitrate_estimator/overuse_detector.cc +++ b/modules/remote_bitrate_estimator/overuse_detector.cc @@ -22,57 +22,22 @@ namespace webrtc { -const char kAdaptiveThresholdExperiment[] = "WebRTC-AdaptiveBweThreshold"; -const char kEnabledPrefix[] = "Enabled"; -const size_t kEnabledPrefixLength = sizeof(kEnabledPrefix) - 1; -const char kDisabledPrefix[] = "Disabled"; -const size_t kDisabledPrefixLength = sizeof(kDisabledPrefix) - 1; - const double kMaxAdaptOffsetMs = 15.0; const double kOverUsingTimeThreshold = 10; const int kMaxNumDeltas = 60; -bool AdaptiveThresholdExperimentIsDisabled( - const FieldTrialsView& key_value_config) { - std::string experiment_string = - key_value_config.Lookup(kAdaptiveThresholdExperiment); - const size_t kMinExperimentLength = kDisabledPrefixLength; - if (experiment_string.length() < kMinExperimentLength) - return false; - return experiment_string.substr(0, kDisabledPrefixLength) == kDisabledPrefix; -} - -// Gets thresholds from the experiment name following the format -// "WebRTC-AdaptiveBweThreshold/Enabled-0.5,0.002/". -bool ReadExperimentConstants(const FieldTrialsView& key_value_config, - double* k_up, - double* k_down) { - std::string experiment_string = - key_value_config.Lookup(kAdaptiveThresholdExperiment); - const size_t kMinExperimentLength = kEnabledPrefixLength + 3; - if (experiment_string.length() < kMinExperimentLength || - experiment_string.substr(0, kEnabledPrefixLength) != kEnabledPrefix) - return false; - return sscanf(experiment_string.substr(kEnabledPrefixLength + 1).c_str(), - "%lf,%lf", k_up, k_down) == 2; -} - OveruseDetector::OveruseDetector(const FieldTrialsView* key_value_config) // Experiment is on by default, but can be disabled with finch by setting // the field trial string to "WebRTC-AdaptiveBweThreshold/Disabled/". - : in_experiment_(!AdaptiveThresholdExperimentIsDisabled(*key_value_config)), - k_up_(0.0087), + : k_up_(0.0087), k_down_(0.039), - overusing_time_threshold_(100), + overusing_time_threshold_(kOverUsingTimeThreshold), threshold_(12.5), last_update_ms_(-1), prev_offset_(0.0), time_over_using_(-1), overuse_counter_(0), - hypothesis_(BandwidthUsage::kBwNormal) { - if (!AdaptiveThresholdExperimentIsDisabled(*key_value_config)) - InitializeExperiment(*key_value_config); -} + hypothesis_(BandwidthUsage::kBwNormal) {} OveruseDetector::~OveruseDetector() {} @@ -125,9 +90,6 @@ BandwidthUsage OveruseDetector::Detect(double offset, } void OveruseDetector::UpdateThreshold(double modified_offset, int64_t now_ms) { - if (!in_experiment_) - return; - if (last_update_ms_ == -1) last_update_ms_ = now_ms; @@ -146,15 +108,4 @@ void OveruseDetector::UpdateThreshold(double modified_offset, int64_t now_ms) { last_update_ms_ = now_ms; } -void OveruseDetector::InitializeExperiment( - const FieldTrialsView& key_value_config) { - RTC_DCHECK(in_experiment_); - double k_up = 0.0; - double k_down = 0.0; - overusing_time_threshold_ = kOverUsingTimeThreshold; - if (ReadExperimentConstants(key_value_config, &k_up, &k_down)) { - k_up_ = k_up; - k_down_ = k_down; - } -} } // namespace webrtc diff --git a/modules/remote_bitrate_estimator/overuse_detector.h b/modules/remote_bitrate_estimator/overuse_detector.h index dfaea9187a..07ae8734c4 100644 --- a/modules/remote_bitrate_estimator/overuse_detector.h +++ b/modules/remote_bitrate_estimator/overuse_detector.h @@ -17,9 +17,6 @@ namespace webrtc { -bool AdaptiveThresholdExperimentIsDisabled( - const FieldTrialsView& key_value_config); - class OveruseDetector { public: explicit OveruseDetector(const FieldTrialsView* key_value_config); @@ -46,10 +43,9 @@ class OveruseDetector { void UpdateThreshold(double modified_offset, int64_t now_ms); void InitializeExperiment(const FieldTrialsView& key_value_config); - bool in_experiment_; - double k_up_; - double k_down_; - double overusing_time_threshold_; + const double k_up_; + const double k_down_; + const double overusing_time_threshold_; double threshold_; int64_t last_update_ms_; double prev_offset_; diff --git a/modules/remote_bitrate_estimator/overuse_detector_unittest.cc b/modules/remote_bitrate_estimator/overuse_detector_unittest.cc index 8420af96a1..e91d4f0d22 100644 --- a/modules/remote_bitrate_estimator/overuse_detector_unittest.cc +++ b/modules/remote_bitrate_estimator/overuse_detector_unittest.cc @@ -21,7 +21,6 @@ #include "modules/remote_bitrate_estimator/inter_arrival.h" #include "modules/remote_bitrate_estimator/overuse_estimator.h" #include "rtc_base/random.h" -#include "test/field_trial.h" #include "test/gtest.h" namespace webrtc { @@ -218,69 +217,6 @@ TEST_F(OveruseDetectorTest, SimpleOveruse100kbit10fps) { EXPECT_EQ(7, frames_until_overuse); } -TEST_F(OveruseDetectorTest, DISABLED_OveruseWithHighVariance100Kbit10fps) { - uint32_t frame_duration_ms = 100; - uint32_t drift_per_frame_ms = 10; - uint32_t rtp_timestamp = frame_duration_ms * 90; - size_t packet_size = 1200; - int offset = 10; - - // Run 1000 samples to reach steady state. - for (int i = 0; i < 1000; ++i) { - UpdateDetector(rtp_timestamp, now_ms_, packet_size); - rtp_timestamp += frame_duration_ms * 90; - if (i % 2) { - offset = random_.Rand(0, 49); - now_ms_ += frame_duration_ms - offset; - } else { - now_ms_ += frame_duration_ms + offset; - } - EXPECT_EQ(BandwidthUsage::kBwNormal, overuse_detector_->State()); - } - // Simulate a higher send pace, that is too high. - // Above noise generate a standard deviation of approximately 28 ms. - // Total build up of 150 ms. - for (int j = 0; j < 15; ++j) { - UpdateDetector(rtp_timestamp, now_ms_, packet_size); - now_ms_ += frame_duration_ms + drift_per_frame_ms; - rtp_timestamp += frame_duration_ms * 90; - EXPECT_EQ(BandwidthUsage::kBwNormal, overuse_detector_->State()); - } - UpdateDetector(rtp_timestamp, now_ms_, packet_size); - EXPECT_EQ(BandwidthUsage::kBwOverusing, overuse_detector_->State()); -} - -TEST_F(OveruseDetectorTest, DISABLED_OveruseWithLowVariance100Kbit10fps) { - uint32_t frame_duration_ms = 100; - uint32_t drift_per_frame_ms = 1; - uint32_t rtp_timestamp = frame_duration_ms * 90; - size_t packet_size = 1200; - int offset = 10; - - // Run 1000 samples to reach steady state. - for (int i = 0; i < 1000; ++i) { - UpdateDetector(rtp_timestamp, now_ms_, packet_size); - rtp_timestamp += frame_duration_ms * 90; - if (i % 2) { - offset = random_.Rand(0, 1); - now_ms_ += frame_duration_ms - offset; - } else { - now_ms_ += frame_duration_ms + offset; - } - EXPECT_EQ(BandwidthUsage::kBwNormal, overuse_detector_->State()); - } - // Simulate a higher send pace, that is too high. - // Total build up of 6 ms. - for (int j = 0; j < 6; ++j) { - UpdateDetector(rtp_timestamp, now_ms_, packet_size); - now_ms_ += frame_duration_ms + drift_per_frame_ms; - rtp_timestamp += frame_duration_ms * 90; - EXPECT_EQ(BandwidthUsage::kBwNormal, overuse_detector_->State()); - } - UpdateDetector(rtp_timestamp, now_ms_, packet_size); - EXPECT_EQ(BandwidthUsage::kBwOverusing, overuse_detector_->State()); -} - TEST_F(OveruseDetectorTest, OveruseWithLowVariance2000Kbit30fps) { uint32_t frame_duration_ms = 33; uint32_t drift_per_frame_ms = 1; @@ -322,13 +258,7 @@ TEST_F(OveruseDetectorTest, OveruseWithLowVariance2000Kbit30fps) { EXPECT_EQ(BandwidthUsage::kBwOverusing, overuse_detector_->State()); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_LowGaussianVariance30Kbit3fps \ - DISABLED_LowGaussianVariance30Kbit3fps -#else -#define MAYBE_LowGaussianVariance30Kbit3fps LowGaussianVariance30Kbit3fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance30Kbit3fps) { +TEST_F(OveruseDetectorTest, LowGaussianVariance30Kbit3fps) { size_t packet_size = 1200; int packets_per_frame = 1; int frame_duration_ms = 333; @@ -388,13 +318,7 @@ TEST_F(OveruseDetectorTest, HighGaussianVarianceFastDrift30Kbit3fps) { EXPECT_EQ(4, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_LowGaussianVariance100Kbit5fps \ - DISABLED_LowGaussianVariance100Kbit5fps -#else -#define MAYBE_LowGaussianVariance100Kbit5fps LowGaussianVariance100Kbit5fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance100Kbit5fps) { +TEST_F(OveruseDetectorTest, LowGaussianVariance100Kbit5fps) { size_t packet_size = 1200; int packets_per_frame = 2; int frame_duration_ms = 200; @@ -409,13 +333,7 @@ TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance100Kbit5fps) { EXPECT_EQ(20, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_HighGaussianVariance100Kbit5fps \ - DISABLED_HighGaussianVariance100Kbit5fps -#else -#define MAYBE_HighGaussianVariance100Kbit5fps HighGaussianVariance100Kbit5fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_HighGaussianVariance100Kbit5fps) { +TEST_F(OveruseDetectorTest, HighGaussianVariance100Kbit5fps) { size_t packet_size = 1200; int packets_per_frame = 2; int frame_duration_ms = 200; @@ -430,13 +348,7 @@ TEST_F(OveruseDetectorTest, MAYBE_HighGaussianVariance100Kbit5fps) { EXPECT_EQ(44, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_LowGaussianVariance100Kbit10fps \ - DISABLED_LowGaussianVariance100Kbit10fps -#else -#define MAYBE_LowGaussianVariance100Kbit10fps LowGaussianVariance100Kbit10fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance100Kbit10fps) { +TEST_F(OveruseDetectorTest, LowGaussianVariance100Kbit10fps) { size_t packet_size = 1200; int packets_per_frame = 1; int frame_duration_ms = 100; @@ -451,13 +363,7 @@ TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance100Kbit10fps) { EXPECT_EQ(20, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_HighGaussianVariance100Kbit10fps \ - DISABLED_HighGaussianVariance100Kbit10fps -#else -#define MAYBE_HighGaussianVariance100Kbit10fps HighGaussianVariance100Kbit10fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_HighGaussianVariance100Kbit10fps) { +TEST_F(OveruseDetectorTest, HighGaussianVariance100Kbit10fps) { size_t packet_size = 1200; int packets_per_frame = 1; int frame_duration_ms = 100; @@ -472,13 +378,7 @@ TEST_F(OveruseDetectorTest, MAYBE_HighGaussianVariance100Kbit10fps) { EXPECT_EQ(44, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_LowGaussianVariance300Kbit30fps \ - DISABLED_LowGaussianVariance300Kbit30fps -#else -#define MAYBE_LowGaussianVariance300Kbit30fps LowGaussianVariance300Kbit30fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance300Kbit30fps) { +TEST_F(OveruseDetectorTest, LowGaussianVariance300Kbit30fps) { size_t packet_size = 1200; int packets_per_frame = 1; int frame_duration_ms = 33; @@ -538,13 +438,7 @@ TEST_F(OveruseDetectorTest, HighGaussianVarianceFastDrift300Kbit30fps) { EXPECT_EQ(10, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_LowGaussianVariance1000Kbit30fps \ - DISABLED_LowGaussianVariance1000Kbit30fps -#else -#define MAYBE_LowGaussianVariance1000Kbit30fps LowGaussianVariance1000Kbit30fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance1000Kbit30fps) { +TEST_F(OveruseDetectorTest, LowGaussianVariance1000Kbit30fps) { size_t packet_size = 1200; int packets_per_frame = 3; int frame_duration_ms = 33; @@ -604,13 +498,7 @@ TEST_F(OveruseDetectorTest, HighGaussianVarianceFastDrift1000Kbit30fps) { EXPECT_EQ(10, frames_until_overuse); } -#if defined(WEBRTC_ANDROID) -#define MAYBE_LowGaussianVariance2000Kbit30fps \ - DISABLED_LowGaussianVariance2000Kbit30fps -#else -#define MAYBE_LowGaussianVariance2000Kbit30fps LowGaussianVariance2000Kbit30fps -#endif -TEST_F(OveruseDetectorTest, MAYBE_LowGaussianVariance2000Kbit30fps) { +TEST_F(OveruseDetectorTest, LowGaussianVariance2000Kbit30fps) { size_t packet_size = 1200; int packets_per_frame = 6; int frame_duration_ms = 33; @@ -670,22 +558,7 @@ TEST_F(OveruseDetectorTest, HighGaussianVarianceFastDrift2000Kbit30fps) { EXPECT_EQ(10, frames_until_overuse); } -class OveruseDetectorExperimentTest : public OveruseDetectorTest { - public: - OveruseDetectorExperimentTest() - : override_field_trials_( - "WebRTC-AdaptiveBweThreshold/Enabled-0.01,0.00018/") {} - - protected: - void SetUp() override { - overuse_detector_.reset(new OveruseDetector(&field_trials_)); - } - - test::ScopedFieldTrials override_field_trials_; - const FieldTrialBasedConfig field_trials_; -}; - -TEST_F(OveruseDetectorExperimentTest, ThresholdAdapts) { +TEST_F(OveruseDetectorTest, ThresholdAdapts) { const double kOffset = 0.21; double kTsDelta = 3000.0; int64_t now_ms = 0; @@ -756,7 +629,7 @@ TEST_F(OveruseDetectorExperimentTest, ThresholdAdapts) { EXPECT_TRUE(overuse_detected); } -TEST_F(OveruseDetectorExperimentTest, DoesntAdaptToSpikes) { +TEST_F(OveruseDetectorTest, DoesntAdaptToSpikes) { const double kOffset = 1.0; const double kLargeOffset = 20.0; double kTsDelta = 3000.0;