Index: webrtc/video/vie_encoder_unittest.cc |
diff --git a/webrtc/video/vie_encoder_unittest.cc b/webrtc/video/vie_encoder_unittest.cc |
index 4c19d5806ddc3547a44992c8fc46b9a5a23896bf..f037600e7d88025615d9a2e48184f921d21b9da3 100644 |
--- a/webrtc/video/vie_encoder_unittest.cc |
+++ b/webrtc/video/vie_encoder_unittest.cc |
@@ -930,6 +930,48 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsQualityAdaptation) { |
vie_encoder_->Stop(); |
} |
+TEST_F(ViEEncoderTest, QualityAdaptationStatsAreResetWhenScalerIsDisabled) { |
+ vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); |
+ |
+ const int kWidth = 1280; |
+ const int kHeight = 720; |
+ video_source_.set_adaptation_enabled(true); |
+ video_source_.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(1); |
+ EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
+ EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
+ EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
+ |
+ // Trigger adapt down. |
+ vie_encoder_->TriggerQualityLow(); |
+ video_source_.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(2); |
+ EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
+ EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
+ EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
+ |
+ // Trigger overuse. |
+ vie_encoder_->TriggerCpuOveruse(); |
+ video_source_.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(3); |
+ EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
+ EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
+ EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
+ |
+ // Set source with adaptation still enabled but quality scaler is off. |
+ fake_encoder_.SetQualityScaling(false); |
+ vie_encoder_->SetSource(&video_source_, |
+ VideoSendStream::DegradationPreference::kBalanced); |
+ |
+ video_source_.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(4); |
+ EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
+ EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
+ EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
+ |
+ vie_encoder_->Stop(); |
+} |
+ |
TEST_F(ViEEncoderTest, StatsTracksAdaptationStatsWhenSwitchingSource) { |
vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); |