| 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..d9edac802eb57bbc3e020ca6f863381d8cf8d62d 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,8 +126,7 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer {
|
| int voe_channel,
|
| VoEVideoSync* voe_sync,
|
| SyncRtcpObserver* audio_observer)
|
| - : SyncRtcpObserver(FakeNetworkPipe::Config()),
|
| - clock_(clock),
|
| + : clock_(clock),
|
| voe_channel_(voe_channel),
|
| voe_sync_(voe_sync),
|
| audio_observer_(audio_observer),
|
| @@ -182,10 +180,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 +230,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 +240,38 @@ 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);
|
| + test::PacketTransport audio_receive_transport(
|
| + nullptr, &audio_observer, test::PacketTransport::kReceiver, net_config);
|
| + audio_receive_transport.SetReceiver(&voe_packet_receiver);
|
| +
|
| + 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());
|
|
|
| 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 +318,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 +357,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 +371,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 +412,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,7 +451,8 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
|
| "within bounds.";
|
| }
|
|
|
| - Clock* clock_;
|
| + rtc::CriticalSection crit_;
|
| + Clock* const clock_;
|
| int threshold_ms_;
|
| int start_time_ms_;
|
| int run_time_ms_;
|
| @@ -449,10 +461,10 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
|
| bool rtp_start_timestamp_set_;
|
| 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);
|
| + FrameCaptureTimeList capture_time_list_ GUARDED_BY(&crit_);
|
| + } test(threshold_ms, start_time_ms, run_time_ms);
|
|
|
| - RunBaseTest(&test);
|
| + RunBaseTest(&test, net_config);
|
| }
|
|
|
| TEST_F(CallPerfTest, CaptureNtpTimeWithNetworkDelay) {
|
| @@ -508,7 +520,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) {
|
| @@ -528,26 +540,17 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) {
|
| static const int kMaxAcceptableTransmitBitrate = 170;
|
| static const int kNumBitrateObservationsInRange = 100;
|
| 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 {
|
| + // TODO(holmer): Run this with a timer instead of once per packet.
|
| + Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
| VideoSendStream::Stats stats = send_stream_->GetStats();
|
| if (stats.substreams.size() > 0) {
|
| RTC_DCHECK_EQ(1u, stats.substreams.size());
|
| @@ -581,8 +584,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 +609,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 +709,7 @@ TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) {
|
| VideoEncoderConfig encoder_config_;
|
| } test;
|
|
|
| - RunBaseTest(&test);
|
| + RunBaseTest(&test, FakeNetworkPipe::Config());
|
| }
|
|
|
| } // namespace webrtc
|
|
|