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 cab39144503e36a098fe7610bbbf4fba9a831c13..6c28b45cd00a63fe9d97eb43b4685baabe0ebdd1 100644 |
| --- a/webrtc/call/call_perf_tests.cc |
| +++ b/webrtc/call/call_perf_tests.cc |
| @@ -58,8 +58,7 @@ class CallPerfTest : public test::CallTest { |
| class SyncRtcpObserver : public test::RtpRtcpObserver { |
| public: |
| - explicit SyncRtcpObserver(const FakeNetworkPipe::Config& config) |
| - : test::RtpRtcpObserver(CallPerfTest::kLongTimeoutMs, config) {} |
| + SyncRtcpObserver() : test::RtpRtcpObserver(CallPerfTest::kLongTimeoutMs) {} |
| Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
| RTCPUtility::RTCPParserV2 parser(packet, length, true); |
| @@ -127,7 +126,7 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { |
| int voe_channel, |
| VoEVideoSync* voe_sync, |
| SyncRtcpObserver* audio_observer) |
| - : SyncRtcpObserver(FakeNetworkPipe::Config()), |
| + : SyncRtcpObserver(), |
|
pbos-webrtc
2015/10/27 14:06:29
Remove from ctor list
stefan-webrtc
2015/10/27 14:33:16
Done.
|
| clock_(clock), |
| voe_channel_(voe_channel), |
| voe_sync_(voe_sync), |
| @@ -182,10 +181,10 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { |
| private: |
| Clock* const clock_; |
| - int voe_channel_; |
| - VoEVideoSync* voe_sync_; |
| - SyncRtcpObserver* audio_observer_; |
| - int64_t creation_time_ms_; |
| + const int voe_channel_; |
| + VoEVideoSync* const voe_sync_; |
| + SyncRtcpObserver* const audio_observer_; |
| + const int64_t creation_time_ms_; |
| int64_t first_time_in_sync_; |
| }; |
| @@ -232,14 +231,7 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
| EXPECT_EQ(0, voe_base->Init(&fake_audio_device, nullptr)); |
| int channel = voe_base->CreateChannel(); |
| - FakeNetworkPipe::Config net_config; |
| - net_config.queue_delay_ms = 500; |
| - net_config.loss_percent = 5; |
| - SyncRtcpObserver audio_observer(net_config); |
| - VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock(), |
| - channel, |
| - voe_sync, |
| - &audio_observer); |
| + SyncRtcpObserver audio_observer; |
| Call::Config receiver_config; |
| receiver_config.voice_engine = voice_engine; |
| @@ -249,19 +241,41 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
| EXPECT_EQ(0, voe_codec->SetSendCodec(channel, isac)); |
| AudioPacketReceiver voe_packet_receiver(channel, voe_network); |
| - audio_observer.SetReceivers(&voe_packet_receiver, &voe_packet_receiver); |
| - internal::TransportAdapter transport_adapter(audio_observer.SendTransport()); |
| + FakeNetworkPipe::Config net_config; |
| + net_config.queue_delay_ms = 500; |
| + net_config.loss_percent = 5; |
| + test::PacketTransport audio_send_transport( |
| + nullptr, &audio_observer, test::PacketTransport::kSender, net_config); |
| + audio_send_transport.SetReceiver(&voe_packet_receiver); |
|
pbos-webrtc
2015/10/27 14:06:29
consider adding this to ctor if possible in a foll
stefan-webrtc
2015/10/27 14:33:16
TODO for now.
|
| + test::PacketTransport audio_receive_transport( |
| + nullptr, &audio_observer, test::PacketTransport::kReceiver, net_config); |
| + audio_receive_transport.SetReceiver(&voe_packet_receiver); |
| + audio_observer.SetTransports(&audio_send_transport, &audio_receive_transport); |
| + |
| + internal::TransportAdapter transport_adapter(&audio_send_transport); |
| transport_adapter.Enable(); |
| EXPECT_EQ(0, |
| voe_network->RegisterExternalTransport(channel, transport_adapter)); |
| - observer.SetReceivers(receiver_call_->Receiver(), sender_call_->Receiver()); |
| + VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock(), channel, |
| + voe_sync, &audio_observer); |
| + |
| + test::PacketTransport sync_send_transport(sender_call_.get(), &observer, |
| + test::PacketTransport::kSender, |
| + FakeNetworkPipe::Config()); |
| + sync_send_transport.SetReceiver(receiver_call_->Receiver()); |
| + test::PacketTransport sync_receive_transport(receiver_call_.get(), &observer, |
| + test::PacketTransport::kReceiver, |
| + FakeNetworkPipe::Config()); |
| + sync_receive_transport.SetReceiver(sender_call_->Receiver()); |
| + |
| + observer.SetTransports(&sync_send_transport, &sync_receive_transport); |
| test::FakeDecoder fake_decoder; |
| - CreateSendConfig(1, observer.SendTransport()); |
| - CreateMatchingReceiveConfigs(observer.ReceiveTransport()); |
| + CreateSendConfig(1, &sync_send_transport); |
| + CreateMatchingReceiveConfigs(&sync_receive_transport); |
| send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| if (fec) { |
| @@ -308,8 +322,10 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
| fake_audio_device.Stop(); |
| Stop(); |
| - observer.StopSending(); |
| - audio_observer.StopSending(); |
| + sync_send_transport.StopSending(); |
| + sync_receive_transport.StopSending(); |
| + audio_send_transport.StopSending(); |
| + audio_receive_transport.StopSending(); |
| voe_base->DeleteChannel(channel); |
| voe_base->Release(); |
| @@ -345,11 +361,8 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, |
| class CaptureNtpTimeObserver : public test::EndToEndTest, |
| public VideoRenderer { |
| public: |
| - CaptureNtpTimeObserver(const FakeNetworkPipe::Config& config, |
| - int threshold_ms, |
| - int start_time_ms, |
| - int run_time_ms) |
| - : EndToEndTest(kLongTimeoutMs, config), |
| + CaptureNtpTimeObserver(int threshold_ms, int start_time_ms, int run_time_ms) |
| + : EndToEndTest(kLongTimeoutMs), |
| clock_(Clock::GetRealTimeClock()), |
| threshold_ms_(threshold_ms), |
| start_time_ms_(start_time_ms), |
| @@ -362,6 +375,7 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, |
| private: |
| void RenderFrame(const VideoFrame& video_frame, |
| int time_to_render_ms) override { |
| + rtc::CritScope lock(&crit_); |
| if (video_frame.ntp_time_ms() <= 0) { |
| // Haven't got enough RTCP SR in order to calculate the capture ntp |
| // time. |
| @@ -402,6 +416,7 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, |
| bool IsTextureSupported() const override { return false; } |
| virtual Action OnSendRtp(const uint8_t* packet, size_t length) { |
| + rtc::CritScope lock(&crit_); |
| RTPHeader header; |
| EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
| @@ -440,6 +455,7 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, |
| "within bounds."; |
| } |
| + rtc::CriticalSection crit_; |
| Clock* clock_; |
|
pbos-webrtc
2015/10/27 14:06:29
const
|
| int threshold_ms_; |
|
pbos-webrtc
2015/10/27 14:06:29
thread annotate what you need
stefan-webrtc
2015/10/27 14:33:16
Done.
|
| int start_time_ms_; |
| @@ -450,9 +466,9 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, |
| uint32_t rtp_start_timestamp_; |
| typedef std::map<uint32_t, uint32_t> FrameCaptureTimeList; |
| FrameCaptureTimeList capture_time_list_; |
| - } test(net_config, threshold_ms, start_time_ms, run_time_ms); |
| + } test(threshold_ms, start_time_ms, run_time_ms); |
| - RunBaseTest(&test); |
| + RunBaseTest(&test, net_config); |
| } |
| TEST_F(CallPerfTest, CaptureNtpTimeWithNetworkDelay) { |
| @@ -508,7 +524,7 @@ void CallPerfTest::TestCpuOveruse(LoadObserver::Load tested_load, |
| test::DelayedEncoder encoder_; |
| } test(tested_load, encode_delay_ms); |
| - RunBaseTest(&test); |
| + RunBaseTest(&test, FakeNetworkPipe::Config()); |
| } |
| TEST_F(CallPerfTest, ReceivesCpuUnderuse) { |
| @@ -526,28 +542,18 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { |
| static const int kMinTransmitBitrateBps = 150000; |
| static const int kMinAcceptableTransmitBitrate = 130; |
| static const int kMaxAcceptableTransmitBitrate = 170; |
| - static const int kNumBitrateObservationsInRange = 100; |
| + static const int kNumBitrateObservationsInRange = 10; |
| static const int kAcceptableBitrateErrorMargin = 15; // +- 7 |
| - class BitrateObserver : public test::EndToEndTest, public PacketReceiver { |
| + class BitrateObserver : public test::EndToEndTest { |
| public: |
| explicit BitrateObserver(bool using_min_transmit_bitrate) |
| : EndToEndTest(kLongTimeoutMs), |
| send_stream_(nullptr), |
| - send_transport_receiver_(nullptr), |
| pad_to_min_bitrate_(using_min_transmit_bitrate), |
| num_bitrate_observations_in_range_(0) {} |
| private: |
| - void SetReceivers(PacketReceiver* send_transport_receiver, |
| - PacketReceiver* receive_transport_receiver) override { |
| - send_transport_receiver_ = send_transport_receiver; |
| - test::RtpRtcpObserver::SetReceivers(this, receive_transport_receiver); |
| - } |
| - |
| - DeliveryStatus DeliverPacket(MediaType media_type, |
| - const uint8_t* packet, |
| - size_t length, |
| - const PacketTime& packet_time) override { |
| + Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
|
pbos-webrtc
2015/10/27 14:06:29
Make a TODO to make this into something that runs
|
| VideoSendStream::Stats stats = send_stream_->GetStats(); |
| if (stats.substreams.size() > 0) { |
| RTC_DCHECK_EQ(1u, stats.substreams.size()); |
| @@ -581,8 +587,7 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { |
| observation_complete_->Set(); |
| } |
| } |
| - return send_transport_receiver_->DeliverPacket(media_type, packet, length, |
| - packet_time); |
| + return SEND_PACKET; |
| } |
| void OnStreamsCreated( |
| @@ -607,13 +612,12 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { |
| } |
| VideoSendStream* send_stream_; |
| - PacketReceiver* send_transport_receiver_; |
| const bool pad_to_min_bitrate_; |
| int num_bitrate_observations_in_range_; |
| } test(pad_to_min_bitrate); |
| fake_encoder_.SetMaxBitrate(kMaxEncodeBitrateKbps); |
| - RunBaseTest(&test); |
| + RunBaseTest(&test, FakeNetworkPipe::Config()); |
| } |
| TEST_F(CallPerfTest, PadsToMinTransmitBitrate) { TestMinTransmitBitrate(true); } |
| @@ -708,7 +712,7 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
| VideoEncoderConfig encoder_config_; |
| } test; |
| - RunBaseTest(&test); |
| + RunBaseTest(&test, FakeNetworkPipe::Config()); |
| } |
| } // namespace webrtc |