| OLD | NEW |
| 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 private: | 163 private: |
| 164 // Arbitrary values, won't change these test results. | 164 // Arbitrary values, won't change these test results. |
| 165 static const int kFlowId = 2; | 165 static const int kFlowId = 2; |
| 166 static const int64_t kNowMs = 1000; | 166 static const int64_t kNowMs = 1000; |
| 167 }; | 167 }; |
| 168 | 168 |
| 169 // Verify if AcceleratedRampUp is called and that bitrate increases. | 169 // Verify if AcceleratedRampUp is called and that bitrate increases. |
| 170 TEST_F(NadaSenderSideTest, AcceleratedRampUp) { | 170 TEST_F(NadaSenderSideTest, AcceleratedRampUp) { |
| 171 const int64_t kRefSignalMs = 1; | 171 const int64_t kRefSignalMs = 1; |
| 172 const int64_t kOneWayDelayMs = 50; | 172 const int64_t kOneWayDelayMs = 50; |
| 173 int original_bitrate = 2 * kMinBitrateKbps; | 173 int original_bitrate = 2 * NadaBweSender::kMinNadaBitrateKbps; |
| 174 size_t receiving_rate = static_cast<size_t>(original_bitrate); | 174 size_t receiving_rate = static_cast<size_t>(original_bitrate); |
| 175 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; | 175 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; |
| 176 | 176 |
| 177 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( | 177 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( |
| 178 receiving_rate, kRefSignalMs, send_time_ms); | 178 receiving_rate, kRefSignalMs, send_time_ms); |
| 179 | 179 |
| 180 nada_sender_.set_original_operating_mode(true); | 180 nada_sender_.set_original_operating_mode(true); |
| 181 nada_sender_.set_bitrate_kbps(original_bitrate); | 181 nada_sender_.set_bitrate_kbps(original_bitrate); |
| 182 | 182 |
| 183 // Trigger AcceleratedRampUp mode. | 183 // Trigger AcceleratedRampUp mode. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 195 nada_sender_.GiveFeedback(not_congested_fb); | 195 nada_sender_.GiveFeedback(not_congested_fb); |
| 196 bitrate_1_kbps = nada_sender_.bitrate_kbps(); | 196 bitrate_1_kbps = nada_sender_.bitrate_kbps(); |
| 197 EXPECT_GT(bitrate_1_kbps, original_bitrate); | 197 EXPECT_GT(bitrate_1_kbps, original_bitrate); |
| 198 nada_sender_.AcceleratedRampUp(not_congested_fb); | 198 nada_sender_.AcceleratedRampUp(not_congested_fb); |
| 199 EXPECT_EQ(nada_sender_.bitrate_kbps(), bitrate_1_kbps); | 199 EXPECT_EQ(nada_sender_.bitrate_kbps(), bitrate_1_kbps); |
| 200 } | 200 } |
| 201 | 201 |
| 202 // Verify if AcceleratedRampDown is called and if bitrate decreases. | 202 // Verify if AcceleratedRampDown is called and if bitrate decreases. |
| 203 TEST_F(NadaSenderSideTest, AcceleratedRampDown) { | 203 TEST_F(NadaSenderSideTest, AcceleratedRampDown) { |
| 204 const int64_t kOneWayDelayMs = 50; | 204 const int64_t kOneWayDelayMs = 50; |
| 205 int original_bitrate = 3 * kMinBitrateKbps; | 205 int original_bitrate = 3 * NadaBweSender::kMinNadaBitrateKbps; |
| 206 size_t receiving_rate = static_cast<size_t>(original_bitrate); | 206 size_t receiving_rate = static_cast<size_t>(original_bitrate); |
| 207 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; | 207 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; |
| 208 | 208 |
| 209 NadaFeedback congested_fb = | 209 NadaFeedback congested_fb = |
| 210 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); | 210 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); |
| 211 | 211 |
| 212 nada_sender_.set_original_operating_mode(false); | 212 nada_sender_.set_original_operating_mode(false); |
| 213 nada_sender_.set_bitrate_kbps(original_bitrate); | 213 nada_sender_.set_bitrate_kbps(original_bitrate); |
| 214 nada_sender_.GiveFeedback(congested_fb); // Trigger AcceleratedRampDown mode. | 214 nada_sender_.GiveFeedback(congested_fb); // Trigger AcceleratedRampDown mode. |
| 215 int bitrate_1_kbps = nada_sender_.bitrate_kbps(); | 215 int bitrate_1_kbps = nada_sender_.bitrate_kbps(); |
| 216 EXPECT_LE(bitrate_1_kbps, original_bitrate * 0.9f + 0.5f); | 216 EXPECT_LE(bitrate_1_kbps, original_bitrate * 0.9f + 0.5f); |
| 217 EXPECT_LT(bitrate_1_kbps, original_bitrate); | 217 EXPECT_LT(bitrate_1_kbps, original_bitrate); |
| 218 | 218 |
| 219 // Updates the bitrate according to the receiving rate and other constant | 219 // Updates the bitrate according to the receiving rate and other constant |
| 220 // parameters. | 220 // parameters. |
| 221 nada_sender_.AcceleratedRampDown(congested_fb); | 221 nada_sender_.AcceleratedRampDown(congested_fb); |
| 222 int bitrate_2_kbps = std::max(nada_sender_.bitrate_kbps(), kMinBitrateKbps); | 222 int bitrate_2_kbps = |
| 223 std::max(nada_sender_.bitrate_kbps(), NadaBweSender::kMinNadaBitrateKbps); |
| 223 EXPECT_EQ(bitrate_2_kbps, bitrate_1_kbps); | 224 EXPECT_EQ(bitrate_2_kbps, bitrate_1_kbps); |
| 224 } | 225 } |
| 225 | 226 |
| 226 TEST_F(NadaSenderSideTest, GradualRateUpdate) { | 227 TEST_F(NadaSenderSideTest, GradualRateUpdate) { |
| 227 const int64_t kDeltaSMs = 20; | 228 const int64_t kDeltaSMs = 20; |
| 228 const int64_t kRefSignalMs = 20; | 229 const int64_t kRefSignalMs = 20; |
| 229 const int64_t kOneWayDelayMs = 50; | 230 const int64_t kOneWayDelayMs = 50; |
| 230 int original_bitrate = 2 * kMinBitrateKbps; | 231 int original_bitrate = 2 * NadaBweSender::kMinNadaBitrateKbps; |
| 231 size_t receiving_rate = static_cast<size_t>(original_bitrate); | 232 size_t receiving_rate = static_cast<size_t>(original_bitrate); |
| 232 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; | 233 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; |
| 233 | 234 |
| 234 NadaFeedback congested_fb = | 235 NadaFeedback congested_fb = |
| 235 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); | 236 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); |
| 236 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( | 237 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( |
| 237 original_bitrate, kRefSignalMs, send_time_ms); | 238 original_bitrate, kRefSignalMs, send_time_ms); |
| 238 | 239 |
| 239 nada_sender_.set_bitrate_kbps(original_bitrate); | 240 nada_sender_.set_bitrate_kbps(original_bitrate); |
| 240 double smoothing_factor = 0.0; | 241 double smoothing_factor = 0.0; |
| 241 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor); | 242 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor); |
| 242 EXPECT_EQ(nada_sender_.bitrate_kbps(), original_bitrate); | 243 EXPECT_EQ(nada_sender_.bitrate_kbps(), original_bitrate); |
| 243 | 244 |
| 244 smoothing_factor = 1.0; | 245 smoothing_factor = 1.0; |
| 245 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor); | 246 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor); |
| 246 EXPECT_LT(nada_sender_.bitrate_kbps(), original_bitrate); | 247 EXPECT_LT(nada_sender_.bitrate_kbps(), original_bitrate); |
| 247 | 248 |
| 248 nada_sender_.set_bitrate_kbps(original_bitrate); | 249 nada_sender_.set_bitrate_kbps(original_bitrate); |
| 249 nada_sender_.GradualRateUpdate(not_congested_fb, kDeltaSMs, smoothing_factor); | 250 nada_sender_.GradualRateUpdate(not_congested_fb, kDeltaSMs, smoothing_factor); |
| 250 EXPECT_GT(nada_sender_.bitrate_kbps(), original_bitrate); | 251 EXPECT_GT(nada_sender_.bitrate_kbps(), original_bitrate); |
| 251 } | 252 } |
| 252 | 253 |
| 253 // Sending bitrate should decrease and reach its Min bound. | 254 // Sending bitrate should decrease and reach its Min bound. |
| 254 TEST_F(NadaSenderSideTest, VeryLowBandwith) { | 255 TEST_F(NadaSenderSideTest, VeryLowBandwith) { |
| 255 const int64_t kOneWayDelayMs = 50; | 256 const int64_t kOneWayDelayMs = 50; |
| 256 | 257 |
| 257 size_t receiving_rate = static_cast<size_t>(kMinBitrateKbps); | 258 size_t receiving_rate = |
| 259 static_cast<size_t>(NadaBweSender::kMinNadaBitrateKbps); |
| 258 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; | 260 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; |
| 259 | 261 |
| 260 NadaFeedback extremely_congested_fb = | 262 NadaFeedback extremely_congested_fb = |
| 261 NadaFbGenerator::ExtremelyCongestedFb(receiving_rate, send_time_ms); | 263 NadaFbGenerator::ExtremelyCongestedFb(receiving_rate, send_time_ms); |
| 262 NadaFeedback congested_fb = | 264 NadaFeedback congested_fb = |
| 263 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); | 265 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); |
| 264 | 266 |
| 265 nada_sender_.set_bitrate_kbps(5 * kMinBitrateKbps); | 267 nada_sender_.set_bitrate_kbps(5 * NadaBweSender::kMinNadaBitrateKbps); |
| 266 nada_sender_.set_original_operating_mode(true); | 268 nada_sender_.set_original_operating_mode(true); |
| 267 for (int i = 0; i < 100; ++i) { | 269 for (int i = 0; i < 100; ++i) { |
| 268 // Trigger GradualRateUpdate mode. | 270 // Trigger GradualRateUpdate mode. |
| 269 nada_sender_.GiveFeedback(extremely_congested_fb); | 271 nada_sender_.GiveFeedback(extremely_congested_fb); |
| 270 } | 272 } |
| 271 // The original implementation doesn't allow the bitrate to stay at kMin, | 273 // The original implementation doesn't allow the bitrate to stay at kMin, |
| 272 // even if the congestion signal is very high. | 274 // even if the congestion signal is very high. |
| 273 EXPECT_GE(nada_sender_.bitrate_kbps(), kMinBitrateKbps); | 275 EXPECT_GE(nada_sender_.bitrate_kbps(), NadaBweSender::kMinNadaBitrateKbps); |
| 274 | 276 |
| 275 nada_sender_.set_original_operating_mode(false); | 277 nada_sender_.set_original_operating_mode(false); |
| 276 nada_sender_.set_bitrate_kbps(5 * kMinBitrateKbps); | 278 nada_sender_.set_bitrate_kbps(5 * NadaBweSender::kMinNadaBitrateKbps); |
| 277 | 279 |
| 278 for (int i = 0; i < 1000; ++i) { | 280 for (int i = 0; i < 1000; ++i) { |
| 279 int previous_bitrate = nada_sender_.bitrate_kbps(); | 281 int previous_bitrate = nada_sender_.bitrate_kbps(); |
| 280 // Trigger AcceleratedRampDown mode. | 282 // Trigger AcceleratedRampDown mode. |
| 281 nada_sender_.GiveFeedback(congested_fb); | 283 nada_sender_.GiveFeedback(congested_fb); |
| 282 EXPECT_LE(nada_sender_.bitrate_kbps(), previous_bitrate); | 284 EXPECT_LE(nada_sender_.bitrate_kbps(), previous_bitrate); |
| 283 } | 285 } |
| 284 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMinBitrateKbps); | 286 EXPECT_EQ(nada_sender_.bitrate_kbps(), NadaBweSender::kMinNadaBitrateKbps); |
| 285 } | 287 } |
| 286 | 288 |
| 287 // Sending bitrate should increase and reach its Max bound. | 289 // Sending bitrate should increase and reach its Max bound. |
| 288 TEST_F(NadaSenderSideTest, VeryHighBandwith) { | 290 TEST_F(NadaSenderSideTest, VeryHighBandwith) { |
| 289 const int64_t kOneWayDelayMs = 50; | 291 const int64_t kOneWayDelayMs = 50; |
| 290 const size_t kRecentReceivingRate = static_cast<size_t>(kMaxBitrateKbps); | 292 const size_t kRecentReceivingRate = static_cast<size_t>(kMaxBitrateKbps); |
| 291 const int64_t kRefSignalMs = 1; | 293 const int64_t kRefSignalMs = 1; |
| 292 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; | 294 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; |
| 293 | 295 |
| 294 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( | 296 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( |
| 295 kRecentReceivingRate, kRefSignalMs, send_time_ms); | 297 kRecentReceivingRate, kRefSignalMs, send_time_ms); |
| 296 | 298 |
| 297 nada_sender_.set_original_operating_mode(true); | 299 nada_sender_.set_original_operating_mode(true); |
| 298 for (int i = 0; i < 100; ++i) { | 300 for (int i = 0; i < 100; ++i) { |
| 299 int previous_bitrate = nada_sender_.bitrate_kbps(); | 301 int previous_bitrate = nada_sender_.bitrate_kbps(); |
| 300 nada_sender_.GiveFeedback(not_congested_fb); | 302 nada_sender_.GiveFeedback(not_congested_fb); |
| 301 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); | 303 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); |
| 302 } | 304 } |
| 303 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps); | 305 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps); |
| 304 | 306 |
| 305 nada_sender_.set_original_operating_mode(false); | 307 nada_sender_.set_original_operating_mode(false); |
| 306 nada_sender_.set_bitrate_kbps(kMinBitrateKbps); | 308 nada_sender_.set_bitrate_kbps(NadaBweSender::kMinNadaBitrateKbps); |
| 307 | 309 |
| 308 for (int i = 0; i < 100; ++i) { | 310 for (int i = 0; i < 100; ++i) { |
| 309 int previous_bitrate = nada_sender_.bitrate_kbps(); | 311 int previous_bitrate = nada_sender_.bitrate_kbps(); |
| 310 nada_sender_.GiveFeedback(not_congested_fb); | 312 nada_sender_.GiveFeedback(not_congested_fb); |
| 311 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); | 313 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); |
| 312 } | 314 } |
| 313 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps); | 315 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps); |
| 314 } | 316 } |
| 315 | 317 |
| 316 TEST_F(NadaReceiverSideTest, FeedbackInitialCases) { | 318 TEST_F(NadaReceiverSideTest, FeedbackInitialCases) { |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 for (int i = 1; i < kNumElements; ++i) { | 489 for (int i = 1; i < kNumElements; ++i) { |
| 488 EXPECT_EQ( | 490 EXPECT_EQ( |
| 489 exp_smoothed[i], | 491 exp_smoothed[i], |
| 490 static_cast<int64_t>(exp_smoothed[i - 1] * (1.0f - kAlpha) + 0.5f)); | 492 static_cast<int64_t>(exp_smoothed[i - 1] * (1.0f - kAlpha) + 0.5f)); |
| 491 } | 493 } |
| 492 } | 494 } |
| 493 | 495 |
| 494 } // namespace bwe | 496 } // namespace bwe |
| 495 } // namespace testing | 497 } // namespace testing |
| 496 } // namespace webrtc | 498 } // namespace webrtc |
| OLD | NEW |