Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Side by Side Diff: webrtc/call/call_perf_tests.cc

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: Fix perf test Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 receiver_call_->CreateAudioReceiveStream(audio_recv_config); 257 receiver_call_->CreateAudioReceiveStream(audio_recv_config);
258 CreateVideoStreams(); 258 CreateVideoStreams();
259 } else { 259 } else {
260 CreateVideoStreams(); 260 CreateVideoStreams();
261 audio_receive_stream = 261 audio_receive_stream =
262 receiver_call_->CreateAudioReceiveStream(audio_recv_config); 262 receiver_call_->CreateAudioReceiveStream(audio_recv_config);
263 } 263 }
264 EXPECT_EQ(1u, video_receive_streams_.size()); 264 EXPECT_EQ(1u, video_receive_streams_.size());
265 observer.set_receive_stream(video_receive_streams_[0]); 265 observer.set_receive_stream(video_receive_streams_[0]);
266 DriftingClock drifting_clock(clock_, video_ntp_speed); 266 DriftingClock drifting_clock(clock_, video_ntp_speed);
267 CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed); 267 CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed,
268 kDefaultFramerate, kDefaultWidth,
269 kDefaultHeight);
268 270
269 Start(); 271 Start();
270 272
271 fake_audio_device.Start(); 273 fake_audio_device.Start();
272 EXPECT_EQ(0, voe_base->StartPlayout(recv_channel_id)); 274 EXPECT_EQ(0, voe_base->StartPlayout(recv_channel_id));
273 EXPECT_EQ(0, voe_base->StartReceive(recv_channel_id)); 275 EXPECT_EQ(0, voe_base->StartReceive(recv_channel_id));
274 EXPECT_EQ(0, voe_base->StartSend(send_channel_id)); 276 EXPECT_EQ(0, voe_base->StartSend(send_channel_id));
275 277
276 EXPECT_TRUE(observer.Wait()) 278 EXPECT_TRUE(observer.Wait())
277 << "Timed out while waiting for audio and video to be synchronized."; 279 << "Timed out while waiting for audio and video to be synchronized.";
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 613
612 TEST_F(CallPerfTest, NoPadWithoutMinTransmitBitrate) { 614 TEST_F(CallPerfTest, NoPadWithoutMinTransmitBitrate) {
613 TestMinTransmitBitrate(false); 615 TestMinTransmitBitrate(false);
614 } 616 }
615 617
616 TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { 618 TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) {
617 static const uint32_t kInitialBitrateKbps = 400; 619 static const uint32_t kInitialBitrateKbps = 400;
618 static const uint32_t kReconfigureThresholdKbps = 600; 620 static const uint32_t kReconfigureThresholdKbps = 600;
619 static const uint32_t kPermittedReconfiguredBitrateDiffKbps = 100; 621 static const uint32_t kPermittedReconfiguredBitrateDiffKbps = 100;
620 622
623 class VideoStreamFactory
624 : public VideoEncoderConfig::VideoStreamFactoryInterface {
625 public:
626 VideoStreamFactory() {}
627
628 private:
629 std::vector<VideoStream> CreateEncoderStreams(
630 int width,
631 int height,
632 const VideoEncoderConfig& encoder_config) override {
633 std::vector<VideoStream> streams =
634 test::CreateVideoStreams(width, height, encoder_config);
635 streams[0].min_bitrate_bps = 50000;
636 streams[0].target_bitrate_bps = streams[0].max_bitrate_bps = 2000000;
637 return streams;
638 }
639 };
640
621 class BitrateObserver : public test::EndToEndTest, public test::FakeEncoder { 641 class BitrateObserver : public test::EndToEndTest, public test::FakeEncoder {
622 public: 642 public:
623 BitrateObserver() 643 BitrateObserver()
624 : EndToEndTest(kDefaultTimeoutMs), 644 : EndToEndTest(kDefaultTimeoutMs),
625 FakeEncoder(Clock::GetRealTimeClock()), 645 FakeEncoder(Clock::GetRealTimeClock()),
626 time_to_reconfigure_(false, false), 646 time_to_reconfigure_(false, false),
627 encoder_inits_(0), 647 encoder_inits_(0),
628 last_set_bitrate_(0), 648 last_set_bitrate_(0),
629 send_stream_(nullptr) {} 649 send_stream_(nullptr) {}
630 650
631 int32_t InitEncode(const VideoCodec* config, 651 int32_t InitEncode(const VideoCodec* config,
632 int32_t number_of_cores, 652 int32_t number_of_cores,
633 size_t max_payload_size) override { 653 size_t max_payload_size) override {
634 if (encoder_inits_ == 0) { 654 ++encoder_inits_;
655 if (encoder_inits_ == 1) {
656 // First time initialization. Frame size is now known.
sprang_webrtc 2016/09/22 13:06:16 now? or not?
perkj_webrtc 2016/09/26 12:09:42 Done.
635 EXPECT_EQ(kInitialBitrateKbps, config->startBitrate) 657 EXPECT_EQ(kInitialBitrateKbps, config->startBitrate)
636 << "Encoder not initialized at expected bitrate."; 658 << "Encoder not initialized at expected bitrate.";
637 } 659 }
638 ++encoder_inits_;
639 if (encoder_inits_ == 2) { 660 if (encoder_inits_ == 2) {
661 // First time initialization. Frame size is known.
662 EXPECT_EQ(kDefaultWidth, config->width);
663 EXPECT_EQ(kDefaultHeight, config->height);
664 }
665 if (encoder_inits_ == 3) {
666 EXPECT_EQ(2 * kDefaultWidth, config->width);
667 EXPECT_EQ(2 * kDefaultHeight, config->height);
640 EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps); 668 EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps);
641 EXPECT_NEAR(config->startBitrate, 669 EXPECT_NEAR(config->startBitrate,
642 last_set_bitrate_, 670 last_set_bitrate_,
643 kPermittedReconfiguredBitrateDiffKbps) 671 kPermittedReconfiguredBitrateDiffKbps)
644 << "Encoder reconfigured with bitrate too far away from last set."; 672 << "Encoder reconfigured with bitrate too far away from last set.";
645 observation_complete_.Set(); 673 observation_complete_.Set();
646 } 674 }
647 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); 675 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size);
648 } 676 }
649 677
650 int32_t SetRates(uint32_t new_target_bitrate_kbps, 678 int32_t SetRates(uint32_t new_target_bitrate_kbps,
651 uint32_t framerate) override { 679 uint32_t framerate) override {
652 last_set_bitrate_ = new_target_bitrate_kbps; 680 last_set_bitrate_ = new_target_bitrate_kbps;
653 if (encoder_inits_ == 1 && 681 if (encoder_inits_ == 2 &&
654 new_target_bitrate_kbps > kReconfigureThresholdKbps) { 682 new_target_bitrate_kbps > kReconfigureThresholdKbps) {
655 time_to_reconfigure_.Set(); 683 time_to_reconfigure_.Set();
656 } 684 }
657 return FakeEncoder::SetRates(new_target_bitrate_kbps, framerate); 685 return FakeEncoder::SetRates(new_target_bitrate_kbps, framerate);
658 } 686 }
659 687
660 Call::Config GetSenderCallConfig() override { 688 Call::Config GetSenderCallConfig() override {
661 Call::Config config = EndToEndTest::GetSenderCallConfig(); 689 Call::Config config = EndToEndTest::GetSenderCallConfig();
662 config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000; 690 config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000;
663 return config; 691 return config;
664 } 692 }
665 693
666 void ModifyVideoConfigs( 694 void ModifyVideoConfigs(
667 VideoSendStream::Config* send_config, 695 VideoSendStream::Config* send_config,
668 std::vector<VideoReceiveStream::Config>* receive_configs, 696 std::vector<VideoReceiveStream::Config>* receive_configs,
669 VideoEncoderConfig* encoder_config) override { 697 VideoEncoderConfig* encoder_config) override {
670 send_config->encoder_settings.encoder = this; 698 send_config->encoder_settings.encoder = this;
671 encoder_config->streams[0].min_bitrate_bps = 50000; 699 encoder_config->encoder_stream_factory =
672 encoder_config->streams[0].target_bitrate_bps = 700 new rtc::RefCountedObject<VideoStreamFactory>();
673 encoder_config->streams[0].max_bitrate_bps = 2000000;
674 701
675 encoder_config_ = encoder_config->Copy(); 702 encoder_config_ = encoder_config->Copy();
676 } 703 }
677 704
678 void OnVideoStreamsCreated( 705 void OnVideoStreamsCreated(
679 VideoSendStream* send_stream, 706 VideoSendStream* send_stream,
680 const std::vector<VideoReceiveStream*>& receive_streams) override { 707 const std::vector<VideoReceiveStream*>& receive_streams) override {
681 send_stream_ = send_stream; 708 send_stream_ = send_stream;
682 } 709 }
683 710
711 void OnFrameGeneratorCapturerCreated(
712 test::FrameGeneratorCapturer* frame_generator_capturer) override {
713 frame_generator_ = frame_generator_capturer;
714 }
715
684 void PerformTest() override { 716 void PerformTest() override {
685 ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs)) 717 ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs))
686 << "Timed out before receiving an initial high bitrate."; 718 << "Timed out before receiving an initial high bitrate.";
687 encoder_config_.streams[0].width *= 2; 719 frame_generator_->ChangeResolution(kDefaultWidth * 2, kDefaultHeight * 2);
688 encoder_config_.streams[0].height *= 2;
689 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); 720 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy());
690 EXPECT_TRUE(Wait()) 721 EXPECT_TRUE(Wait())
691 << "Timed out while waiting for a couple of high bitrate estimates " 722 << "Timed out while waiting for a couple of high bitrate estimates "
692 "after reconfiguring the send stream."; 723 "after reconfiguring the send stream.";
693 } 724 }
694 725
695 private: 726 private:
696 rtc::Event time_to_reconfigure_; 727 rtc::Event time_to_reconfigure_;
697 int encoder_inits_; 728 int encoder_inits_;
698 uint32_t last_set_bitrate_; 729 uint32_t last_set_bitrate_;
699 VideoSendStream* send_stream_; 730 VideoSendStream* send_stream_;
731 test::FrameGeneratorCapturer* frame_generator_;
700 VideoEncoderConfig encoder_config_; 732 VideoEncoderConfig encoder_config_;
701 } test; 733 } test;
702 734
703 RunBaseTest(&test); 735 RunBaseTest(&test);
704 } 736 }
705 737
706 } // namespace webrtc 738 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698