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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 EXPECT_NE(stream, nullptr); | 304 EXPECT_NE(stream, nullptr); |
305 streams.push_back(stream); | 305 streams.push_back(stream); |
306 | 306 |
307 for (auto s : streams) { | 307 for (auto s : streams) { |
308 call->DestroyFlexfecReceiveStream(s); | 308 call->DestroyFlexfecReceiveStream(s); |
309 } | 309 } |
310 } | 310 } |
311 | 311 |
312 namespace { | 312 namespace { |
313 struct CallBitrateHelper { | 313 struct CallBitrateHelper { |
314 CallBitrateHelper() : CallBitrateHelper(Call::Config(&event_log_)) {} | 314 CallBitrateHelper() : CallBitrateHelper(Call::Config::BitrateConfig()) {} |
315 | 315 |
316 explicit CallBitrateHelper(const Call::Config& config) | 316 explicit CallBitrateHelper(const Call::Config::BitrateConfig& bitrate_config) |
317 : mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_), | 317 : mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_) { |
318 call_(Call::Create( | 318 Call::Config config(&event_log_); |
319 config, | 319 config.bitrate_config = bitrate_config; |
320 rtc::MakeUnique<FakeRtpTransportControllerSend>(&packet_router_, | 320 call_.reset( |
321 &mock_cc_))) {} | 321 Call::Create(config, rtc::MakeUnique<FakeRtpTransportControllerSend>( |
| 322 &packet_router_, &mock_cc_))); |
| 323 } |
322 | 324 |
323 webrtc::Call* operator->() { return call_.get(); } | 325 webrtc::Call* operator->() { return call_.get(); } |
324 testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() { | 326 testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() { |
325 return mock_cc_; | 327 return mock_cc_; |
326 } | 328 } |
327 | 329 |
328 private: | 330 private: |
329 webrtc::RtcEventLogNullImpl event_log_; | 331 webrtc::RtcEventLogNullImpl event_log_; |
330 PacketRouter packet_router_; | 332 PacketRouter packet_router_; |
331 testing::NiceMock<test::MockSendSideCongestionController> mock_cc_; | 333 testing::NiceMock<test::MockSendSideCongestionController> mock_cc_; |
(...skipping 16 matching lines...) Expand all Loading... |
348 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) { | 350 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) { |
349 CallBitrateHelper call; | 351 CallBitrateHelper call; |
350 | 352 |
351 Call::Config::BitrateConfig bitrate_config; | 353 Call::Config::BitrateConfig bitrate_config; |
352 bitrate_config.min_bitrate_bps = 10; | 354 bitrate_config.min_bitrate_bps = 10; |
353 bitrate_config.start_bitrate_bps = 20; | 355 bitrate_config.start_bitrate_bps = 20; |
354 bitrate_config.max_bitrate_bps = 30; | 356 bitrate_config.max_bitrate_bps = 30; |
355 call->SetBitrateConfig(bitrate_config); | 357 call->SetBitrateConfig(bitrate_config); |
356 | 358 |
357 bitrate_config.min_bitrate_bps = 11; | 359 bitrate_config.min_bitrate_bps = 11; |
358 EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, 20, 30)); | 360 EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, -1, 30)); |
359 call->SetBitrateConfig(bitrate_config); | 361 call->SetBitrateConfig(bitrate_config); |
360 } | 362 } |
361 | 363 |
362 TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) { | 364 TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) { |
363 CallBitrateHelper call; | 365 CallBitrateHelper call; |
364 | 366 |
365 Call::Config::BitrateConfig bitrate_config; | 367 Call::Config::BitrateConfig bitrate_config; |
366 bitrate_config.min_bitrate_bps = 10; | 368 bitrate_config.min_bitrate_bps = 10; |
367 bitrate_config.start_bitrate_bps = 20; | 369 bitrate_config.start_bitrate_bps = 20; |
368 bitrate_config.max_bitrate_bps = 30; | 370 bitrate_config.max_bitrate_bps = 30; |
369 call->SetBitrateConfig(bitrate_config); | 371 call->SetBitrateConfig(bitrate_config); |
370 | 372 |
371 bitrate_config.start_bitrate_bps = 21; | 373 bitrate_config.start_bitrate_bps = 21; |
372 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30)); | 374 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30)); |
373 call->SetBitrateConfig(bitrate_config); | 375 call->SetBitrateConfig(bitrate_config); |
374 } | 376 } |
375 | 377 |
376 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) { | 378 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) { |
377 CallBitrateHelper call; | 379 CallBitrateHelper call; |
378 | 380 |
379 Call::Config::BitrateConfig bitrate_config; | 381 Call::Config::BitrateConfig bitrate_config; |
380 bitrate_config.min_bitrate_bps = 10; | 382 bitrate_config.min_bitrate_bps = 10; |
381 bitrate_config.start_bitrate_bps = 20; | 383 bitrate_config.start_bitrate_bps = 20; |
382 bitrate_config.max_bitrate_bps = 30; | 384 bitrate_config.max_bitrate_bps = 30; |
383 call->SetBitrateConfig(bitrate_config); | 385 call->SetBitrateConfig(bitrate_config); |
384 | 386 |
385 bitrate_config.max_bitrate_bps = 31; | 387 bitrate_config.max_bitrate_bps = 31; |
386 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 20, 31)); | 388 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, -1, 31)); |
387 call->SetBitrateConfig(bitrate_config); | 389 call->SetBitrateConfig(bitrate_config); |
388 } | 390 } |
389 | 391 |
390 TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) { | 392 TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) { |
391 CallBitrateHelper call; | 393 CallBitrateHelper call; |
392 | |
393 Call::Config::BitrateConfig bitrate_config; | 394 Call::Config::BitrateConfig bitrate_config; |
394 bitrate_config.min_bitrate_bps = 1; | 395 bitrate_config.min_bitrate_bps = 1; |
395 bitrate_config.start_bitrate_bps = 2; | 396 bitrate_config.start_bitrate_bps = 2; |
396 bitrate_config.max_bitrate_bps = 3; | 397 bitrate_config.max_bitrate_bps = 3; |
397 | 398 |
398 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); | 399 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); |
399 call->SetBitrateConfig(bitrate_config); | 400 call->SetBitrateConfig(bitrate_config); |
400 call->SetBitrateConfig(bitrate_config); | 401 call->SetBitrateConfig(bitrate_config); |
401 } | 402 } |
402 | 403 |
403 TEST(CallBitrateTest, | 404 TEST(CallBitrateTest, |
404 SetBitrateConfigWithSameMinMaxAndNegativeStartElidesSecondCall) { | 405 SetBitrateConfigWithSameMinMaxAndNegativeStartElidesSecondCall) { |
405 CallBitrateHelper call; | 406 CallBitrateHelper call; |
406 | 407 |
407 Call::Config::BitrateConfig bitrate_config; | 408 Call::Config::BitrateConfig bitrate_config; |
408 bitrate_config.min_bitrate_bps = 1; | 409 bitrate_config.min_bitrate_bps = 1; |
409 bitrate_config.start_bitrate_bps = 2; | 410 bitrate_config.start_bitrate_bps = 2; |
410 bitrate_config.max_bitrate_bps = 3; | 411 bitrate_config.max_bitrate_bps = 3; |
411 | 412 |
412 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); | 413 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); |
413 call->SetBitrateConfig(bitrate_config); | 414 call->SetBitrateConfig(bitrate_config); |
414 | 415 |
415 bitrate_config.start_bitrate_bps = -1; | 416 bitrate_config.start_bitrate_bps = -1; |
416 call->SetBitrateConfig(bitrate_config); | 417 call->SetBitrateConfig(bitrate_config); |
417 } | 418 } |
418 | 419 |
| 420 TEST(CallBitrateTest, BiggerMaskMinUsed) { |
| 421 CallBitrateHelper call; |
| 422 Call::Config::BitrateConfigMask mask; |
| 423 mask.min_bitrate_bps = rtc::Optional<int>(1234); |
| 424 |
| 425 EXPECT_CALL(call.mock_cc(), |
| 426 SetBweBitrates(*mask.min_bitrate_bps, testing::_, testing::_)); |
| 427 call->SetBitrateConfigMask(mask); |
| 428 } |
| 429 |
| 430 TEST(CallBitrateTest, BiggerConfigMinUsed) { |
| 431 CallBitrateHelper call; |
| 432 Call::Config::BitrateConfigMask mask; |
| 433 mask.min_bitrate_bps = rtc::Optional<int>(1000); |
| 434 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, testing::_, testing::_)); |
| 435 call->SetBitrateConfigMask(mask); |
| 436 |
| 437 Call::Config::BitrateConfig config; |
| 438 config.min_bitrate_bps = 1234; |
| 439 |
| 440 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1234, testing::_, testing::_)); |
| 441 call->SetBitrateConfig(config); |
| 442 } |
| 443 |
| 444 // The last call to set start should be used. |
| 445 TEST(CallBitrateTest, LatestStartMaskPreferred) { |
| 446 CallBitrateHelper call; |
| 447 Call::Config::BitrateConfigMask mask; |
| 448 mask.start_bitrate_bps = rtc::Optional<int>(1300); |
| 449 |
| 450 EXPECT_CALL(call.mock_cc(), |
| 451 SetBweBitrates(testing::_, *mask.start_bitrate_bps, testing::_)); |
| 452 call->SetBitrateConfigMask(mask); |
| 453 |
| 454 Call::Config::BitrateConfig bitrate_config; |
| 455 bitrate_config.start_bitrate_bps = 1200; |
| 456 |
| 457 EXPECT_CALL( |
| 458 call.mock_cc(), |
| 459 SetBweBitrates(testing::_, bitrate_config.start_bitrate_bps, testing::_)); |
| 460 call->SetBitrateConfig(bitrate_config); |
| 461 } |
| 462 |
| 463 TEST(CallBitrateTest, SmallerMaskMaxUsed) { |
| 464 Call::Config::BitrateConfig bitrate_config; |
| 465 bitrate_config.max_bitrate_bps = bitrate_config.start_bitrate_bps + 2000; |
| 466 CallBitrateHelper call(bitrate_config); |
| 467 |
| 468 Call::Config::BitrateConfigMask mask; |
| 469 mask.max_bitrate_bps = |
| 470 rtc::Optional<int>(bitrate_config.start_bitrate_bps + 1000); |
| 471 |
| 472 EXPECT_CALL(call.mock_cc(), |
| 473 SetBweBitrates(testing::_, testing::_, *mask.max_bitrate_bps)); |
| 474 call->SetBitrateConfigMask(mask); |
| 475 } |
| 476 |
| 477 TEST(CallBitrateTest, SmallerConfigMaxUsed) { |
| 478 Call::Config::BitrateConfig bitrate_config; |
| 479 bitrate_config.max_bitrate_bps = bitrate_config.start_bitrate_bps + 1000; |
| 480 CallBitrateHelper call(bitrate_config); |
| 481 |
| 482 Call::Config::BitrateConfigMask mask; |
| 483 mask.max_bitrate_bps = |
| 484 rtc::Optional<int>(bitrate_config.start_bitrate_bps + 2000); |
| 485 |
| 486 // Expect no calls because nothing changes |
| 487 EXPECT_CALL(call.mock_cc(), |
| 488 SetBweBitrates(testing::_, testing::_, testing::_)) |
| 489 .Times(0); |
| 490 call->SetBitrateConfigMask(mask); |
| 491 } |
| 492 |
| 493 TEST(CallBitrateTest, MaskStartLessThanConfigMinClamped) { |
| 494 Call::Config::BitrateConfig bitrate_config; |
| 495 bitrate_config.min_bitrate_bps = 2000; |
| 496 CallBitrateHelper call(bitrate_config); |
| 497 |
| 498 Call::Config::BitrateConfigMask mask; |
| 499 mask.start_bitrate_bps = rtc::Optional<int>(1000); |
| 500 |
| 501 EXPECT_CALL(call.mock_cc(), SetBweBitrates(2000, 2000, testing::_)); |
| 502 call->SetBitrateConfigMask(mask); |
| 503 } |
| 504 |
| 505 TEST(CallBitrateTest, MaskStartGreaterThanConfigMaxClamped) { |
| 506 Call::Config::BitrateConfig bitrate_config; |
| 507 bitrate_config.start_bitrate_bps = 2000; |
| 508 CallBitrateHelper call(bitrate_config); |
| 509 |
| 510 Call::Config::BitrateConfigMask mask; |
| 511 mask.max_bitrate_bps = rtc::Optional<int>(1000); |
| 512 |
| 513 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, -1, 1000)); |
| 514 call->SetBitrateConfigMask(mask); |
| 515 } |
| 516 |
| 517 TEST(CallBitrateTest, MaskMinGreaterThanConfigMaxClamped) { |
| 518 Call::Config::BitrateConfig bitrate_config; |
| 519 bitrate_config.min_bitrate_bps = 2000; |
| 520 CallBitrateHelper call(bitrate_config); |
| 521 |
| 522 Call::Config::BitrateConfigMask mask; |
| 523 mask.max_bitrate_bps = rtc::Optional<int>(1000); |
| 524 |
| 525 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, testing::_, 1000)); |
| 526 call->SetBitrateConfigMask(mask); |
| 527 } |
| 528 |
| 529 TEST(CallBitrateTest, SettingMaskStartForcesUpdate) { |
| 530 CallBitrateHelper call; |
| 531 |
| 532 Call::Config::BitrateConfigMask mask; |
| 533 mask.start_bitrate_bps = rtc::Optional<int>(1000); |
| 534 |
| 535 // SetBweBitrates should be called twice with the same params since |
| 536 // start_bitrate_bps is set. |
| 537 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, 1000, testing::_)) |
| 538 .Times(2); |
| 539 call->SetBitrateConfigMask(mask); |
| 540 call->SetBitrateConfigMask(mask); |
| 541 } |
| 542 |
| 543 TEST(CallBitrateTest, SetBitrateConfigWithNoChangesDoesNotCallSetBweBitrates) { |
| 544 CallBitrateHelper call; |
| 545 |
| 546 Call::Config::BitrateConfig config1; |
| 547 config1.min_bitrate_bps = 0; |
| 548 config1.start_bitrate_bps = 1000; |
| 549 config1.max_bitrate_bps = -1; |
| 550 |
| 551 Call::Config::BitrateConfig config2; |
| 552 config2.min_bitrate_bps = 0; |
| 553 config2.start_bitrate_bps = -1; |
| 554 config2.max_bitrate_bps = -1; |
| 555 |
| 556 // The second call should not call SetBweBitrates because it doesn't |
| 557 // change any values. |
| 558 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1)); |
| 559 call->SetBitrateConfig(config1); |
| 560 call->SetBitrateConfig(config2); |
| 561 } |
| 562 |
| 563 // If SetBitrateConfig changes the max, but not the effective max, |
| 564 // SetBweBitrates shouldn't be called, to avoid unnecessary encoder |
| 565 // reconfigurations. |
| 566 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenEffectiveMaxUnchanged) { |
| 567 CallBitrateHelper call; |
| 568 |
| 569 Call::Config::BitrateConfig config; |
| 570 config.min_bitrate_bps = 0; |
| 571 config.start_bitrate_bps = -1; |
| 572 config.max_bitrate_bps = 2000; |
| 573 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, testing::_, 2000)); |
| 574 call->SetBitrateConfig(config); |
| 575 |
| 576 // Reduce effective max to 1000 with the mask. |
| 577 Call::Config::BitrateConfigMask mask; |
| 578 mask.max_bitrate_bps = rtc::Optional<int>(1000); |
| 579 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, testing::_, 1000)); |
| 580 call->SetBitrateConfigMask(mask); |
| 581 |
| 582 // This leaves the effective max unchanged, so SetBweBitrates shouldn't be |
| 583 // called again. |
| 584 config.max_bitrate_bps = 1000; |
| 585 call->SetBitrateConfig(config); |
| 586 } |
| 587 |
| 588 // When the "start bitrate" mask is removed, SetBweBitrates shouldn't be called |
| 589 // again, since nothing's changing. |
| 590 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenStartMaskRemoved) { |
| 591 CallBitrateHelper call; |
| 592 |
| 593 Call::Config::BitrateConfigMask mask; |
| 594 mask.start_bitrate_bps = rtc::Optional<int>(1000); |
| 595 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1)); |
| 596 call->SetBitrateConfigMask(mask); |
| 597 |
| 598 mask.start_bitrate_bps.reset(); |
| 599 call->SetBitrateConfigMask(mask); |
| 600 } |
| 601 |
| 602 // Test that if SetBitrateConfig is called after SetBitrateConfigMask applies a |
| 603 // "start" value, the SetBitrateConfig call won't apply that start value a |
| 604 // second time. |
| 605 TEST(CallBitrateTest, SetBitrateConfigAfterSetBitrateConfigMaskWithStart) { |
| 606 CallBitrateHelper call; |
| 607 |
| 608 Call::Config::BitrateConfigMask mask; |
| 609 mask.start_bitrate_bps = rtc::Optional<int>(1000); |
| 610 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1)); |
| 611 call->SetBitrateConfigMask(mask); |
| 612 |
| 613 Call::Config::BitrateConfig config; |
| 614 config.min_bitrate_bps = 0; |
| 615 config.start_bitrate_bps = -1; |
| 616 config.max_bitrate_bps = 5000; |
| 617 // The start value isn't changing, so SetBweBitrates should be called with |
| 618 // -1. |
| 619 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, -1, 5000)); |
| 620 call->SetBitrateConfig(config); |
| 621 } |
| 622 |
| 623 TEST(CallBitrateTest, SetBweBitrateNotCalledWhenClampedMinUnchanged) { |
| 624 Call::Config::BitrateConfig bitrate_config; |
| 625 bitrate_config.start_bitrate_bps = 500; |
| 626 bitrate_config.max_bitrate_bps = 1000; |
| 627 CallBitrateHelper call(bitrate_config); |
| 628 |
| 629 // Set min to 2000; it is clamped to the max (1000). |
| 630 Call::Config::BitrateConfigMask mask; |
| 631 mask.min_bitrate_bps = rtc::Optional<int>(2000); |
| 632 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, -1, 1000)); |
| 633 call->SetBitrateConfigMask(mask); |
| 634 |
| 635 // Set min to 3000; the clamped value stays the same so nothing happens. |
| 636 mask.min_bitrate_bps = rtc::Optional<int>(3000); |
| 637 call->SetBitrateConfigMask(mask); |
| 638 } |
| 639 |
419 } // namespace webrtc | 640 } // namespace webrtc |
OLD | NEW |