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 9aa50d0ad9720c0f86fb3c6bd36c5c1ecaba1815..63c61b2f352db377fcea89ba25efc958cb0148c1 100644 |
| --- a/webrtc/call/call_perf_tests.cc |
| +++ b/webrtc/call/call_perf_tests.cc |
| @@ -149,33 +149,6 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, |
| const char* kSyncGroup = "av_sync"; |
| const uint32_t kAudioSendSsrc = 1234; |
| const uint32_t kAudioRecvSsrc = 5678; |
| - class AudioPacketReceiver : public PacketReceiver { |
| - public: |
| - AudioPacketReceiver(int channel, VoENetwork* voe_network) |
| - : channel_(channel), |
| - voe_network_(voe_network), |
| - parser_(RtpHeaderParser::Create()) {} |
| - DeliveryStatus DeliverPacket(MediaType media_type, |
| - const uint8_t* packet, |
| - size_t length, |
| - const PacketTime& packet_time) override { |
| - EXPECT_TRUE(media_type == MediaType::ANY || |
| - media_type == MediaType::AUDIO); |
| - int ret; |
| - if (parser_->IsRtcp(packet, length)) { |
| - ret = voe_network_->ReceivedRTCPPacket(channel_, packet, length); |
| - } else { |
| - ret = voe_network_->ReceivedRTPPacket(channel_, packet, length, |
| - PacketTime()); |
| - } |
| - return ret == 0 ? DELIVERY_OK : DELIVERY_PACKET_ERROR; |
| - } |
| - |
| - private: |
| - int channel_; |
| - VoENetwork* voe_network_; |
| - std::unique_ptr<RtpHeaderParser> parser_; |
| - }; |
| test::ClearHistograms(); |
| VoiceEngine* voice_engine = VoiceEngine::Create(); |
| @@ -201,44 +174,54 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, |
| receiver_config.audio_state = sender_config.audio_state; |
| CreateCalls(sender_config, receiver_config); |
| - AudioPacketReceiver voe_send_packet_receiver(send_channel_id, voe_network); |
| - AudioPacketReceiver voe_recv_packet_receiver(recv_channel_id, voe_network); |
| VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock()); |
| - FakeNetworkPipe::Config net_config; |
| - net_config.queue_delay_ms = 500; |
| - net_config.loss_percent = 5; |
| - test::PacketTransport audio_send_transport( |
| - nullptr, &observer, test::PacketTransport::kSender, net_config); |
| - audio_send_transport.SetReceiver(&voe_recv_packet_receiver); |
| - test::PacketTransport audio_receive_transport( |
| - nullptr, &observer, test::PacketTransport::kReceiver, net_config); |
| - audio_receive_transport.SetReceiver(&voe_send_packet_receiver); |
| - |
| - internal::TransportAdapter send_transport_adapter(&audio_send_transport); |
| - send_transport_adapter.Enable(); |
| - EXPECT_EQ(0, voe_network->RegisterExternalTransport(send_channel_id, |
| - send_transport_adapter)); |
| - |
| - internal::TransportAdapter recv_transport_adapter(&audio_receive_transport); |
| - recv_transport_adapter.Enable(); |
| - EXPECT_EQ(0, voe_network->RegisterExternalTransport(recv_channel_id, |
| - recv_transport_adapter)); |
| - |
| - 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()); |
| + // Helper class to ensure we deliver correct media_type to the receiving call. |
| + class MediaTypePacketReceiver : public PacketReceiver { |
| + public: |
| + MediaTypePacketReceiver(PacketReceiver* packet_receiver, |
| + MediaType media_type) |
| + : packet_receiver_(packet_receiver), media_type_(media_type) {} |
| + |
| + DeliveryStatus DeliverPacket(MediaType media_type, |
| + const uint8_t* packet, |
| + size_t length, |
| + const PacketTime& packet_time) override { |
| + return packet_receiver_->DeliverPacket(media_type_, packet, length, |
| + packet_time); |
| + } |
| + private: |
| + PacketReceiver* packet_receiver_; |
| + const MediaType media_type_; |
| + }; |
| + |
| + FakeNetworkPipe::Config audio_net_config; |
| + audio_net_config.queue_delay_ms = 500; |
| + audio_net_config.loss_percent = 5; |
| + test::PacketTransport audio_send_transport(sender_call_.get(), &observer, |
| + test::PacketTransport::kSender, |
| + audio_net_config); |
| + MediaTypePacketReceiver audio_receiver(receiver_call_->Receiver(), |
| + MediaType::AUDIO); |
| + audio_send_transport.SetReceiver(&audio_receiver); |
| + |
| + test::PacketTransport video_send_transport(sender_call_.get(), &observer, |
| + test::PacketTransport::kSender, |
| + FakeNetworkPipe::Config()); |
| + MediaTypePacketReceiver video_receiver(receiver_call_->Receiver(), |
| + MediaType::VIDEO); |
| + video_send_transport.SetReceiver(&video_receiver); |
| + |
| + test::PacketTransport receive_transport( |
| + receiver_call_.get(), &observer, test::PacketTransport::kReceiver, |
| + FakeNetworkPipe::Config()); |
| + receive_transport.SetReceiver(sender_call_->Receiver()); |
| test::FakeDecoder fake_decoder; |
| - CreateSendConfig(1, 0, &sync_send_transport); |
| - CreateMatchingReceiveConfigs(&sync_receive_transport); |
| + CreateSendConfig(1, 0, &video_send_transport); |
| + CreateMatchingReceiveConfigs(&receive_transport); |
| AudioSendStream::Config audio_send_config(&audio_send_transport); |
|
stefan-webrtc
2016/04/22 09:16:19
I'm not sure this actually works in practice. All
mflodman
2016/04/22 09:41:48
If that is the case, our API is wrong if we can se
stefan-webrtc
2016/04/22 10:35:04
You're right, it does go over separate transports,
|
| audio_send_config.voe_channel_id = send_channel_id; |
| @@ -298,10 +281,9 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, |
| fake_audio_device.Stop(); |
| Stop(); |
| - sync_send_transport.StopSending(); |
| - sync_receive_transport.StopSending(); |
| + video_send_transport.StopSending(); |
| audio_send_transport.StopSending(); |
| - audio_receive_transport.StopSending(); |
| + receive_transport.StopSending(); |
| DestroyStreams(); |