| Index: webrtc/video/vie_encoder_unittest.cc | 
| diff --git a/webrtc/video/vie_encoder_unittest.cc b/webrtc/video/vie_encoder_unittest.cc | 
| index 6cc25cfb80e925946ec1a897f915b6169fecbdf4..1bb904be7cc7f39983cca026707c5bd9c238709c 100644 | 
| --- a/webrtc/video/vie_encoder_unittest.cc | 
| +++ b/webrtc/video/vie_encoder_unittest.cc | 
| @@ -585,12 +585,15 @@ TEST_F(ViEEncoderTest, | 
| int frame_width = 1280; | 
| int frame_height = 720; | 
|  | 
| +  video_source_.IncomingCapturedFrame( | 
| +      CreateFrame(1, frame_width, frame_height)); | 
| +  sink_.WaitForEncodedFrame(1); | 
| // Trigger CPU overuse. | 
| vie_encoder_->TriggerCpuOveruse(); | 
|  | 
| video_source_.IncomingCapturedFrame( | 
| -      CreateFrame(1, frame_width, frame_height)); | 
| -  sink_.WaitForEncodedFrame(1); | 
| +      CreateFrame(2, frame_width, frame_height)); | 
| +  sink_.WaitForEncodedFrame(2); | 
| EXPECT_LT(video_source_.sink_wants().max_pixel_count.value_or( | 
| std::numeric_limits<int>::max()), | 
| frame_width * frame_height); | 
| @@ -606,8 +609,8 @@ TEST_F(ViEEncoderTest, | 
| EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up); | 
|  | 
| new_video_source.IncomingCapturedFrame( | 
| -      CreateFrame(2, frame_width, frame_height)); | 
| -  sink_.WaitForEncodedFrame(2); | 
| +      CreateFrame(3, frame_width, frame_height)); | 
| +  sink_.WaitForEncodedFrame(3); | 
| EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); | 
| EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count_step_up); | 
|  | 
| @@ -874,12 +877,17 @@ TEST_F(ViEEncoderTest, ScalingUpAndDownDoesNothingWithMaintainResolution) { | 
| EXPECT_FALSE(video_source_.sink_wants().max_pixel_count); | 
| EXPECT_FALSE(video_source_.sink_wants().max_pixel_count_step_up); | 
|  | 
| -  // Trigger scale down | 
| -  vie_encoder_->TriggerQualityLow(); | 
| video_source_.IncomingCapturedFrame( | 
| CreateFrame(1, frame_width, frame_height)); | 
| sink_.WaitForEncodedFrame(1); | 
|  | 
| +  // Trigger scale down | 
| +  vie_encoder_->TriggerQualityLow(); | 
| + | 
| +  video_source_.IncomingCapturedFrame( | 
| +      CreateFrame(2, frame_width, frame_height)); | 
| +  sink_.WaitForEncodedFrame(2); | 
| + | 
| // Expect a scale down. | 
| EXPECT_TRUE(video_source_.sink_wants().max_pixel_count); | 
| EXPECT_LT(*video_source_.sink_wants().max_pixel_count, | 
| @@ -894,8 +902,8 @@ TEST_F(ViEEncoderTest, ScalingUpAndDownDoesNothingWithMaintainResolution) { | 
| // Trigger scale down | 
| vie_encoder_->TriggerQualityLow(); | 
| new_video_source.IncomingCapturedFrame( | 
| -      CreateFrame(2, frame_width, frame_height)); | 
| -  sink_.WaitForEncodedFrame(2); | 
| +      CreateFrame(3, frame_width, frame_height)); | 
| +  sink_.WaitForEncodedFrame(3); | 
|  | 
| // Expect no scaling | 
| EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); | 
| @@ -903,8 +911,8 @@ TEST_F(ViEEncoderTest, ScalingUpAndDownDoesNothingWithMaintainResolution) { | 
| // Trigger scale up | 
| vie_encoder_->TriggerQualityHigh(); | 
| new_video_source.IncomingCapturedFrame( | 
| -      CreateFrame(3, frame_width, frame_height)); | 
| -  sink_.WaitForEncodedFrame(3); | 
| +      CreateFrame(4, frame_width, frame_height)); | 
| +  sink_.WaitForEncodedFrame(4); | 
|  | 
| // Expect nothing to change, still no scaling | 
| EXPECT_FALSE(new_video_source.sink_wants().max_pixel_count); | 
| @@ -912,6 +920,26 @@ TEST_F(ViEEncoderTest, ScalingUpAndDownDoesNothingWithMaintainResolution) { | 
| vie_encoder_->Stop(); | 
| } | 
|  | 
| +TEST_F(ViEEncoderTest, DoesNotScaleBelowSetLimit) { | 
| +  const int kTargetBitrateBps = 100000; | 
| +  int frame_width = 1280; | 
| +  int frame_height = 720; | 
| +  // from vie_encoder.cc | 
| +  const int kMinPixelsPerFrame = 120 * 90; | 
| +  vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); | 
| + | 
| +  for (size_t i = 1; i <= 10; i++) { | 
| +    video_source_.IncomingCapturedFrame( | 
| +        CreateFrame(i, frame_width, frame_height)); | 
| +    sink_.WaitForEncodedFrame(i); | 
| +    // Trigger scale down | 
| +    vie_encoder_->TriggerQualityLow(); | 
| +    EXPECT_GE(*video_source_.sink_wants().max_pixel_count, kMinPixelsPerFrame); | 
| +  } | 
| + | 
| +  vie_encoder_->Stop(); | 
| +} | 
| + | 
| TEST_F(ViEEncoderTest, UMACpuLimitedResolutionInPercent) { | 
| vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); | 
|  | 
|  |