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 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |