OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); | 415 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
416 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); | 416 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); |
417 EXPECT_EQ(3, statistics_proxy_->GetStats().number_of_quality_adapt_changes); | 417 EXPECT_EQ(3, statistics_proxy_->GetStats().number_of_quality_adapt_changes); |
418 | 418 |
419 statistics_proxy_->OnQualityRestrictedResolutionChanged(0); | 419 statistics_proxy_->OnQualityRestrictedResolutionChanged(0); |
420 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); | 420 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); |
421 EXPECT_EQ(4, statistics_proxy_->GetStats().number_of_quality_adapt_changes); | 421 EXPECT_EQ(4, statistics_proxy_->GetStats().number_of_quality_adapt_changes); |
422 } | 422 } |
423 | 423 |
424 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) { | 424 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) { |
| 425 // First RTP packet sent. |
| 426 UpdateDataCounters(kFirstSsrc); |
425 // Min runtime has passed. | 427 // Min runtime has passed. |
426 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 428 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
427 statistics_proxy_.reset(); | 429 statistics_proxy_.reset(); |
428 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); | 430 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
429 EXPECT_EQ(0, | 431 EXPECT_EQ(0, |
430 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); | 432 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
431 } | 433 } |
432 | 434 |
433 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) { | 435 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) { |
| 436 // First RTP packet sent. |
| 437 UpdateDataCounters(kFirstSsrc); |
434 // Enable scaling. | 438 // Enable scaling. |
435 statistics_proxy_->SetQualityScalingStats(0); | 439 statistics_proxy_->SetQualityScalingStats(0); |
436 statistics_proxy_->SetCpuScalingStats(0); | 440 statistics_proxy_->SetCpuScalingStats(0); |
437 // Min runtime has not passed. | 441 // Min runtime has not passed. |
438 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); | 442 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); |
439 statistics_proxy_.reset(); | 443 statistics_proxy_.reset(); |
440 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); | 444 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
441 EXPECT_EQ(0, | 445 EXPECT_EQ(0, |
442 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); | 446 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
443 } | 447 } |
444 | 448 |
445 TEST_F(SendStatisticsProxyTest, ZeroCpuAdaptChangesReported) { | 449 TEST_F(SendStatisticsProxyTest, ZeroCpuAdaptChangesReported) { |
| 450 // First RTP packet sent. |
| 451 UpdateDataCounters(kFirstSsrc); |
446 // Enable scaling. | 452 // Enable scaling. |
447 statistics_proxy_->SetCpuScalingStats(0); | 453 statistics_proxy_->SetCpuScalingStats(0); |
448 // Min runtime has passed. | 454 // Min runtime has passed. |
449 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 455 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
450 statistics_proxy_.reset(); | 456 statistics_proxy_.reset(); |
451 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); | 457 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
452 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 0)); | 458 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 0)); |
453 } | 459 } |
454 | 460 |
455 TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) { | 461 TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) { |
| 462 // First RTP packet sent. |
| 463 UpdateDataCounters(kFirstSsrc); |
456 // Enable scaling. | 464 // Enable scaling. |
457 statistics_proxy_->SetQualityScalingStats(0); | 465 statistics_proxy_->SetQualityScalingStats(0); |
458 // Min runtime has passed. | 466 // Min runtime has passed. |
459 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 467 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
460 statistics_proxy_.reset(); | 468 statistics_proxy_.reset(); |
461 EXPECT_EQ(1, | 469 EXPECT_EQ(1, |
462 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); | 470 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
463 EXPECT_EQ( | 471 EXPECT_EQ( |
464 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 0)); | 472 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 0)); |
465 } | 473 } |
466 | 474 |
467 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) { | 475 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) { |
| 476 // First RTP packet sent. |
| 477 UpdateDataCounters(kFirstSsrc); |
468 // Enable scaling. | 478 // Enable scaling. |
469 // Adapt changes: 1, elapsed time: 10 ms => 6 per minute. | 479 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. |
470 statistics_proxy_->SetCpuScalingStats(0); | 480 statistics_proxy_->SetCpuScalingStats(0); |
471 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 481 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
472 fake_clock_.AdvanceTimeMilliseconds(10000); | 482 fake_clock_.AdvanceTimeMilliseconds(10000); |
473 statistics_proxy_.reset(); | 483 statistics_proxy_.reset(); |
474 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); | 484 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
475 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6)); | 485 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6)); |
476 } | 486 } |
477 | 487 |
478 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { | 488 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { |
| 489 // First RTP packet sent. |
| 490 UpdateDataCounters(kFirstSsrc); |
| 491 |
479 // Disable scaling. | 492 // Disable scaling. |
480 statistics_proxy_->SetQualityScalingStats(-1); | 493 statistics_proxy_->SetQualityScalingStats(-1); |
481 fake_clock_.AdvanceTimeMilliseconds(10000); | 494 fake_clock_.AdvanceTimeMilliseconds(10000); |
482 | 495 |
483 // Enable scaling. | 496 // Enable scaling. |
484 // Adapt changes: 2, elapsed time: 20 ms. | 497 // Adapt changes: 2, elapsed time: 20 sec. |
485 statistics_proxy_->SetQualityScalingStats(0); | 498 statistics_proxy_->SetQualityScalingStats(0); |
486 fake_clock_.AdvanceTimeMilliseconds(5000); | 499 fake_clock_.AdvanceTimeMilliseconds(5000); |
487 statistics_proxy_->SetQualityScalingStats(1); | 500 statistics_proxy_->SetQualityScalingStats(1); |
488 fake_clock_.AdvanceTimeMilliseconds(9000); | 501 fake_clock_.AdvanceTimeMilliseconds(9000); |
489 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); | 502 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
490 fake_clock_.AdvanceTimeMilliseconds(6000); | 503 fake_clock_.AdvanceTimeMilliseconds(6000); |
491 statistics_proxy_->OnQualityRestrictedResolutionChanged(2); | 504 statistics_proxy_->OnQualityRestrictedResolutionChanged(2); |
492 | 505 |
493 // Disable scaling. | 506 // Disable scaling. |
494 statistics_proxy_->SetQualityScalingStats(-1); | 507 statistics_proxy_->SetQualityScalingStats(-1); |
495 fake_clock_.AdvanceTimeMilliseconds(30000); | 508 fake_clock_.AdvanceTimeMilliseconds(30000); |
496 | 509 |
497 // Enable scaling. | 510 // Enable scaling. |
498 // Adapt changes: 1, elapsed time: 10 ms. | 511 // Adapt changes: 1, elapsed time: 10 sec. |
499 statistics_proxy_->SetQualityScalingStats(0); | 512 statistics_proxy_->SetQualityScalingStats(0); |
500 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); | 513 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
501 fake_clock_.AdvanceTimeMilliseconds(10000); | 514 fake_clock_.AdvanceTimeMilliseconds(10000); |
502 | 515 |
503 // Disable scaling. | 516 // Disable scaling. |
504 statistics_proxy_->SetQualityScalingStats(-1); | 517 statistics_proxy_->SetQualityScalingStats(-1); |
505 fake_clock_.AdvanceTimeMilliseconds(5000); | 518 fake_clock_.AdvanceTimeMilliseconds(5000); |
506 statistics_proxy_->SetQualityScalingStats(-1); | 519 statistics_proxy_->SetQualityScalingStats(-1); |
507 fake_clock_.AdvanceTimeMilliseconds(20000); | 520 fake_clock_.AdvanceTimeMilliseconds(20000); |
508 | 521 |
509 // Adapt changes: 3, elapsed time: 30 ms => 6 per minute. | 522 // Adapt changes: 3, elapsed time: 30 sec => 6 per minute. |
510 statistics_proxy_.reset(); | 523 statistics_proxy_.reset(); |
511 EXPECT_EQ(1, | 524 EXPECT_EQ(1, |
512 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); | 525 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
513 EXPECT_EQ( | 526 EXPECT_EQ( |
514 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); | 527 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); |
515 } | 528 } |
516 | 529 |
| 530 TEST_F(SendStatisticsProxyTest, |
| 531 AdaptChangesNotReported_ScalingNotEnabledVideoResumed) { |
| 532 // First RTP packet sent. |
| 533 UpdateDataCounters(kFirstSsrc); |
| 534 |
| 535 // Suspend and resume video. |
| 536 statistics_proxy_->OnSuspendChange(true); |
| 537 fake_clock_.AdvanceTimeMilliseconds(5000); |
| 538 statistics_proxy_->OnSuspendChange(false); |
| 539 |
| 540 // Min runtime has passed but scaling not enabled. |
| 541 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
| 542 statistics_proxy_.reset(); |
| 543 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
| 544 EXPECT_EQ(0, |
| 545 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
| 546 } |
| 547 |
| 548 TEST_F(SendStatisticsProxyTest, QualityAdaptChangesStatsExcludesSuspendedTime) { |
| 549 // First RTP packet sent. |
| 550 UpdateDataCounters(kFirstSsrc); |
| 551 |
| 552 // Enable scaling. |
| 553 // Adapt changes: 2, elapsed time: 20 sec. |
| 554 statistics_proxy_->SetQualityScalingStats(0); |
| 555 fake_clock_.AdvanceTimeMilliseconds(20000); |
| 556 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
| 557 statistics_proxy_->OnQualityRestrictedResolutionChanged(2); |
| 558 |
| 559 // Suspend and resume video. |
| 560 statistics_proxy_->OnSuspendChange(true); |
| 561 fake_clock_.AdvanceTimeMilliseconds(30000); |
| 562 statistics_proxy_->OnSuspendChange(false); |
| 563 |
| 564 // Adapt changes: 1, elapsed time: 10 sec. |
| 565 statistics_proxy_->OnQualityRestrictedResolutionChanged(3); |
| 566 fake_clock_.AdvanceTimeMilliseconds(10000); |
| 567 |
| 568 // Adapt changes: 3, elapsed time: 30 sec => 6 per minute. |
| 569 statistics_proxy_.reset(); |
| 570 EXPECT_EQ(1, |
| 571 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
| 572 EXPECT_EQ( |
| 573 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); |
| 574 } |
| 575 |
| 576 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesStatsExcludesSuspendedTime) { |
| 577 // First RTP packet sent. |
| 578 UpdateDataCounters(kFirstSsrc); |
| 579 |
| 580 // Video not suspended. |
| 581 statistics_proxy_->OnSuspendChange(false); |
| 582 fake_clock_.AdvanceTimeMilliseconds(30000); |
| 583 |
| 584 // Enable scaling. |
| 585 // Adapt changes: 1, elapsed time: 20 sec. |
| 586 statistics_proxy_->SetCpuScalingStats(0); |
| 587 fake_clock_.AdvanceTimeMilliseconds(10000); |
| 588 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
| 589 |
| 590 // Video not suspended, stats time already started. |
| 591 statistics_proxy_->OnSuspendChange(false); |
| 592 fake_clock_.AdvanceTimeMilliseconds(10000); |
| 593 |
| 594 // Disable scaling. |
| 595 statistics_proxy_->SetCpuScalingStats(-1); |
| 596 fake_clock_.AdvanceTimeMilliseconds(30000); |
| 597 |
| 598 // Suspend and resume video, stats time not started when scaling not enabled. |
| 599 statistics_proxy_->OnSuspendChange(true); |
| 600 fake_clock_.AdvanceTimeMilliseconds(30000); |
| 601 statistics_proxy_->OnSuspendChange(false); |
| 602 fake_clock_.AdvanceTimeMilliseconds(30000); |
| 603 |
| 604 // Enable scaling. |
| 605 // Adapt changes: 1, elapsed time: 10 sec. |
| 606 statistics_proxy_->SetCpuScalingStats(0); |
| 607 fake_clock_.AdvanceTimeMilliseconds(10000); |
| 608 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
| 609 |
| 610 // Adapt changes: 2, elapsed time: 30 sec => 4 per minute. |
| 611 statistics_proxy_.reset(); |
| 612 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
| 613 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 4)); |
| 614 } |
| 615 |
| 616 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsNotStartedIfVideoSuspended) { |
| 617 // First RTP packet sent. |
| 618 UpdateDataCounters(kFirstSsrc); |
| 619 |
| 620 // Video suspended. |
| 621 statistics_proxy_->OnSuspendChange(true); |
| 622 |
| 623 // Enable scaling, stats time not started when suspended. |
| 624 statistics_proxy_->SetCpuScalingStats(0); |
| 625 fake_clock_.AdvanceTimeMilliseconds(10000); |
| 626 |
| 627 // Resume video, stats time started. |
| 628 // Adapt changes: 1, elapsed time: 10 sec. |
| 629 statistics_proxy_->OnSuspendChange(false); |
| 630 fake_clock_.AdvanceTimeMilliseconds(10000); |
| 631 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
| 632 |
| 633 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. |
| 634 statistics_proxy_.reset(); |
| 635 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
| 636 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6)); |
| 637 } |
| 638 |
517 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) { | 639 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) { |
518 StreamDataCounters counters; | |
519 StreamDataCountersCallback* proxy = | |
520 static_cast<StreamDataCountersCallback*>(statistics_proxy_.get()); | |
521 | |
522 // Send first packet, scaling enabled. | 640 // Send first packet, scaling enabled. |
523 // Elapsed time before first packet is sent should be excluded. | 641 // Elapsed time before first packet is sent should be excluded. |
524 statistics_proxy_->SetQualityScalingStats(0); | 642 statistics_proxy_->SetQualityScalingStats(0); |
525 fake_clock_.AdvanceTimeMilliseconds(10000); | 643 fake_clock_.AdvanceTimeMilliseconds(10000); |
526 proxy->DataCountersUpdated(counters, kFirstSsrc); | 644 UpdateDataCounters(kFirstSsrc); |
527 | 645 |
528 // Adapt changes: 1, elapsed time: 10 ms. | 646 // Adapt changes: 1, elapsed time: 10 sec. |
529 fake_clock_.AdvanceTimeMilliseconds(10000); | 647 fake_clock_.AdvanceTimeMilliseconds(10000); |
530 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); | 648 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
531 proxy->DataCountersUpdated(counters, kFirstSsrc); | 649 UpdateDataCounters(kFirstSsrc); |
532 | 650 |
533 // Adapt changes: 1, elapsed time: 10 ms => 6 per minute. | 651 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. |
534 statistics_proxy_.reset(); | 652 statistics_proxy_.reset(); |
535 EXPECT_EQ(1, | 653 EXPECT_EQ(1, |
536 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); | 654 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
537 EXPECT_EQ( | 655 EXPECT_EQ( |
538 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); | 656 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); |
539 } | 657 } |
540 | 658 |
541 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) { | 659 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) { |
542 StreamDataCounters counters; | |
543 StreamDataCountersCallback* proxy = | |
544 static_cast<StreamDataCountersCallback*>(statistics_proxy_.get()); | |
545 | |
546 // Enable and disable scaling. | 660 // Enable and disable scaling. |
547 statistics_proxy_->SetCpuScalingStats(0); | 661 statistics_proxy_->SetCpuScalingStats(0); |
548 fake_clock_.AdvanceTimeMilliseconds(60000); | 662 fake_clock_.AdvanceTimeMilliseconds(60000); |
549 statistics_proxy_->SetCpuScalingStats(-1); | 663 statistics_proxy_->SetCpuScalingStats(-1); |
550 | 664 |
551 // Send first packet, scaling disabled. | 665 // Send first packet, scaling disabled. |
552 // Elapsed time before first packet is sent should be excluded. | 666 // Elapsed time before first packet is sent should be excluded. |
553 proxy->DataCountersUpdated(counters, kFirstSsrc); | 667 UpdateDataCounters(kFirstSsrc); |
554 fake_clock_.AdvanceTimeMilliseconds(60000); | 668 fake_clock_.AdvanceTimeMilliseconds(60000); |
555 | 669 |
556 // Enable scaling. | 670 // Enable scaling. |
557 statistics_proxy_->SetCpuScalingStats(0); | 671 statistics_proxy_->SetCpuScalingStats(0); |
558 fake_clock_.AdvanceTimeMilliseconds(10000); | 672 fake_clock_.AdvanceTimeMilliseconds(10000); |
559 proxy->DataCountersUpdated(counters, kFirstSsrc); | 673 UpdateDataCounters(kFirstSsrc); |
560 | 674 |
561 // Adapt changes: 1, elapsed time: 20 ms. | 675 // Adapt changes: 1, elapsed time: 20 sec. |
562 fake_clock_.AdvanceTimeMilliseconds(10000); | 676 fake_clock_.AdvanceTimeMilliseconds(10000); |
563 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 677 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
564 | 678 |
565 // Adapt changes: 1, elapsed time: 20 ms => 3 per minute. | 679 // Adapt changes: 1, elapsed time: 20 sec => 3 per minute. |
566 statistics_proxy_.reset(); | 680 statistics_proxy_.reset(); |
567 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); | 681 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
568 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 3)); | 682 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 3)); |
569 } | 683 } |
570 | 684 |
571 TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) { | 685 TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) { |
572 // Enable scaling. | 686 // First RTP packet sent, scaling enabled. |
| 687 UpdateDataCounters(kFirstSsrc); |
573 statistics_proxy_->SetCpuScalingStats(0); | 688 statistics_proxy_->SetCpuScalingStats(0); |
574 | 689 |
575 // Adapt changes: 2, elapsed time: 15 ms => 8 per minute. | 690 // Adapt changes: 2, elapsed time: 15 sec => 8 per minute. |
576 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 691 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
577 fake_clock_.AdvanceTimeMilliseconds(6000); | 692 fake_clock_.AdvanceTimeMilliseconds(6000); |
578 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 693 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
579 fake_clock_.AdvanceTimeMilliseconds(9000); | 694 fake_clock_.AdvanceTimeMilliseconds(9000); |
580 | 695 |
581 // Switch content type, real-time stats should be updated. | 696 // Switch content type, real-time stats should be updated. |
582 VideoEncoderConfig config; | 697 VideoEncoderConfig config; |
583 config.content_type = VideoEncoderConfig::ContentType::kScreen; | 698 config.content_type = VideoEncoderConfig::ContentType::kScreen; |
584 statistics_proxy_->OnEncoderReconfigured(config, 50); | 699 statistics_proxy_->OnEncoderReconfigured(config, 50); |
585 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); | 700 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
586 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 8)); | 701 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 8)); |
587 EXPECT_EQ(0, | 702 EXPECT_EQ(0, |
588 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); | 703 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
589 | 704 |
590 // Enable scaling. | 705 // First RTP packet sent, scaling enabled. |
| 706 UpdateDataCounters(kFirstSsrc); |
591 statistics_proxy_->SetCpuScalingStats(0); | 707 statistics_proxy_->SetCpuScalingStats(0); |
592 | 708 |
593 // Adapt changes: 4, elapsed time: 120 ms => 2 per minute. | 709 // Adapt changes: 4, elapsed time: 120 sec => 2 per minute. |
594 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 710 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
595 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 711 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
596 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 712 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
597 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); | 713 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
598 fake_clock_.AdvanceTimeMilliseconds(120000); | 714 fake_clock_.AdvanceTimeMilliseconds(120000); |
599 | 715 |
600 statistics_proxy_.reset(); | 716 statistics_proxy_.reset(); |
601 EXPECT_EQ(1, metrics::NumSamples( | 717 EXPECT_EQ(1, metrics::NumSamples( |
602 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Cpu")); | 718 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Cpu")); |
603 EXPECT_EQ(1, metrics::NumEvents( | 719 EXPECT_EQ(1, metrics::NumEvents( |
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 // Histograms are updated when the statistics_proxy_ is deleted. | 1143 // Histograms are updated when the statistics_proxy_ is deleted. |
1028 statistics_proxy_.reset(); | 1144 statistics_proxy_.reset(); |
1029 EXPECT_EQ( | 1145 EXPECT_EQ( |
1030 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); | 1146 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); |
1031 EXPECT_EQ(0, metrics::NumSamples( | 1147 EXPECT_EQ(0, metrics::NumSamples( |
1032 "WebRTC.Video.QualityLimitedResolutionDownscales")); | 1148 "WebRTC.Video.QualityLimitedResolutionDownscales")); |
1033 } | 1149 } |
1034 | 1150 |
1035 TEST_F(SendStatisticsProxyTest, | 1151 TEST_F(SendStatisticsProxyTest, |
1036 QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) { | 1152 QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) { |
| 1153 const int kNumDownscales = 0; |
1037 EncodedImage encoded_image; | 1154 EncodedImage encoded_image; |
| 1155 statistics_proxy_->SetQualityScalingStats(kNumDownscales); |
1038 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) | 1156 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
1039 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo); | 1157 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo); |
1040 | 1158 |
1041 // Histograms are updated when the statistics_proxy_ is deleted. | 1159 // Histograms are updated when the statistics_proxy_ is deleted. |
1042 statistics_proxy_.reset(); | 1160 statistics_proxy_.reset(); |
1043 EXPECT_EQ( | 1161 EXPECT_EQ( |
1044 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); | 1162 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); |
1045 EXPECT_EQ(1, metrics::NumEvents( | 1163 EXPECT_EQ(1, metrics::NumEvents( |
1046 "WebRTC.Video.QualityLimitedResolutionInPercent", 0)); | 1164 "WebRTC.Video.QualityLimitedResolutionInPercent", 0)); |
1047 // No resolution downscale. | 1165 // No resolution downscale. |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1583 fake_clock_.AdvanceTimeMilliseconds(kPeriodIntervalMs); | 1701 fake_clock_.AdvanceTimeMilliseconds(kPeriodIntervalMs); |
1584 proxy->DataCountersUpdated(counters, kFirstSsrc); | 1702 proxy->DataCountersUpdated(counters, kFirstSsrc); |
1585 } | 1703 } |
1586 | 1704 |
1587 // FEC not enabled. | 1705 // FEC not enabled. |
1588 statistics_proxy_.reset(); | 1706 statistics_proxy_.reset(); |
1589 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); | 1707 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); |
1590 } | 1708 } |
1591 | 1709 |
1592 } // namespace webrtc | 1710 } // namespace webrtc |
OLD | NEW |