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

Side by Side Diff: webrtc/video/send_statistics_proxy_unittest.cc

Issue 2871623002: Update video adaptation stats to support degradations in both resolution and framerate. (Closed)
Patch Set: address comments Created 3 years, 7 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
« no previous file with comments | « webrtc/video/send_statistics_proxy.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 360
361 TEST_F(SendStatisticsProxyTest, OnSendEncodedImageWithoutQpQpSumWontExist) { 361 TEST_F(SendStatisticsProxyTest, OnSendEncodedImageWithoutQpQpSumWontExist) {
362 EncodedImage encoded_image; 362 EncodedImage encoded_image;
363 CodecSpecificInfo codec_info; 363 CodecSpecificInfo codec_info;
364 encoded_image.qp_ = -1; 364 encoded_image.qp_ = -1;
365 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum); 365 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum);
366 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 366 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
367 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum); 367 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum);
368 } 368 }
369 369
370 TEST_F(SendStatisticsProxyTest, SetCpuScalingUpdatesStats) { 370 TEST_F(SendStatisticsProxyTest, GetCpuAdaptationStats) {
371 ViEEncoder::AdaptCounts cpu_counts;
372 ViEEncoder::AdaptCounts quality_counts;
373 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
371 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution); 374 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
372 statistics_proxy_->SetCpuScalingStats(-1); 375 cpu_counts.fps = 1;
376 cpu_counts.resolution = 0;
377 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
378 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_framerate);
373 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution); 379 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
374 statistics_proxy_->SetCpuScalingStats(0); 380 cpu_counts.fps = 0;
381 cpu_counts.resolution = 1;
382 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
383 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
384 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
385 cpu_counts.fps = 1;
386 cpu_counts.resolution = -1;
387 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
388 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_framerate);
375 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution); 389 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
376 statistics_proxy_->SetCpuScalingStats(1); 390 cpu_counts.fps = -1;
377 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution); 391 cpu_counts.resolution = -1;
392 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
393 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
394 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
378 } 395 }
379 396
380 TEST_F(SendStatisticsProxyTest, SetQualityScalingUpdatesStats) { 397 TEST_F(SendStatisticsProxyTest, GetQualityAdaptationStats) {
398 ViEEncoder::AdaptCounts cpu_counts;
399 ViEEncoder::AdaptCounts quality_counts;
400 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
381 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); 401 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
382 statistics_proxy_->SetQualityScalingStats(-1); 402 quality_counts.fps = 1;
403 quality_counts.resolution = 0;
404 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
405 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
383 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); 406 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
384 statistics_proxy_->SetQualityScalingStats(0); 407 quality_counts.fps = 0;
408 quality_counts.resolution = 1;
409 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
410 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
411 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
412 quality_counts.fps = 1;
413 quality_counts.resolution = -1;
414 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
415 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
385 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); 416 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
386 statistics_proxy_->SetQualityScalingStats(1); 417 quality_counts.fps = -1;
387 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); 418 quality_counts.resolution = -1;
419 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
420 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
421 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
388 } 422 }
389 423
390 TEST_F(SendStatisticsProxyTest, GetStatsReportsCpuResolutionChanges) { 424 TEST_F(SendStatisticsProxyTest, GetStatsReportsCpuAdaptChanges) {
391 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution); 425 ViEEncoder::AdaptCounts cpu_counts;
426 ViEEncoder::AdaptCounts quality_counts;
392 EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes); 427 EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
393 428
394 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 429 cpu_counts.resolution = 1;
430 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
431 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
395 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution); 432 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
396 EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_cpu_adapt_changes); 433 EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
397 434
398 statistics_proxy_->OnCpuRestrictedResolutionChanged(false); 435 cpu_counts.resolution = 2;
399 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution); 436 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
437 EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
438 EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
400 EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_cpu_adapt_changes); 439 EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
440 EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
401 } 441 }
402 442
403 TEST_F(SendStatisticsProxyTest, GetStatsReportsQualityResolutionChanges) { 443 TEST_F(SendStatisticsProxyTest, GetStatsReportsQualityAdaptChanges) {
404 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); 444 ViEEncoder::AdaptCounts cpu_counts;
445 ViEEncoder::AdaptCounts quality_counts;
405 EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_quality_adapt_changes); 446 EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
406 447
407 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); 448 quality_counts.fps = 1;
408 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); 449 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
450 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
451 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
409 EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_quality_adapt_changes); 452 EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
410 453
411 statistics_proxy_->OnQualityRestrictedResolutionChanged(2); 454 quality_counts.fps = 0;
412 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); 455 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
456 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
457 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
413 EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_quality_adapt_changes); 458 EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
414 459 EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
415 statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
416 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
417 EXPECT_EQ(3, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
418
419 statistics_proxy_->OnQualityRestrictedResolutionChanged(0);
420 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
421 EXPECT_EQ(4, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
422 } 460 }
423 461
424 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) { 462 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_AdaptationNotEnabled) {
425 // First RTP packet sent. 463 // First RTP packet sent.
426 UpdateDataCounters(kFirstSsrc); 464 UpdateDataCounters(kFirstSsrc);
427 // Min runtime has passed. 465 // Min runtime has passed.
428 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); 466 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000);
429 statistics_proxy_.reset(); 467 statistics_proxy_.reset();
430 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 468 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
431 EXPECT_EQ(0, 469 EXPECT_EQ(0,
432 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 470 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
433 } 471 }
434 472
435 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) { 473 TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) {
436 // First RTP packet sent. 474 // First RTP packet sent.
437 UpdateDataCounters(kFirstSsrc); 475 UpdateDataCounters(kFirstSsrc);
438 // Enable scaling. 476 // Enable adaptation.
439 statistics_proxy_->SetQualityScalingStats(0); 477 ViEEncoder::AdaptCounts cpu_counts;
440 statistics_proxy_->SetCpuScalingStats(0); 478 ViEEncoder::AdaptCounts quality_counts;
479 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
441 // Min runtime has not passed. 480 // Min runtime has not passed.
442 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1); 481 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1);
443 statistics_proxy_.reset(); 482 statistics_proxy_.reset();
444 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 483 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
445 EXPECT_EQ(0, 484 EXPECT_EQ(0,
446 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 485 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
447 } 486 }
448 487
449 TEST_F(SendStatisticsProxyTest, ZeroCpuAdaptChangesReported) { 488 TEST_F(SendStatisticsProxyTest, ZeroAdaptChangesReported) {
450 // First RTP packet sent. 489 // First RTP packet sent.
451 UpdateDataCounters(kFirstSsrc); 490 UpdateDataCounters(kFirstSsrc);
452 // Enable scaling. 491 // Enable adaptation.
453 statistics_proxy_->SetCpuScalingStats(0); 492 ViEEncoder::AdaptCounts cpu_counts;
493 ViEEncoder::AdaptCounts quality_counts;
494 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
454 // Min runtime has passed. 495 // Min runtime has passed.
455 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); 496 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000);
456 statistics_proxy_.reset(); 497 statistics_proxy_.reset();
457 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 498 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
458 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 0)); 499 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 0));
459 }
460
461 TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) {
462 // First RTP packet sent.
463 UpdateDataCounters(kFirstSsrc);
464 // Enable scaling.
465 statistics_proxy_->SetQualityScalingStats(0);
466 // Min runtime has passed.
467 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000);
468 statistics_proxy_.reset();
469 EXPECT_EQ(1, 500 EXPECT_EQ(1,
470 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 501 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
471 EXPECT_EQ( 502 EXPECT_EQ(
472 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 0)); 503 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 0));
473 } 504 }
474 505
475 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) { 506 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) {
476 // First RTP packet sent. 507 // First RTP packet sent.
477 UpdateDataCounters(kFirstSsrc); 508 UpdateDataCounters(kFirstSsrc);
478 // Enable scaling. 509 // Enable adaptation.
510 ViEEncoder::AdaptCounts cpu_counts;
511 ViEEncoder::AdaptCounts quality_counts;
512 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
479 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. 513 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
480 statistics_proxy_->SetCpuScalingStats(0); 514 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
481 statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
482 fake_clock_.AdvanceTimeMilliseconds(10000); 515 fake_clock_.AdvanceTimeMilliseconds(10000);
483 statistics_proxy_.reset(); 516 statistics_proxy_.reset();
484 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 517 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
485 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6)); 518 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6));
486 } 519 }
487 520
488 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { 521 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) {
489 // First RTP packet sent. 522 // First RTP packet sent.
490 UpdateDataCounters(kFirstSsrc); 523 UpdateDataCounters(kFirstSsrc);
491 524
492 // Disable scaling. 525 // Disable quality adaptation.
493 statistics_proxy_->SetQualityScalingStats(-1); 526 ViEEncoder::AdaptCounts cpu_counts;
527 ViEEncoder::AdaptCounts quality_counts;
528 quality_counts.fps = -1;
529 quality_counts.resolution = -1;
530 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
494 fake_clock_.AdvanceTimeMilliseconds(10000); 531 fake_clock_.AdvanceTimeMilliseconds(10000);
495 532
496 // Enable scaling. 533 // Enable quality adaptation.
497 // Adapt changes: 2, elapsed time: 20 sec. 534 // Adapt changes: 2, elapsed time: 20 sec.
498 statistics_proxy_->SetQualityScalingStats(0); 535 quality_counts.fps = 0;
536 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
499 fake_clock_.AdvanceTimeMilliseconds(5000); 537 fake_clock_.AdvanceTimeMilliseconds(5000);
500 statistics_proxy_->SetQualityScalingStats(1); 538 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
501 fake_clock_.AdvanceTimeMilliseconds(9000); 539 fake_clock_.AdvanceTimeMilliseconds(9000);
502 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); 540 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
503 fake_clock_.AdvanceTimeMilliseconds(6000); 541 fake_clock_.AdvanceTimeMilliseconds(6000);
504 statistics_proxy_->OnQualityRestrictedResolutionChanged(2); 542 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
505 543
506 // Disable scaling. 544 // Disable quality adaptation.
507 statistics_proxy_->SetQualityScalingStats(-1); 545 quality_counts.fps = -1;
546 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
508 fake_clock_.AdvanceTimeMilliseconds(30000); 547 fake_clock_.AdvanceTimeMilliseconds(30000);
509 548
510 // Enable scaling. 549 // Enable quality adaptation.
511 // Adapt changes: 1, elapsed time: 10 sec. 550 // Adapt changes: 1, elapsed time: 10 sec.
512 statistics_proxy_->SetQualityScalingStats(0); 551 quality_counts.resolution = 0;
513 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); 552 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
553 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
514 fake_clock_.AdvanceTimeMilliseconds(10000); 554 fake_clock_.AdvanceTimeMilliseconds(10000);
515 555
516 // Disable scaling. 556 // Disable quality adaptation.
517 statistics_proxy_->SetQualityScalingStats(-1); 557 quality_counts.resolution = -1;
558 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
518 fake_clock_.AdvanceTimeMilliseconds(5000); 559 fake_clock_.AdvanceTimeMilliseconds(5000);
519 statistics_proxy_->SetQualityScalingStats(-1); 560 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
520 fake_clock_.AdvanceTimeMilliseconds(20000); 561 fake_clock_.AdvanceTimeMilliseconds(20000);
521 562
522 // Adapt changes: 3, elapsed time: 30 sec => 6 per minute. 563 // Adapt changes: 3, elapsed time: 30 sec => 6 per minute.
523 statistics_proxy_.reset(); 564 statistics_proxy_.reset();
524 EXPECT_EQ(1, 565 EXPECT_EQ(1,
525 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 566 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
526 EXPECT_EQ( 567 EXPECT_EQ(
527 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); 568 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6));
528 } 569 }
529 570
(...skipping 12 matching lines...) Expand all
542 statistics_proxy_.reset(); 583 statistics_proxy_.reset();
543 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 584 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
544 EXPECT_EQ(0, 585 EXPECT_EQ(0,
545 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 586 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
546 } 587 }
547 588
548 TEST_F(SendStatisticsProxyTest, QualityAdaptChangesStatsExcludesSuspendedTime) { 589 TEST_F(SendStatisticsProxyTest, QualityAdaptChangesStatsExcludesSuspendedTime) {
549 // First RTP packet sent. 590 // First RTP packet sent.
550 UpdateDataCounters(kFirstSsrc); 591 UpdateDataCounters(kFirstSsrc);
551 592
552 // Enable scaling. 593 // Enable adaptation.
594 ViEEncoder::AdaptCounts cpu_counts;
595 ViEEncoder::AdaptCounts quality_counts;
553 // Adapt changes: 2, elapsed time: 20 sec. 596 // Adapt changes: 2, elapsed time: 20 sec.
554 statistics_proxy_->SetQualityScalingStats(0); 597 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
555 fake_clock_.AdvanceTimeMilliseconds(20000); 598 fake_clock_.AdvanceTimeMilliseconds(20000);
556 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); 599 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
557 statistics_proxy_->OnQualityRestrictedResolutionChanged(2); 600 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
558 601
559 // Suspend and resume video. 602 // Suspend and resume video.
560 statistics_proxy_->OnSuspendChange(true); 603 statistics_proxy_->OnSuspendChange(true);
561 fake_clock_.AdvanceTimeMilliseconds(30000); 604 fake_clock_.AdvanceTimeMilliseconds(30000);
562 statistics_proxy_->OnSuspendChange(false); 605 statistics_proxy_->OnSuspendChange(false);
563 606
564 // Adapt changes: 1, elapsed time: 10 sec. 607 // Adapt changes: 1, elapsed time: 10 sec.
565 statistics_proxy_->OnQualityRestrictedResolutionChanged(3); 608 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
566 fake_clock_.AdvanceTimeMilliseconds(10000); 609 fake_clock_.AdvanceTimeMilliseconds(10000);
567 610
568 // Adapt changes: 3, elapsed time: 30 sec => 6 per minute. 611 // Adapt changes: 3, elapsed time: 30 sec => 6 per minute.
569 statistics_proxy_.reset(); 612 statistics_proxy_.reset();
570 EXPECT_EQ(1, 613 EXPECT_EQ(1,
571 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 614 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
572 EXPECT_EQ( 615 EXPECT_EQ(
573 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); 616 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6));
574 } 617 }
575 618
576 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesStatsExcludesSuspendedTime) { 619 TEST_F(SendStatisticsProxyTest, CpuAdaptChangesStatsExcludesSuspendedTime) {
577 // First RTP packet sent. 620 // First RTP packet sent.
578 UpdateDataCounters(kFirstSsrc); 621 UpdateDataCounters(kFirstSsrc);
579 622
580 // Video not suspended. 623 // Video not suspended.
581 statistics_proxy_->OnSuspendChange(false); 624 statistics_proxy_->OnSuspendChange(false);
582 fake_clock_.AdvanceTimeMilliseconds(30000); 625 fake_clock_.AdvanceTimeMilliseconds(30000);
583 626
584 // Enable scaling. 627 // Enable adaptation.
628 ViEEncoder::AdaptCounts cpu_counts;
629 ViEEncoder::AdaptCounts quality_counts;
585 // Adapt changes: 1, elapsed time: 20 sec. 630 // Adapt changes: 1, elapsed time: 20 sec.
586 statistics_proxy_->SetCpuScalingStats(0); 631 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
587 fake_clock_.AdvanceTimeMilliseconds(10000); 632 fake_clock_.AdvanceTimeMilliseconds(10000);
588 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 633 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
589 634
590 // Video not suspended, stats time already started. 635 // Video not suspended, stats time already started.
591 statistics_proxy_->OnSuspendChange(false); 636 statistics_proxy_->OnSuspendChange(false);
592 fake_clock_.AdvanceTimeMilliseconds(10000); 637 fake_clock_.AdvanceTimeMilliseconds(10000);
593 638
594 // Disable scaling. 639 // Disable adaptation.
595 statistics_proxy_->SetCpuScalingStats(-1); 640 cpu_counts.fps = -1;
641 cpu_counts.resolution = -1;
642 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
596 fake_clock_.AdvanceTimeMilliseconds(30000); 643 fake_clock_.AdvanceTimeMilliseconds(30000);
597 644
598 // Suspend and resume video, stats time not started when scaling not enabled. 645 // Suspend and resume video, stats time not started when scaling not enabled.
599 statistics_proxy_->OnSuspendChange(true); 646 statistics_proxy_->OnSuspendChange(true);
600 fake_clock_.AdvanceTimeMilliseconds(30000); 647 fake_clock_.AdvanceTimeMilliseconds(30000);
601 statistics_proxy_->OnSuspendChange(false); 648 statistics_proxy_->OnSuspendChange(false);
602 fake_clock_.AdvanceTimeMilliseconds(30000); 649 fake_clock_.AdvanceTimeMilliseconds(30000);
603 650
604 // Enable scaling. 651 // Enable adaptation.
605 // Adapt changes: 1, elapsed time: 10 sec. 652 // Adapt changes: 1, elapsed time: 10 sec.
606 statistics_proxy_->SetCpuScalingStats(0); 653 cpu_counts.fps = 0;
654 cpu_counts.resolution = 0;
655 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
607 fake_clock_.AdvanceTimeMilliseconds(10000); 656 fake_clock_.AdvanceTimeMilliseconds(10000);
608 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 657 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
609 658
610 // Adapt changes: 2, elapsed time: 30 sec => 4 per minute. 659 // Adapt changes: 2, elapsed time: 30 sec => 4 per minute.
611 statistics_proxy_.reset(); 660 statistics_proxy_.reset();
612 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 661 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
613 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 4)); 662 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 4));
614 } 663 }
615 664
616 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsNotStartedIfVideoSuspended) { 665 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsNotStartedIfVideoSuspended) {
617 // First RTP packet sent. 666 // First RTP packet sent.
618 UpdateDataCounters(kFirstSsrc); 667 UpdateDataCounters(kFirstSsrc);
619 668
620 // Video suspended. 669 // Video suspended.
621 statistics_proxy_->OnSuspendChange(true); 670 statistics_proxy_->OnSuspendChange(true);
622 671
623 // Enable scaling, stats time not started when suspended. 672 // Enable adaptation, stats time not started when suspended.
624 statistics_proxy_->SetCpuScalingStats(0); 673 ViEEncoder::AdaptCounts cpu_counts;
674 ViEEncoder::AdaptCounts quality_counts;
675 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
625 fake_clock_.AdvanceTimeMilliseconds(10000); 676 fake_clock_.AdvanceTimeMilliseconds(10000);
626 677
627 // Resume video, stats time started. 678 // Resume video, stats time started.
628 // Adapt changes: 1, elapsed time: 10 sec. 679 // Adapt changes: 1, elapsed time: 10 sec.
629 statistics_proxy_->OnSuspendChange(false); 680 statistics_proxy_->OnSuspendChange(false);
630 fake_clock_.AdvanceTimeMilliseconds(10000); 681 fake_clock_.AdvanceTimeMilliseconds(10000);
631 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 682 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
632 683
633 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. 684 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
634 statistics_proxy_.reset(); 685 statistics_proxy_.reset();
635 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 686 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
636 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6)); 687 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6));
637 } 688 }
638 689
639 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) { 690 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) {
640 // Send first packet, scaling enabled. 691 // Send first packet, adaptation enabled.
641 // Elapsed time before first packet is sent should be excluded. 692 // Elapsed time before first packet is sent should be excluded.
642 statistics_proxy_->SetQualityScalingStats(0); 693 ViEEncoder::AdaptCounts cpu_counts;
694 ViEEncoder::AdaptCounts quality_counts;
695 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
643 fake_clock_.AdvanceTimeMilliseconds(10000); 696 fake_clock_.AdvanceTimeMilliseconds(10000);
644 UpdateDataCounters(kFirstSsrc); 697 UpdateDataCounters(kFirstSsrc);
645 698
646 // Adapt changes: 1, elapsed time: 10 sec. 699 // Adapt changes: 1, elapsed time: 10 sec.
647 fake_clock_.AdvanceTimeMilliseconds(10000); 700 fake_clock_.AdvanceTimeMilliseconds(10000);
648 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); 701 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
649 UpdateDataCounters(kFirstSsrc); 702 UpdateDataCounters(kFirstSsrc);
650 703
651 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. 704 // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
652 statistics_proxy_.reset(); 705 statistics_proxy_.reset();
653 EXPECT_EQ(1, 706 EXPECT_EQ(1,
654 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 707 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
655 EXPECT_EQ( 708 EXPECT_EQ(
656 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); 709 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6));
657 } 710 }
658 711
659 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) { 712 TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) {
660 // Enable and disable scaling. 713 // Enable and disable adaptation.
661 statistics_proxy_->SetCpuScalingStats(0); 714 ViEEncoder::AdaptCounts cpu_counts;
715 ViEEncoder::AdaptCounts quality_counts;
716 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
662 fake_clock_.AdvanceTimeMilliseconds(60000); 717 fake_clock_.AdvanceTimeMilliseconds(60000);
663 statistics_proxy_->SetCpuScalingStats(-1); 718 cpu_counts.fps = -1;
719 cpu_counts.resolution = -1;
720 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
664 721
665 // Send first packet, scaling disabled. 722 // Send first packet, scaling disabled.
666 // Elapsed time before first packet is sent should be excluded. 723 // Elapsed time before first packet is sent should be excluded.
667 UpdateDataCounters(kFirstSsrc); 724 UpdateDataCounters(kFirstSsrc);
668 fake_clock_.AdvanceTimeMilliseconds(60000); 725 fake_clock_.AdvanceTimeMilliseconds(60000);
669 726
670 // Enable scaling. 727 // Enable adaptation.
671 statistics_proxy_->SetCpuScalingStats(0); 728 cpu_counts.resolution = 0;
729 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
672 fake_clock_.AdvanceTimeMilliseconds(10000); 730 fake_clock_.AdvanceTimeMilliseconds(10000);
673 UpdateDataCounters(kFirstSsrc); 731 UpdateDataCounters(kFirstSsrc);
674 732
675 // Adapt changes: 1, elapsed time: 20 sec. 733 // Adapt changes: 1, elapsed time: 20 sec.
676 fake_clock_.AdvanceTimeMilliseconds(10000); 734 fake_clock_.AdvanceTimeMilliseconds(10000);
677 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 735 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
678 736
679 // Adapt changes: 1, elapsed time: 20 sec => 3 per minute. 737 // Adapt changes: 1, elapsed time: 20 sec => 3 per minute.
680 statistics_proxy_.reset(); 738 statistics_proxy_.reset();
681 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 739 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
682 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 3)); 740 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 3));
683 } 741 }
684 742
685 TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) { 743 TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) {
686 // First RTP packet sent, scaling enabled. 744 // First RTP packet sent, cpu adaptation enabled.
687 UpdateDataCounters(kFirstSsrc); 745 UpdateDataCounters(kFirstSsrc);
688 statistics_proxy_->SetCpuScalingStats(0); 746 ViEEncoder::AdaptCounts cpu_counts;
747 ViEEncoder::AdaptCounts quality_counts;
748 quality_counts.fps = -1;
749 quality_counts.resolution = -1;
750 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
689 751
690 // Adapt changes: 2, elapsed time: 15 sec => 8 per minute. 752 // Adapt changes: 2, elapsed time: 15 sec => 8 per minute.
691 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 753 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
692 fake_clock_.AdvanceTimeMilliseconds(6000); 754 fake_clock_.AdvanceTimeMilliseconds(6000);
693 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 755 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
694 fake_clock_.AdvanceTimeMilliseconds(9000); 756 fake_clock_.AdvanceTimeMilliseconds(9000);
695 757
696 // Switch content type, real-time stats should be updated. 758 // Switch content type, real-time stats should be updated.
697 VideoEncoderConfig config; 759 VideoEncoderConfig config;
698 config.content_type = VideoEncoderConfig::ContentType::kScreen; 760 config.content_type = VideoEncoderConfig::ContentType::kScreen;
699 statistics_proxy_->OnEncoderReconfigured(config, 50); 761 statistics_proxy_->OnEncoderReconfigured(config, 50);
700 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); 762 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
701 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 8)); 763 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 8));
702 EXPECT_EQ(0, 764 EXPECT_EQ(0,
703 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); 765 metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
704 766
705 // First RTP packet sent, scaling enabled. 767 // First RTP packet sent, scaling enabled.
706 UpdateDataCounters(kFirstSsrc); 768 UpdateDataCounters(kFirstSsrc);
707 statistics_proxy_->SetCpuScalingStats(0); 769 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
708 770
709 // Adapt changes: 4, elapsed time: 120 sec => 2 per minute. 771 // Adapt changes: 4, elapsed time: 120 sec => 2 per minute.
710 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 772 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
711 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 773 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
712 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 774 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
713 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 775 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
714 fake_clock_.AdvanceTimeMilliseconds(120000); 776 fake_clock_.AdvanceTimeMilliseconds(120000);
715 777
716 statistics_proxy_.reset(); 778 statistics_proxy_.reset();
717 EXPECT_EQ(1, metrics::NumSamples( 779 EXPECT_EQ(1, metrics::NumSamples(
718 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Cpu")); 780 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Cpu"));
719 EXPECT_EQ(1, metrics::NumEvents( 781 EXPECT_EQ(1, metrics::NumEvents(
720 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Cpu", 2)); 782 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Cpu", 2));
721 EXPECT_EQ(0, metrics::NumSamples( 783 EXPECT_EQ(0, metrics::NumSamples(
722 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Quality")); 784 "WebRTC.Video.Screenshare.AdaptChangesPerMinute.Quality"));
723 } 785 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 encoded_image._timeStamp = i + 1; 897 encoded_image._timeStamp = i + 1;
836 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); 898 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
837 } 899 }
838 // Suspended time interval should not affect the framerate. 900 // Suspended time interval should not affect the framerate.
839 statistics_proxy_.reset(); 901 statistics_proxy_.reset();
840 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.SentFramesPerSecond")); 902 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.SentFramesPerSecond"));
841 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.SentFramesPerSecond", kFps)); 903 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.SentFramesPerSecond", kFps));
842 } 904 }
843 905
844 TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramNotUpdatedWhenDisabled) { 906 TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramNotUpdatedWhenDisabled) {
845 const int kNumDownscales = -1; 907 ViEEncoder::AdaptCounts cpu_counts;
846 statistics_proxy_->SetQualityScalingStats(kNumDownscales); 908 ViEEncoder::AdaptCounts quality_counts;
909 cpu_counts.resolution = -1;
910 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
847 911
848 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) 912 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
849 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); 913 statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
850 914
851 statistics_proxy_.reset(); 915 statistics_proxy_.reset();
852 EXPECT_EQ(0, 916 EXPECT_EQ(0,
853 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent")); 917 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent"));
854 } 918 }
855 919
856 TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramUpdated) { 920 TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramUpdated) {
857 const int kNumDownscales = 0; 921 ViEEncoder::AdaptCounts cpu_counts;
858 statistics_proxy_->SetCpuScalingStats(kNumDownscales); 922 ViEEncoder::AdaptCounts quality_counts;
923 cpu_counts.resolution = 0;
924 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
859 925
860 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) 926 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
861 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); 927 statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
862 928
863 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); 929 cpu_counts.resolution = 1;
930 statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
864 931
865 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) 932 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
866 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); 933 statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
867 934
868 statistics_proxy_.reset(); 935 statistics_proxy_.reset();
869 EXPECT_EQ(1, 936 EXPECT_EQ(1,
870 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent")); 937 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent"));
871 EXPECT_EQ( 938 EXPECT_EQ(
872 1, metrics::NumEvents("WebRTC.Video.CpuLimitedResolutionInPercent", 50)); 939 1, metrics::NumEvents("WebRTC.Video.CpuLimitedResolutionInPercent", 50));
873 } 940 }
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 // Resolutions disabled. 1209 // Resolutions disabled.
1143 EXPECT_EQ(1, metrics::NumSamples( 1210 EXPECT_EQ(1, metrics::NumSamples(
1144 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); 1211 "WebRTC.Video.BandwidthLimitedResolutionsDisabled"));
1145 EXPECT_EQ( 1212 EXPECT_EQ(
1146 1, metrics::NumEvents("WebRTC.Video.BandwidthLimitedResolutionsDisabled", 1213 1, metrics::NumEvents("WebRTC.Video.BandwidthLimitedResolutionsDisabled",
1147 kResolutionsDisabled)); 1214 kResolutionsDisabled));
1148 } 1215 }
1149 1216
1150 TEST_F(SendStatisticsProxyTest, 1217 TEST_F(SendStatisticsProxyTest,
1151 QualityLimitedHistogramsNotUpdatedWhenDisabled) { 1218 QualityLimitedHistogramsNotUpdatedWhenDisabled) {
1152 const int kNumDownscales = -1; 1219 ViEEncoder::AdaptCounts cpu_counts;
1220 ViEEncoder::AdaptCounts quality_counts;
1221 quality_counts.resolution = -1;
1222 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
1153 EncodedImage encoded_image; 1223 EncodedImage encoded_image;
1154 statistics_proxy_->SetQualityScalingStats(kNumDownscales);
1155 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) 1224 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
1156 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo); 1225 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo);
1157 1226
1158 // Histograms are updated when the statistics_proxy_ is deleted. 1227 // Histograms are updated when the statistics_proxy_ is deleted.
1159 statistics_proxy_.reset(); 1228 statistics_proxy_.reset();
1160 EXPECT_EQ( 1229 EXPECT_EQ(
1161 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); 1230 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent"));
1162 EXPECT_EQ(0, metrics::NumSamples( 1231 EXPECT_EQ(0, metrics::NumSamples(
1163 "WebRTC.Video.QualityLimitedResolutionDownscales")); 1232 "WebRTC.Video.QualityLimitedResolutionDownscales"));
1164 } 1233 }
1165 1234
1166 TEST_F(SendStatisticsProxyTest, 1235 TEST_F(SendStatisticsProxyTest,
1167 QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) { 1236 QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) {
1168 const int kNumDownscales = 0; 1237 ViEEncoder::AdaptCounts cpu_counts;
1238 ViEEncoder::AdaptCounts quality_counts;
1239 quality_counts.resolution = 0;
1240 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
1169 EncodedImage encoded_image; 1241 EncodedImage encoded_image;
1170 statistics_proxy_->SetQualityScalingStats(kNumDownscales);
1171 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) 1242 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
1172 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo); 1243 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo);
1173 1244
1174 // Histograms are updated when the statistics_proxy_ is deleted. 1245 // Histograms are updated when the statistics_proxy_ is deleted.
1175 statistics_proxy_.reset(); 1246 statistics_proxy_.reset();
1176 EXPECT_EQ( 1247 EXPECT_EQ(
1177 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); 1248 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent"));
1178 EXPECT_EQ(1, metrics::NumEvents( 1249 EXPECT_EQ(1, metrics::NumEvents(
1179 "WebRTC.Video.QualityLimitedResolutionInPercent", 0)); 1250 "WebRTC.Video.QualityLimitedResolutionInPercent", 0));
1180 // No resolution downscale. 1251 // No resolution downscale.
1181 EXPECT_EQ(0, metrics::NumSamples( 1252 EXPECT_EQ(0, metrics::NumSamples(
1182 "WebRTC.Video.QualityLimitedResolutionDownscales")); 1253 "WebRTC.Video.QualityLimitedResolutionDownscales"));
1183 } 1254 }
1184 1255
1185 TEST_F(SendStatisticsProxyTest, 1256 TEST_F(SendStatisticsProxyTest,
1186 QualityLimitedHistogramsUpdatedWhenEnabled_TwoResolutionDownscales) { 1257 QualityLimitedHistogramsUpdatedWhenEnabled_TwoResolutionDownscales) {
1187 const int kDownscales = 2; 1258 const int kDownscales = 2;
1259 ViEEncoder::AdaptCounts cpu_counts;
1260 ViEEncoder::AdaptCounts quality_counts;
1261 quality_counts.resolution = kDownscales;
1262 statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
1188 EncodedImage encoded_image; 1263 EncodedImage encoded_image;
1189 statistics_proxy_->OnQualityRestrictedResolutionChanged(kDownscales);
1190 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) 1264 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
1191 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo); 1265 statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo);
1192 // Histograms are updated when the statistics_proxy_ is deleted. 1266 // Histograms are updated when the statistics_proxy_ is deleted.
1193 statistics_proxy_.reset(); 1267 statistics_proxy_.reset();
1194 EXPECT_EQ( 1268 EXPECT_EQ(
1195 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); 1269 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent"));
1196 EXPECT_EQ(1, metrics::NumEvents( 1270 EXPECT_EQ(1, metrics::NumEvents(
1197 "WebRTC.Video.QualityLimitedResolutionInPercent", 100)); 1271 "WebRTC.Video.QualityLimitedResolutionInPercent", 100));
1198 // Resolution downscales. 1272 // Resolution downscales.
1199 EXPECT_EQ(1, metrics::NumSamples( 1273 EXPECT_EQ(1, metrics::NumSamples(
(...skipping 14 matching lines...) Expand all
1214 // Simulcast disabled resolutions 1288 // Simulcast disabled resolutions
1215 encoded_image.adapt_reason_.bw_resolutions_disabled = 1; 1289 encoded_image.adapt_reason_.bw_resolutions_disabled = 1;
1216 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); 1290 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
1217 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); 1291 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
1218 1292
1219 encoded_image.adapt_reason_.bw_resolutions_disabled = 0; 1293 encoded_image.adapt_reason_.bw_resolutions_disabled = 0;
1220 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); 1294 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
1221 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution); 1295 EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
1222 1296
1223 // Resolution scaled due to quality. 1297 // Resolution scaled due to quality.
1224 statistics_proxy_->OnQualityRestrictedResolutionChanged(1); 1298 ViEEncoder::AdaptCounts cpu_counts;
1299 ViEEncoder::AdaptCounts quality_counts;
1300 quality_counts.resolution = 1;
1301 statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
1225 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); 1302 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
1226 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution); 1303 EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
1227 } 1304 }
1228 1305
1229 TEST_F(SendStatisticsProxyTest, GetStatsReportsTargetMediaBitrate) { 1306 TEST_F(SendStatisticsProxyTest, GetStatsReportsTargetMediaBitrate) {
1230 // Initially zero. 1307 // Initially zero.
1231 EXPECT_EQ(0, statistics_proxy_->GetStats().target_media_bitrate_bps); 1308 EXPECT_EQ(0, statistics_proxy_->GetStats().target_media_bitrate_bps);
1232 1309
1233 const int kBitrate = 100000; 1310 const int kBitrate = 100000;
1234 statistics_proxy_->OnSetEncoderTargetRate(kBitrate); 1311 statistics_proxy_->OnSetEncoderTargetRate(kBitrate);
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1716 fake_clock_.AdvanceTimeMilliseconds(kPeriodIntervalMs); 1793 fake_clock_.AdvanceTimeMilliseconds(kPeriodIntervalMs);
1717 proxy->DataCountersUpdated(counters, kFirstSsrc); 1794 proxy->DataCountersUpdated(counters, kFirstSsrc);
1718 } 1795 }
1719 1796
1720 // FEC not enabled. 1797 // FEC not enabled.
1721 statistics_proxy_.reset(); 1798 statistics_proxy_.reset();
1722 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); 1799 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps"));
1723 } 1800 }
1724 1801
1725 } // namespace webrtc 1802 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/send_statistics_proxy.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698