Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1037)

Side by Side Diff: webrtc/modules/congestion_controller/delay_based_bwe.cc

Issue 2749803002: Enable the bayesian bitrate estimator by default. (Closed)
Patch Set: AppRTC fixes. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 constexpr size_t kDefaultTrendlineWindowSize = 15; 45 constexpr size_t kDefaultTrendlineWindowSize = 15;
46 constexpr double kDefaultTrendlineSmoothingCoeff = 0.9; 46 constexpr double kDefaultTrendlineSmoothingCoeff = 0.9;
47 constexpr double kDefaultTrendlineThresholdGain = 4.0; 47 constexpr double kDefaultTrendlineThresholdGain = 4.0;
48 48
49 // Parameters for Theil-Sen robust fitting of line to noisy data. 49 // Parameters for Theil-Sen robust fitting of line to noisy data.
50 constexpr size_t kDefaultMedianSlopeWindowSize = 20; 50 constexpr size_t kDefaultMedianSlopeWindowSize = 20;
51 constexpr double kDefaultMedianSlopeThresholdGain = 4.0; 51 constexpr double kDefaultMedianSlopeThresholdGain = 4.0;
52 52
53 constexpr int kMaxConsecutiveFailedLookups = 5; 53 constexpr int kMaxConsecutiveFailedLookups = 5;
54 54
55 const char kBitrateEstimateExperiment[] = "WebRTC-ImprovedBitrateEstimate";
56 const char kBweTrendlineFilterExperiment[] = "WebRTC-BweTrendlineFilter"; 55 const char kBweTrendlineFilterExperiment[] = "WebRTC-BweTrendlineFilter";
57 const char kBweMedianSlopeFilterExperiment[] = "WebRTC-BweMedianSlopeFilter"; 56 const char kBweMedianSlopeFilterExperiment[] = "WebRTC-BweMedianSlopeFilter";
58 57
59 bool BitrateEstimateExperimentIsEnabled() {
60 return webrtc::field_trial::IsEnabled(kBitrateEstimateExperiment);
61 }
62
63 bool TrendlineFilterExperimentIsEnabled() { 58 bool TrendlineFilterExperimentIsEnabled() {
64 std::string experiment_string = 59 std::string experiment_string =
65 webrtc::field_trial::FindFullName(kBweTrendlineFilterExperiment); 60 webrtc::field_trial::FindFullName(kBweTrendlineFilterExperiment);
66 // The experiment is enabled iff the field trial string begins with "Enabled". 61 // The experiment is enabled iff the field trial string begins with "Enabled".
67 return experiment_string.find("Enabled") == 0; 62 return experiment_string.find("Enabled") == 0;
68 } 63 }
69 64
70 bool MedianSlopeFilterExperimentIsEnabled() { 65 bool MedianSlopeFilterExperimentIsEnabled() {
71 std::string experiment_string = 66 std::string experiment_string =
72 webrtc::field_trial::FindFullName(kBweMedianSlopeFilterExperiment); 67 webrtc::field_trial::FindFullName(kBweMedianSlopeFilterExperiment);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 } 141 }
147 } // namespace 142 } // namespace
148 143
149 namespace webrtc { 144 namespace webrtc {
150 145
151 DelayBasedBwe::BitrateEstimator::BitrateEstimator() 146 DelayBasedBwe::BitrateEstimator::BitrateEstimator()
152 : sum_(0), 147 : sum_(0),
153 current_win_ms_(0), 148 current_win_ms_(0),
154 prev_time_ms_(-1), 149 prev_time_ms_(-1),
155 bitrate_estimate_(-1.0f), 150 bitrate_estimate_(-1.0f),
156 bitrate_estimate_var_(50.0f), 151 bitrate_estimate_var_(50.0f) {}
157 old_estimator_(kBitrateWindowMs, 8000),
158 in_experiment_(BitrateEstimateExperimentIsEnabled()) {}
159 152
160 void DelayBasedBwe::BitrateEstimator::Update(int64_t now_ms, int bytes) { 153 void DelayBasedBwe::BitrateEstimator::Update(int64_t now_ms, int bytes) {
161 if (!in_experiment_) {
162 old_estimator_.Update(bytes, now_ms);
163 rtc::Optional<uint32_t> rate = old_estimator_.Rate(now_ms);
164 bitrate_estimate_ = -1.0f;
165 if (rate)
166 bitrate_estimate_ = *rate / 1000.0f;
167 return;
168 }
169 int rate_window_ms = kRateWindowMs; 154 int rate_window_ms = kRateWindowMs;
170 // We use a larger window at the beginning to get a more stable sample that 155 // We use a larger window at the beginning to get a more stable sample that
171 // we can use to initialize the estimate. 156 // we can use to initialize the estimate.
172 if (bitrate_estimate_ < 0.f) 157 if (bitrate_estimate_ < 0.f)
173 rate_window_ms = kInitialRateWindowMs; 158 rate_window_ms = kInitialRateWindowMs;
174 float bitrate_sample = UpdateWindow(now_ms, bytes, rate_window_ms); 159 float bitrate_sample = UpdateWindow(now_ms, bytes, rate_window_ms);
175 if (bitrate_sample < 0.0f) 160 if (bitrate_sample < 0.0f)
176 return; 161 return;
177 if (bitrate_estimate_ < 0.0f) { 162 if (bitrate_estimate_ < 0.0f) {
178 // This is the very first sample we get. Use it to initialize the estimate. 163 // This is the very first sample we get. Use it to initialize the estimate.
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 void DelayBasedBwe::SetMinBitrate(int min_bitrate_bps) { 464 void DelayBasedBwe::SetMinBitrate(int min_bitrate_bps) {
480 // Called from both the configuration thread and the network thread. Shouldn't 465 // Called from both the configuration thread and the network thread. Shouldn't
481 // be called from the network thread in the future. 466 // be called from the network thread in the future.
482 rate_control_.SetMinBitrate(min_bitrate_bps); 467 rate_control_.SetMinBitrate(min_bitrate_bps);
483 } 468 }
484 469
485 int64_t DelayBasedBwe::GetProbingIntervalMs() const { 470 int64_t DelayBasedBwe::GetProbingIntervalMs() const {
486 return probing_interval_estimator_.GetIntervalMs(); 471 return probing_interval_estimator_.GetIntervalMs();
487 } 472 }
488 } // namespace webrtc 473 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698