Chromium Code Reviews| Index: webrtc/call/call_perf_tests.cc | 
| diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc | 
| index 43d7aa5e068444d87758dfb4afb54df0503b82a6..6ad702010c68060bfadabc9a2f02fb3745d1d741 100644 | 
| --- a/webrtc/call/call_perf_tests.cc | 
| +++ b/webrtc/call/call_perf_tests.cc | 
| @@ -63,7 +63,7 @@ class CallPerfTest : public test::CallTest { | 
| float video_rtp_speed, | 
| float audio_rtp_speed); | 
| - void TestCpuOveruse(LoadObserver::Load tested_load, int encode_delay_ms); | 
| + void TestCpuOveruse(bool expect_lower_resolution_wants); | 
| void TestMinTransmitBitrate(bool pad_to_min_bitrate); | 
| @@ -481,25 +481,43 @@ TEST_F(CallPerfTest, CaptureNtpTimeWithNetworkJitter) { | 
| TestCaptureNtpTime(net_config, kThresholdMs, kStartTimeMs, kRunTimeMs); | 
| } | 
| -void CallPerfTest::TestCpuOveruse(LoadObserver::Load tested_load, | 
| - int encode_delay_ms) { | 
| - class LoadObserver : public test::SendTest, public webrtc::LoadObserver { | 
| +void CallPerfTest::TestCpuOveruse(bool expect_lower_resolution_wants) { | 
| + class LoadObserver : public test::SendTest, | 
| + public test::FrameGeneratorCapturer::SinkWantsObserver { | 
| public: | 
| - LoadObserver(LoadObserver::Load tested_load, int encode_delay_ms) | 
| + LoadObserver(bool expect_lower_resolution_wants) | 
| : SendTest(kLongTimeoutMs), | 
| - tested_load_(tested_load), | 
| - encoder_(Clock::GetRealTimeClock(), encode_delay_ms) {} | 
| + expect_lower_resolution_wants_(expect_lower_resolution_wants), | 
| + encoder_(Clock::GetRealTimeClock(), 35 /* delay_ms */) {} | 
| - void OnLoadUpdate(Load load) override { | 
| - if (load == tested_load_) | 
| - observation_complete_.Set(); | 
| + void OnFrameGeneratorCapturerCreated( | 
| + test::FrameGeneratorCapturer* frame_generator_capturer) override { | 
| + frame_generator_capturer->SetSinkWantsObserver(this); | 
| + } | 
| + | 
| + // OnSinkWantsChanged is called when FrameGeneratorCapturer::AddOrUpdateSink | 
| + // is called. | 
| + void OnSinkWantsChanged(rtc::VideoSinkInterface<VideoFrame>* sink, | 
| + const rtc::VideoSinkWants& wants) override { | 
| + if (expect_lower_resolution_wants_) { | 
| + if (wants.max_pixel_count) { | 
| + observation_complete_.Set(); | 
| + } | 
| + } else { | 
| + // First expect CPU overuse. Then expect CPU underuse when the encoder | 
| + // delay has been decreased. | 
| + if (wants.max_pixel_count) { | 
| + encoder_.SetDelay(2); | 
| + } else if (wants.max_pixel_count_step_up) { | 
| + observation_complete_.Set(); | 
| + } | 
| + } | 
| } | 
| void ModifyVideoConfigs( | 
| VideoSendStream::Config* send_config, | 
| std::vector<VideoReceiveStream::Config>* receive_configs, | 
| VideoEncoderConfig* encoder_config) override { | 
| - send_config->overuse_callback = this; | 
| send_config->encoder_settings.encoder = &encoder_; | 
| } | 
| @@ -507,21 +525,19 @@ void CallPerfTest::TestCpuOveruse(LoadObserver::Load tested_load, | 
| EXPECT_TRUE(Wait()) << "Timed out before receiving an overuse callback."; | 
| } | 
| - LoadObserver::Load tested_load_; | 
| + bool expect_lower_resolution_wants_; | 
| 
 
åsapersson
2016/10/24 07:54:05
const
 
perkj_webrtc
2016/10/26 16:40:16
used your second suggestion. This is used as state
 
 | 
| test::DelayedEncoder encoder_; | 
| - } test(tested_load, encode_delay_ms); | 
| + } test(expect_lower_resolution_wants); | 
| RunBaseTest(&test); | 
| } | 
| TEST_F(CallPerfTest, ReceivesCpuUnderuse) { | 
| - const int kEncodeDelayMs = 2; | 
| - TestCpuOveruse(LoadObserver::kUnderuse, kEncodeDelayMs); | 
| + TestCpuOveruse(false); | 
| } | 
| TEST_F(CallPerfTest, ReceivesCpuOveruse) { | 
| - const int kEncodeDelayMs = 35; | 
| - TestCpuOveruse(LoadObserver::kOveruse, kEncodeDelayMs); | 
| + TestCpuOveruse(true); | 
| 
 
åsapersson
2016/10/24 07:54:05
maybe remove since overuse is tested in test above
 
perkj_webrtc
2016/10/26 16:40:16
Done.
 
 | 
| } | 
| void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { |