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 b980a5e5c7a41015031ef020d0ea8bc50ba6276a..48e7d95b1d68267d86c8ce454dc58ffedced6cf4 100644 |
| --- a/webrtc/call/call_perf_tests.cc |
| +++ b/webrtc/call/call_perf_tests.cc |
| @@ -264,7 +264,9 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, |
| EXPECT_EQ(1u, video_receive_streams_.size()); |
| observer.set_receive_stream(video_receive_streams_[0]); |
| DriftingClock drifting_clock(clock_, video_ntp_speed); |
| - CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed); |
| + CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed, |
| + kDefaultFramerate, kDefaultWidth, |
| + kDefaultHeight); |
| Start(); |
| @@ -618,6 +620,24 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| static const uint32_t kReconfigureThresholdKbps = 600; |
| static const uint32_t kPermittedReconfiguredBitrateDiffKbps = 100; |
| + class VideoStreamFactory |
| + : public VideoEncoderConfig::VideoStreamFactoryInterface { |
| + public: |
| + VideoStreamFactory() {} |
| + |
| + private: |
| + std::vector<VideoStream> CreateEncoderStreams( |
| + int width, |
| + int height, |
| + const VideoEncoderConfig& encoder_config) override { |
| + std::vector<VideoStream> streams = |
| + test::CreateVideoStreams(width, height, encoder_config); |
| + streams[0].min_bitrate_bps = 50000; |
| + streams[0].target_bitrate_bps = streams[0].max_bitrate_bps = 2000000; |
| + return streams; |
| + } |
| + }; |
| + |
| class BitrateObserver : public test::EndToEndTest, public test::FakeEncoder { |
| public: |
| BitrateObserver() |
| @@ -631,12 +651,20 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| int32_t InitEncode(const VideoCodec* config, |
| int32_t number_of_cores, |
| size_t max_payload_size) override { |
| - if (encoder_inits_ == 0) { |
| + ++encoder_inits_; |
| + if (encoder_inits_ == 1) { |
| + // First time initialization. Frame size is not known. |
| EXPECT_EQ(kInitialBitrateKbps, config->startBitrate) |
| << "Encoder not initialized at expected bitrate."; |
| } |
| - ++encoder_inits_; |
| if (encoder_inits_ == 2) { |
| + // First time initialization. Frame size is known. |
| + EXPECT_EQ(kDefaultWidth, config->width); |
| + EXPECT_EQ(kDefaultHeight, config->height); |
| + } |
| + if (encoder_inits_ == 3) { |
|
mflodman
2016/09/27 11:28:00
This can be an else if instead.
perkj_webrtc
2016/09/27 13:45:17
Done.
|
| + EXPECT_EQ(2 * kDefaultWidth, config->width); |
| + EXPECT_EQ(2 * kDefaultHeight, config->height); |
| EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps); |
| EXPECT_NEAR(config->startBitrate, |
| last_set_bitrate_, |
| @@ -650,7 +678,7 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| int32_t SetRates(uint32_t new_target_bitrate_kbps, |
| uint32_t framerate) override { |
| last_set_bitrate_ = new_target_bitrate_kbps; |
| - if (encoder_inits_ == 1 && |
| + if (encoder_inits_ == 2 && |
| new_target_bitrate_kbps > kReconfigureThresholdKbps) { |
| time_to_reconfigure_.Set(); |
| } |
| @@ -668,9 +696,8 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| std::vector<VideoReceiveStream::Config>* receive_configs, |
| VideoEncoderConfig* encoder_config) override { |
| send_config->encoder_settings.encoder = this; |
| - encoder_config->streams[0].min_bitrate_bps = 50000; |
| - encoder_config->streams[0].target_bitrate_bps = |
| - encoder_config->streams[0].max_bitrate_bps = 2000000; |
| + encoder_config->encoder_stream_factory = |
| + new rtc::RefCountedObject<VideoStreamFactory>(); |
| encoder_config_ = encoder_config->Copy(); |
| } |
| @@ -681,11 +708,15 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| send_stream_ = send_stream; |
| } |
| + void OnFrameGeneratorCapturerCreated( |
| + test::FrameGeneratorCapturer* frame_generator_capturer) override { |
| + frame_generator_ = frame_generator_capturer; |
| + } |
| + |
| void PerformTest() override { |
| ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs)) |
| << "Timed out before receiving an initial high bitrate."; |
| - encoder_config_.streams[0].width *= 2; |
| - encoder_config_.streams[0].height *= 2; |
| + frame_generator_->ChangeResolution(kDefaultWidth * 2, kDefaultHeight * 2); |
| send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
| EXPECT_TRUE(Wait()) |
| << "Timed out while waiting for a couple of high bitrate estimates " |
| @@ -697,6 +728,7 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| int encoder_inits_; |
| uint32_t last_set_bitrate_; |
| VideoSendStream* send_stream_; |
| + test::FrameGeneratorCapturer* frame_generator_; |
| VideoEncoderConfig encoder_config_; |
| } test; |