| Index: webrtc/video/send_statistics_proxy_unittest.cc
|
| diff --git a/webrtc/video/send_statistics_proxy_unittest.cc b/webrtc/video/send_statistics_proxy_unittest.cc
|
| index edb756433bff5d00e166a863e6bbb8fd51cac683..4f09e48bd4408ab67134bbd9eb3a79e3c637cf45 100644
|
| --- a/webrtc/video/send_statistics_proxy_unittest.cc
|
| +++ b/webrtc/video/send_statistics_proxy_unittest.cc
|
| @@ -367,61 +367,99 @@ TEST_F(SendStatisticsProxyTest, OnSendEncodedImageWithoutQpQpSumWontExist) {
|
| EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum);
|
| }
|
|
|
| -TEST_F(SendStatisticsProxyTest, SetCpuScalingUpdatesStats) {
|
| +TEST_F(SendStatisticsProxyTest, GetCpuAdaptationStats) {
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| - statistics_proxy_->SetCpuScalingStats(-1);
|
| + cpu_counts.fps = 1;
|
| + cpu_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| - EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| - statistics_proxy_->SetCpuScalingStats(1);
|
| + cpu_counts.fps = 0;
|
| + cpu_counts.resolution = 1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| + cpu_counts.fps = 1;
|
| + cpu_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| + cpu_counts.fps = -1;
|
| + cpu_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| }
|
|
|
| -TEST_F(SendStatisticsProxyTest, SetQualityScalingUpdatesStats) {
|
| - EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| - statistics_proxy_->SetQualityScalingStats(-1);
|
| +TEST_F(SendStatisticsProxyTest, GetQualityAdaptationStats) {
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| + quality_counts.fps = 1;
|
| + quality_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| - statistics_proxy_->SetQualityScalingStats(1);
|
| + quality_counts.fps = 0;
|
| + quality_counts.resolution = 1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| + quality_counts.fps = 1;
|
| + quality_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| + quality_counts.fps = -1;
|
| + quality_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| }
|
|
|
| -TEST_F(SendStatisticsProxyTest, GetStatsReportsCpuResolutionChanges) {
|
| - EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| +TEST_F(SendStatisticsProxyTest, GetStatsReportsCpuAdaptChanges) {
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
|
|
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + cpu_counts.resolution = 1;
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
|
|
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(false);
|
| - EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| + cpu_counts.resolution = 2;
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().cpu_limited_framerate);
|
| + EXPECT_TRUE(statistics_proxy_->GetStats().cpu_limited_resolution);
|
| EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
|
| + EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
| }
|
|
|
| -TEST_F(SendStatisticsProxyTest, GetStatsReportsQualityResolutionChanges) {
|
| - EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| +TEST_F(SendStatisticsProxyTest, GetStatsReportsQualityAdaptChanges) {
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
|
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| - EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| + quality_counts.fps = 1;
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| + EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| EXPECT_EQ(1, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
|
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(2);
|
| - EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| - EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
| -
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| - EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| - EXPECT_EQ(3, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
| -
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(0);
|
| + quality_counts.fps = 0;
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| + EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_framerate);
|
| EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| - EXPECT_EQ(4, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
| + EXPECT_EQ(2, statistics_proxy_->GetStats().number_of_quality_adapt_changes);
|
| + EXPECT_EQ(0, statistics_proxy_->GetStats().number_of_cpu_adapt_changes);
|
| }
|
|
|
| -TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) {
|
| +TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_AdaptationNotEnabled) {
|
| // First RTP packet sent.
|
| UpdateDataCounters(kFirstSsrc);
|
| // Min runtime has passed.
|
| @@ -435,9 +473,10 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) {
|
| TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) {
|
| // First RTP packet sent.
|
| UpdateDataCounters(kFirstSsrc);
|
| - // Enable scaling.
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + // Enable adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| // Min runtime has not passed.
|
| fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000 - 1);
|
| statistics_proxy_.reset();
|
| @@ -446,26 +485,18 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) {
|
| metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
|
| }
|
|
|
| -TEST_F(SendStatisticsProxyTest, ZeroCpuAdaptChangesReported) {
|
| +TEST_F(SendStatisticsProxyTest, ZeroAdaptChangesReported) {
|
| // First RTP packet sent.
|
| UpdateDataCounters(kFirstSsrc);
|
| - // Enable scaling.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + // Enable adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| // Min runtime has passed.
|
| fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000);
|
| statistics_proxy_.reset();
|
| EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
|
| EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 0));
|
| -}
|
| -
|
| -TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) {
|
| - // First RTP packet sent.
|
| - UpdateDataCounters(kFirstSsrc);
|
| - // Enable scaling.
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| - // Min runtime has passed.
|
| - fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000);
|
| - statistics_proxy_.reset();
|
| EXPECT_EQ(1,
|
| metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality"));
|
| EXPECT_EQ(
|
| @@ -475,10 +506,12 @@ TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) {
|
| TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) {
|
| // First RTP packet sent.
|
| UpdateDataCounters(kFirstSsrc);
|
| - // Enable scaling.
|
| + // Enable adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| statistics_proxy_.reset();
|
| EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu"));
|
| @@ -489,34 +522,42 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) {
|
| // First RTP packet sent.
|
| UpdateDataCounters(kFirstSsrc);
|
|
|
| - // Disable scaling.
|
| - statistics_proxy_->SetQualityScalingStats(-1);
|
| + // Disable quality adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + quality_counts.fps = -1;
|
| + quality_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
|
|
| - // Enable scaling.
|
| + // Enable quality adaptation.
|
| // Adapt changes: 2, elapsed time: 20 sec.
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| + quality_counts.fps = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(5000);
|
| - statistics_proxy_->SetQualityScalingStats(1);
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(9000);
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(6000);
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(2);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| - // Disable scaling.
|
| - statistics_proxy_->SetQualityScalingStats(-1);
|
| + // Disable quality adaptation.
|
| + quality_counts.fps = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(30000);
|
|
|
| - // Enable scaling.
|
| + // Enable quality adaptation.
|
| // Adapt changes: 1, elapsed time: 10 sec.
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| + quality_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
|
|
| - // Disable scaling.
|
| - statistics_proxy_->SetQualityScalingStats(-1);
|
| + // Disable quality adaptation.
|
| + quality_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(5000);
|
| - statistics_proxy_->SetQualityScalingStats(-1);
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(20000);
|
|
|
| // Adapt changes: 3, elapsed time: 30 sec => 6 per minute.
|
| @@ -549,12 +590,14 @@ TEST_F(SendStatisticsProxyTest, QualityAdaptChangesStatsExcludesSuspendedTime) {
|
| // First RTP packet sent.
|
| UpdateDataCounters(kFirstSsrc);
|
|
|
| - // Enable scaling.
|
| + // Enable adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| // Adapt changes: 2, elapsed time: 20 sec.
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(20000);
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(2);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| // Suspend and resume video.
|
| statistics_proxy_->OnSuspendChange(true);
|
| @@ -562,7 +605,7 @@ TEST_F(SendStatisticsProxyTest, QualityAdaptChangesStatsExcludesSuspendedTime) {
|
| statistics_proxy_->OnSuspendChange(false);
|
|
|
| // Adapt changes: 1, elapsed time: 10 sec.
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(3);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
|
|
| // Adapt changes: 3, elapsed time: 30 sec => 6 per minute.
|
| @@ -581,18 +624,22 @@ TEST_F(SendStatisticsProxyTest, CpuAdaptChangesStatsExcludesSuspendedTime) {
|
| statistics_proxy_->OnSuspendChange(false);
|
| fake_clock_.AdvanceTimeMilliseconds(30000);
|
|
|
| - // Enable scaling.
|
| + // Enable adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| // Adapt changes: 1, elapsed time: 20 sec.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| // Video not suspended, stats time already started.
|
| statistics_proxy_->OnSuspendChange(false);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
|
|
| - // Disable scaling.
|
| - statistics_proxy_->SetCpuScalingStats(-1);
|
| + // Disable adaptation.
|
| + cpu_counts.fps = -1;
|
| + cpu_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(30000);
|
|
|
| // Suspend and resume video, stats time not started when scaling not enabled.
|
| @@ -601,11 +648,13 @@ TEST_F(SendStatisticsProxyTest, CpuAdaptChangesStatsExcludesSuspendedTime) {
|
| statistics_proxy_->OnSuspendChange(false);
|
| fake_clock_.AdvanceTimeMilliseconds(30000);
|
|
|
| - // Enable scaling.
|
| + // Enable adaptation.
|
| // Adapt changes: 1, elapsed time: 10 sec.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + cpu_counts.fps = 0;
|
| + cpu_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| // Adapt changes: 2, elapsed time: 30 sec => 4 per minute.
|
| statistics_proxy_.reset();
|
| @@ -620,15 +669,17 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsNotStartedIfVideoSuspended) {
|
| // Video suspended.
|
| statistics_proxy_->OnSuspendChange(true);
|
|
|
| - // Enable scaling, stats time not started when suspended.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + // Enable adaptation, stats time not started when suspended.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
|
|
| // Resume video, stats time started.
|
| // Adapt changes: 1, elapsed time: 10 sec.
|
| statistics_proxy_->OnSuspendChange(false);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
|
| statistics_proxy_.reset();
|
| @@ -637,15 +688,17 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsNotStartedIfVideoSuspended) {
|
| }
|
|
|
| TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) {
|
| - // Send first packet, scaling enabled.
|
| + // Send first packet, adaptation enabled.
|
| // Elapsed time before first packet is sent should be excluded.
|
| - statistics_proxy_->SetQualityScalingStats(0);
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| UpdateDataCounters(kFirstSsrc);
|
|
|
| // Adapt changes: 1, elapsed time: 10 sec.
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| UpdateDataCounters(kFirstSsrc);
|
|
|
| // Adapt changes: 1, elapsed time: 10 sec => 6 per minute.
|
| @@ -657,24 +710,29 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) {
|
| }
|
|
|
| TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) {
|
| - // Enable and disable scaling.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + // Enable and disable adaptation.
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(60000);
|
| - statistics_proxy_->SetCpuScalingStats(-1);
|
| + cpu_counts.fps = -1;
|
| + cpu_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
|
|
| // Send first packet, scaling disabled.
|
| // Elapsed time before first packet is sent should be excluded.
|
| UpdateDataCounters(kFirstSsrc);
|
| fake_clock_.AdvanceTimeMilliseconds(60000);
|
|
|
| - // Enable scaling.
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + // Enable adaptation.
|
| + cpu_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| UpdateDataCounters(kFirstSsrc);
|
|
|
| // Adapt changes: 1, elapsed time: 20 sec.
|
| fake_clock_.AdvanceTimeMilliseconds(10000);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| // Adapt changes: 1, elapsed time: 20 sec => 3 per minute.
|
| statistics_proxy_.reset();
|
| @@ -683,14 +741,18 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) {
|
| }
|
|
|
| TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) {
|
| - // First RTP packet sent, scaling enabled.
|
| + // First RTP packet sent, cpu adaptation enabled.
|
| UpdateDataCounters(kFirstSsrc);
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + quality_counts.fps = -1;
|
| + quality_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
|
|
| // Adapt changes: 2, elapsed time: 15 sec => 8 per minute.
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(6000);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(9000);
|
|
|
| // Switch content type, real-time stats should be updated.
|
| @@ -704,13 +766,13 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) {
|
|
|
| // First RTP packet sent, scaling enabled.
|
| UpdateDataCounters(kFirstSsrc);
|
| - statistics_proxy_->SetCpuScalingStats(0);
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
|
|
| // Adapt changes: 4, elapsed time: 120 sec => 2 per minute.
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
| fake_clock_.AdvanceTimeMilliseconds(120000);
|
|
|
| statistics_proxy_.reset();
|
| @@ -842,8 +904,10 @@ TEST_F(SendStatisticsProxyTest, SentFpsHistogramExcludesSuspendedTime) {
|
| }
|
|
|
| TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramNotUpdatedWhenDisabled) {
|
| - const int kNumDownscales = -1;
|
| - statistics_proxy_->SetQualityScalingStats(kNumDownscales);
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + cpu_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
|
|
| for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
|
| statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
|
| @@ -854,13 +918,16 @@ TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramNotUpdatedWhenDisabled) {
|
| }
|
|
|
| TEST_F(SendStatisticsProxyTest, CpuLimitedHistogramUpdated) {
|
| - const int kNumDownscales = 0;
|
| - statistics_proxy_->SetCpuScalingStats(kNumDownscales);
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + cpu_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
|
|
| for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
|
| statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
|
|
|
| - statistics_proxy_->OnCpuRestrictedResolutionChanged(true);
|
| + cpu_counts.resolution = 1;
|
| + statistics_proxy_->OnCpuAdaptationChanged(cpu_counts, quality_counts);
|
|
|
| for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
|
| statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
|
| @@ -1149,9 +1216,11 @@ TEST_F(SendStatisticsProxyTest,
|
|
|
| TEST_F(SendStatisticsProxyTest,
|
| QualityLimitedHistogramsNotUpdatedWhenDisabled) {
|
| - const int kNumDownscales = -1;
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + quality_counts.resolution = -1;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| EncodedImage encoded_image;
|
| - statistics_proxy_->SetQualityScalingStats(kNumDownscales);
|
| for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
|
| statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo);
|
|
|
| @@ -1165,9 +1234,11 @@ TEST_F(SendStatisticsProxyTest,
|
|
|
| TEST_F(SendStatisticsProxyTest,
|
| QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) {
|
| - const int kNumDownscales = 0;
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + quality_counts.resolution = 0;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| EncodedImage encoded_image;
|
| - statistics_proxy_->SetQualityScalingStats(kNumDownscales);
|
| for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
|
| statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo);
|
|
|
| @@ -1185,8 +1256,11 @@ TEST_F(SendStatisticsProxyTest,
|
| TEST_F(SendStatisticsProxyTest,
|
| QualityLimitedHistogramsUpdatedWhenEnabled_TwoResolutionDownscales) {
|
| const int kDownscales = 2;
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + quality_counts.resolution = kDownscales;
|
| + statistics_proxy_->SetAdaptationStats(cpu_counts, quality_counts);
|
| EncodedImage encoded_image;
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(kDownscales);
|
| for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i)
|
| statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo);
|
| // Histograms are updated when the statistics_proxy_ is deleted.
|
| @@ -1221,7 +1295,10 @@ TEST_F(SendStatisticsProxyTest, GetStatsReportsBandwidthLimitedResolution) {
|
| EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
|
|
|
| // Resolution scaled due to quality.
|
| - statistics_proxy_->OnQualityRestrictedResolutionChanged(1);
|
| + ViEEncoder::AdaptCounts cpu_counts;
|
| + ViEEncoder::AdaptCounts quality_counts;
|
| + quality_counts.resolution = 1;
|
| + statistics_proxy_->OnQualityAdaptationChanged(cpu_counts, quality_counts);
|
| statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
|
| EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
|
| }
|
|
|