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 |