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

Side by Side Diff: webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc

Issue 2201093006: Tune BWE to be more sensitive on low capacity networks. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Tests passing. Created 4 years, 4 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) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 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 10 matching lines...) Expand all
21 #include "webrtc/base/arraysize.h" 21 #include "webrtc/base/arraysize.h"
22 #include "webrtc/base/common.h" 22 #include "webrtc/base/common.h"
23 #include "webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h" 23 #include "webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h"
24 #include "webrtc/modules/remote_bitrate_estimator/test/bwe_test_logging.h" 24 #include "webrtc/modules/remote_bitrate_estimator/test/bwe_test_logging.h"
25 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" 25 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h"
26 26
27 namespace webrtc { 27 namespace webrtc {
28 namespace testing { 28 namespace testing {
29 namespace bwe { 29 namespace bwe {
30 30
31 namespace {
32 // Used as an upper bound for calling AcceleratedRampDown.
33 const float kMaxCongestionSignalMs =
34 40.0f + NadaBweSender::kMinNadaBitrateKbps / 15;
35 } // namespace
36
37 const int NadaBweSender::kMinNadaBitrateKbps = 50;
31 const int64_t NadaBweReceiver::kReceivingRateTimeWindowMs = 500; 38 const int64_t NadaBweReceiver::kReceivingRateTimeWindowMs = 500;
32 39
33 NadaBweReceiver::NadaBweReceiver(int flow_id) 40 NadaBweReceiver::NadaBweReceiver(int flow_id)
34 : BweReceiver(flow_id, kReceivingRateTimeWindowMs), 41 : BweReceiver(flow_id, kReceivingRateTimeWindowMs),
35 clock_(0), 42 clock_(0),
36 last_feedback_ms_(0), 43 last_feedback_ms_(0),
37 recv_stats_(ReceiveStatistics::Create(&clock_)), 44 recv_stats_(ReceiveStatistics::Create(&clock_)),
38 baseline_delay_ms_(10000), // Initialized as an upper bound. 45 baseline_delay_ms_(10000), // Initialized as an upper bound.
39 delay_signal_ms_(0), 46 delay_signal_ms_(0),
40 last_congestion_signal_ms_(0), 47 last_congestion_signal_ms_(0),
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 160
154 // Implementation according to Cisco's proposal by default. 161 // Implementation according to Cisco's proposal by default.
155 NadaBweSender::NadaBweSender(int kbps, BitrateObserver* observer, Clock* clock) 162 NadaBweSender::NadaBweSender(int kbps, BitrateObserver* observer, Clock* clock)
156 : BweSender(kbps), // Referred as "Reference Rate" = R_n., 163 : BweSender(kbps), // Referred as "Reference Rate" = R_n.,
157 clock_(clock), 164 clock_(clock),
158 observer_(observer), 165 observer_(observer),
159 original_operating_mode_(true) { 166 original_operating_mode_(true) {
160 } 167 }
161 168
162 NadaBweSender::NadaBweSender(BitrateObserver* observer, Clock* clock) 169 NadaBweSender::NadaBweSender(BitrateObserver* observer, Clock* clock)
163 : BweSender(kMinBitrateKbps), // Referred as "Reference Rate" = R_n. 170 : BweSender(kMinNadaBitrateKbps), // Referred as "Reference Rate" = R_n.
164 clock_(clock), 171 clock_(clock),
165 observer_(observer), 172 observer_(observer),
166 original_operating_mode_(true) { 173 original_operating_mode_(true) {}
167 }
168 174
169 NadaBweSender::~NadaBweSender() { 175 NadaBweSender::~NadaBweSender() {
170 } 176 }
171 177
172 int NadaBweSender::GetFeedbackIntervalMs() const { 178 int NadaBweSender::GetFeedbackIntervalMs() const {
173 return 100; 179 return 100;
174 } 180 }
175 181
176 void NadaBweSender::GiveFeedback(const FeedbackPacket& feedback) { 182 void NadaBweSender::GiveFeedback(const FeedbackPacket& feedback) {
177 const NadaFeedback& fb = static_cast<const NadaFeedback&>(feedback); 183 const NadaFeedback& fb = static_cast<const NadaFeedback&>(feedback);
(...skipping 28 matching lines...) Expand all
206 fb.derivative() < kDerivativeUpperBound) { 212 fb.derivative() < kDerivativeUpperBound) {
207 AcceleratedRampUp(fb); 213 AcceleratedRampUp(fb);
208 } else { 214 } else {
209 GradualRateUpdate(fb, delta_s, 1.0); 215 GradualRateUpdate(fb, delta_s, 1.0);
210 } 216 }
211 } else { 217 } else {
212 // Modified if conditions and rate update; new ramp down mode. 218 // Modified if conditions and rate update; new ramp down mode.
213 if (fb.congestion_signal() == fb.est_queuing_delay_signal_ms() && 219 if (fb.congestion_signal() == fb.est_queuing_delay_signal_ms() &&
214 fb.est_queuing_delay_signal_ms() < kQueuingDelayUpperBoundMs && 220 fb.est_queuing_delay_signal_ms() < kQueuingDelayUpperBoundMs &&
215 fb.exp_smoothed_delay_ms() < 221 fb.exp_smoothed_delay_ms() <
216 kMinBitrateKbps / kProportionalityDelayBits && 222 kMinNadaBitrateKbps / kProportionalityDelayBits &&
217 fb.derivative() < kDerivativeUpperBound && 223 fb.derivative() < kDerivativeUpperBound &&
218 fb.receiving_rate() > kMinBitrateKbps) { 224 fb.receiving_rate() > kMinNadaBitrateKbps) {
219 AcceleratedRampUp(fb); 225 AcceleratedRampUp(fb);
220 } else if (fb.congestion_signal() > kMaxCongestionSignalMs || 226 } else if (fb.congestion_signal() > kMaxCongestionSignalMs ||
221 fb.exp_smoothed_delay_ms() > kMaxCongestionSignalMs) { 227 fb.exp_smoothed_delay_ms() > kMaxCongestionSignalMs) {
222 AcceleratedRampDown(fb); 228 AcceleratedRampDown(fb);
223 } else { 229 } else {
224 double bitrate_reference = 230 double bitrate_reference =
225 (2.0 * bitrate_kbps_) / (kMaxBitrateKbps + kMinBitrateKbps); 231 (2.0 * bitrate_kbps_) / (kMaxBitrateKbps + kMinNadaBitrateKbps);
226 double smoothing_factor = pow(bitrate_reference, 0.75); 232 double smoothing_factor = pow(bitrate_reference, 0.75);
227 GradualRateUpdate(fb, delta_s, smoothing_factor); 233 GradualRateUpdate(fb, delta_s, smoothing_factor);
228 } 234 }
229 } 235 }
230 236
231 bitrate_kbps_ = std::min(bitrate_kbps_, kMaxBitrateKbps); 237 bitrate_kbps_ = std::min(bitrate_kbps_, kMaxBitrateKbps);
232 bitrate_kbps_ = std::max(bitrate_kbps_, kMinBitrateKbps); 238 bitrate_kbps_ = std::max(bitrate_kbps_, kMinNadaBitrateKbps);
233 239
234 observer_->OnNetworkChanged(1000 * bitrate_kbps_, 0, rtt_ms); 240 observer_->OnNetworkChanged(1000 * bitrate_kbps_, 0, rtt_ms);
235 } 241 }
236 242
237 int64_t NadaBweSender::TimeUntilNextProcess() { 243 int64_t NadaBweSender::TimeUntilNextProcess() {
238 return 100; 244 return 100;
239 } 245 }
240 246
241 void NadaBweSender::Process() { 247 void NadaBweSender::Process() {
242 } 248 }
(...skipping 21 matching lines...) Expand all
264 float delta_s, 270 float delta_s,
265 double smoothing_factor) { 271 double smoothing_factor) {
266 const float kTauOMs = 500.0f; // Referred as tau_o. 272 const float kTauOMs = 500.0f; // Referred as tau_o.
267 const float kEta = 2.0f; // Referred as eta. 273 const float kEta = 2.0f; // Referred as eta.
268 const float kKappa = 1.0f; // Referred as kappa. 274 const float kKappa = 1.0f; // Referred as kappa.
269 const float kReferenceDelayMs = 10.0f; // Referred as x_ref. 275 const float kReferenceDelayMs = 10.0f; // Referred as x_ref.
270 const float kPriorityWeight = 1.0f; // Referred as w. 276 const float kPriorityWeight = 1.0f; // Referred as w.
271 277
272 float x_hat = fb.congestion_signal() + kEta * kTauOMs * fb.derivative(); 278 float x_hat = fb.congestion_signal() + kEta * kTauOMs * fb.derivative();
273 279
274 float kTheta = 280 float kTheta = kPriorityWeight * (kMaxBitrateKbps - kMinNadaBitrateKbps) *
275 kPriorityWeight * (kMaxBitrateKbps - kMinBitrateKbps) * kReferenceDelayMs; 281 kReferenceDelayMs;
276 282
277 int original_increase = 283 int original_increase = static_cast<int>(
278 static_cast<int>((kKappa * delta_s * 284 (kKappa * delta_s *
279 (kTheta - (bitrate_kbps_ - kMinBitrateKbps) * x_hat)) / 285 (kTheta - (bitrate_kbps_ - kMinNadaBitrateKbps) * x_hat)) /
280 (kTauOMs * kTauOMs) + 286 (kTauOMs * kTauOMs) +
281 0.5f); 287 0.5f);
282 288
283 bitrate_kbps_ = bitrate_kbps_ + smoothing_factor * original_increase; 289 bitrate_kbps_ = bitrate_kbps_ + smoothing_factor * original_increase;
284 } 290 }
285 291
286 } // namespace bwe 292 } // namespace bwe
287 } // namespace testing 293 } // namespace testing
288 } // namespace webrtc 294 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698