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

Unified Diff: webrtc/call/call_perf_tests.cc

Issue 2998923002: Use SingleThreadedTaskQueue in DirectTransport (Closed)
Patch Set: Appease win_msvc_rel. Created 3 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/call/call_perf_tests.cc
diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc
index f3a20584a1eed315381f1783ce3fd913521a3269..530ad29bcc81dc71925f82376c98428f7a10d009 100644
--- a/webrtc/call/call_perf_tests.cc
+++ b/webrtc/call/call_perf_tests.cc
@@ -21,7 +21,7 @@
#include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
#include "webrtc/rtc_base/checks.h"
-#include "webrtc/rtc_base/constructormagic.h"
+#include "webrtc/rtc_base/ptr_util.h"
#include "webrtc/rtc_base/thread_annotations.h"
#include "webrtc/system_wrappers/include/metrics_default.h"
#include "webrtc/test/call_test.h"
@@ -35,6 +35,7 @@
#include "webrtc/test/frame_generator_capturer.h"
#include "webrtc/test/gtest.h"
#include "webrtc/test/rtp_rtcp_observer.h"
+#include "webrtc/test/single_threaded_task_queue.h"
#include "webrtc/test/testsupport/fileutils.h"
#include "webrtc/test/testsupport/perf_test.h"
#include "webrtc/video/transport_adapter.h"
@@ -143,146 +144,167 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec,
const uint32_t kAudioSendSsrc = 1234;
const uint32_t kAudioRecvSsrc = 5678;
- metrics::Reset();
- rtc::scoped_refptr<AudioProcessing> audio_processing =
- AudioProcessing::Create();
- VoiceEngine* voice_engine = VoiceEngine::Create();
- VoEBase* voe_base = VoEBase::GetInterface(voice_engine);
- FakeAudioDevice fake_audio_device(
- FakeAudioDevice::CreatePulsedNoiseCapturer(256, 48000),
- FakeAudioDevice::CreateDiscardRenderer(48000), audio_rtp_speed);
- EXPECT_EQ(0, voe_base->Init(&fake_audio_device, audio_processing.get(),
- decoder_factory_));
- VoEBase::ChannelConfig config;
- config.enable_voice_pacing = true;
- int send_channel_id = voe_base->CreateChannel(config);
- int recv_channel_id = voe_base->CreateChannel();
-
- AudioState::Config send_audio_state_config;
- send_audio_state_config.voice_engine = voice_engine;
- send_audio_state_config.audio_mixer = AudioMixerImpl::Create();
- send_audio_state_config.audio_processing = audio_processing;
- Call::Config sender_config(event_log_.get());
-
- sender_config.audio_state = AudioState::Create(send_audio_state_config);
- Call::Config receiver_config(event_log_.get());
- receiver_config.audio_state = sender_config.audio_state;
- CreateCalls(sender_config, receiver_config);
-
-
- VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock());
+ int send_channel_id;
+ int recv_channel_id;
FakeNetworkPipe::Config audio_net_config;
audio_net_config.queue_delay_ms = 500;
audio_net_config.loss_percent = 5;
+ rtc::scoped_refptr<AudioProcessing> audio_processing;
+ VoiceEngine* voice_engine;
+ VoEBase* voe_base;
+ std::unique_ptr<FakeAudioDevice> fake_audio_device;
+ VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock());
+
std::map<uint8_t, MediaType> audio_pt_map;
std::map<uint8_t, MediaType> video_pt_map;
- std::copy_if(std::begin(payload_type_map_), std::end(payload_type_map_),
- std::inserter(audio_pt_map, audio_pt_map.end()),
- [](const std::pair<const uint8_t, MediaType>& pair) {
- return pair.second == MediaType::AUDIO;
- });
- std::copy_if(std::begin(payload_type_map_), std::end(payload_type_map_),
- std::inserter(video_pt_map, video_pt_map.end()),
- [](const std::pair<const uint8_t, MediaType>& pair) {
- return pair.second == MediaType::VIDEO;
- });
-
- test::PacketTransport audio_send_transport(sender_call_.get(), &observer,
- test::PacketTransport::kSender,
- audio_pt_map, audio_net_config);
- audio_send_transport.SetReceiver(receiver_call_->Receiver());
-
- test::PacketTransport video_send_transport(
- sender_call_.get(), &observer, test::PacketTransport::kSender,
- video_pt_map, FakeNetworkPipe::Config());
- video_send_transport.SetReceiver(receiver_call_->Receiver());
-
- test::PacketTransport receive_transport(
- receiver_call_.get(), &observer, test::PacketTransport::kReceiver,
- payload_type_map_, FakeNetworkPipe::Config());
- receive_transport.SetReceiver(sender_call_->Receiver());
-
- CreateSendConfig(1, 0, 0, &video_send_transport);
- CreateMatchingReceiveConfigs(&receive_transport);
-
- AudioSendStream::Config audio_send_config(&audio_send_transport);
- audio_send_config.voe_channel_id = send_channel_id;
- audio_send_config.rtp.ssrc = kAudioSendSsrc;
- audio_send_config.send_codec_spec =
- rtc::Optional<AudioSendStream::Config::SendCodecSpec>(
- {kAudioSendPayloadType, {"ISAC", 16000, 1}});
- audio_send_config.encoder_factory = CreateBuiltinAudioEncoderFactory();
- AudioSendStream* audio_send_stream =
- sender_call_->CreateAudioSendStream(audio_send_config);
-
- video_send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
- if (fec == FecMode::kOn) {
- video_send_config_.rtp.ulpfec.red_payload_type = kRedPayloadType;
- video_send_config_.rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
- video_receive_configs_[0].rtp.ulpfec.red_payload_type = kRedPayloadType;
- video_receive_configs_[0].rtp.ulpfec.ulpfec_payload_type =
- kUlpfecPayloadType;
- }
- video_receive_configs_[0].rtp.nack.rtp_history_ms = 1000;
- video_receive_configs_[0].renderer = &observer;
- video_receive_configs_[0].sync_group = kSyncGroup;
-
- AudioReceiveStream::Config audio_recv_config;
- audio_recv_config.rtp.remote_ssrc = kAudioSendSsrc;
- audio_recv_config.rtp.local_ssrc = kAudioRecvSsrc;
- audio_recv_config.voe_channel_id = recv_channel_id;
- audio_recv_config.sync_group = kSyncGroup;
- audio_recv_config.decoder_factory = decoder_factory_;
- audio_recv_config.decoder_map = {{kAudioSendPayloadType, {"ISAC", 16000, 1}}};
- AudioReceiveStream* audio_receive_stream;
+ std::unique_ptr<test::PacketTransport> audio_send_transport;
+ std::unique_ptr<test::PacketTransport> video_send_transport;
+ std::unique_ptr<test::PacketTransport> receive_transport;
- if (create_first == CreateOrder::kAudioFirst) {
- audio_receive_stream =
- receiver_call_->CreateAudioReceiveStream(audio_recv_config);
- CreateVideoStreams();
- } else {
- CreateVideoStreams();
- audio_receive_stream =
- receiver_call_->CreateAudioReceiveStream(audio_recv_config);
- }
- EXPECT_EQ(1u, video_receive_streams_.size());
- observer.set_receive_stream(video_receive_streams_[0]);
- DriftingClock drifting_clock(clock_, video_ntp_speed);
- CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed,
- kDefaultFramerate, kDefaultWidth,
- kDefaultHeight);
+ AudioSendStream* audio_send_stream;
+ AudioReceiveStream* audio_receive_stream;
+ std::unique_ptr<DriftingClock> drifting_clock;
+
+ task_queue_.SendTask([&]() {
+ metrics::Reset();
+ audio_processing = AudioProcessing::Create();
+ voice_engine = VoiceEngine::Create();
+ voe_base = VoEBase::GetInterface(voice_engine);
+ fake_audio_device = rtc::MakeUnique<FakeAudioDevice>(
+ FakeAudioDevice::CreatePulsedNoiseCapturer(256, 48000),
+ FakeAudioDevice::CreateDiscardRenderer(48000), audio_rtp_speed);
+ EXPECT_EQ(0, voe_base->Init(fake_audio_device.get(), audio_processing.get(),
+ decoder_factory_));
+ VoEBase::ChannelConfig config;
+ config.enable_voice_pacing = true;
+ send_channel_id = voe_base->CreateChannel(config);
+ recv_channel_id = voe_base->CreateChannel();
+
+ AudioState::Config send_audio_state_config;
+ send_audio_state_config.voice_engine = voice_engine;
+ send_audio_state_config.audio_mixer = AudioMixerImpl::Create();
+ send_audio_state_config.audio_processing = audio_processing;
+ Call::Config sender_config(event_log_.get());
+
+ sender_config.audio_state = AudioState::Create(send_audio_state_config);
+ Call::Config receiver_config(event_log_.get());
+ receiver_config.audio_state = sender_config.audio_state;
+ CreateCalls(sender_config, receiver_config);
+
+ std::copy_if(std::begin(payload_type_map_), std::end(payload_type_map_),
+ std::inserter(audio_pt_map, audio_pt_map.end()),
+ [](const std::pair<const uint8_t, MediaType>& pair) {
+ return pair.second == MediaType::AUDIO;
+ });
+ std::copy_if(std::begin(payload_type_map_), std::end(payload_type_map_),
+ std::inserter(video_pt_map, video_pt_map.end()),
+ [](const std::pair<const uint8_t, MediaType>& pair) {
+ return pair.second == MediaType::VIDEO;
+ });
+
+ audio_send_transport = rtc::MakeUnique<test::PacketTransport>(
+ &task_queue_, sender_call_.get(), &observer,
+ test::PacketTransport::kSender, audio_pt_map, audio_net_config);
+ audio_send_transport->SetReceiver(receiver_call_->Receiver());
+
+ video_send_transport = rtc::MakeUnique<test::PacketTransport>(
+ &task_queue_, sender_call_.get(), &observer,
+ test::PacketTransport::kSender, video_pt_map,
+ FakeNetworkPipe::Config());
+ video_send_transport->SetReceiver(receiver_call_->Receiver());
+
+ receive_transport = rtc::MakeUnique<test::PacketTransport>(
+ &task_queue_, receiver_call_.get(), &observer,
+ test::PacketTransport::kReceiver, payload_type_map_,
+ FakeNetworkPipe::Config());
+ receive_transport->SetReceiver(sender_call_->Receiver());
+
+ CreateSendConfig(1, 0, 0, video_send_transport.get());
+ CreateMatchingReceiveConfigs(receive_transport.get());
+
+ AudioSendStream::Config audio_send_config(audio_send_transport.get());
+ audio_send_config.voe_channel_id = send_channel_id;
+ audio_send_config.rtp.ssrc = kAudioSendSsrc;
+ audio_send_config.send_codec_spec =
+ rtc::Optional<AudioSendStream::Config::SendCodecSpec>(
+ {kAudioSendPayloadType, {"ISAC", 16000, 1}});
+ audio_send_config.encoder_factory = CreateBuiltinAudioEncoderFactory();
+ audio_send_stream = sender_call_->CreateAudioSendStream(audio_send_config);
+
+ video_send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
+ if (fec == FecMode::kOn) {
+ video_send_config_.rtp.ulpfec.red_payload_type = kRedPayloadType;
+ video_send_config_.rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
+ video_receive_configs_[0].rtp.ulpfec.red_payload_type = kRedPayloadType;
+ video_receive_configs_[0].rtp.ulpfec.ulpfec_payload_type =
+ kUlpfecPayloadType;
+ }
+ video_receive_configs_[0].rtp.nack.rtp_history_ms = 1000;
+ video_receive_configs_[0].renderer = &observer;
+ video_receive_configs_[0].sync_group = kSyncGroup;
+
+ AudioReceiveStream::Config audio_recv_config;
+ audio_recv_config.rtp.remote_ssrc = kAudioSendSsrc;
+ audio_recv_config.rtp.local_ssrc = kAudioRecvSsrc;
+ audio_recv_config.voe_channel_id = recv_channel_id;
+ audio_recv_config.sync_group = kSyncGroup;
+ audio_recv_config.decoder_factory = decoder_factory_;
+ audio_recv_config.decoder_map = {
+ {kAudioSendPayloadType, {"ISAC", 16000, 1}}};
+
+ if (create_first == CreateOrder::kAudioFirst) {
+ audio_receive_stream =
+ receiver_call_->CreateAudioReceiveStream(audio_recv_config);
+ CreateVideoStreams();
+ } else {
+ CreateVideoStreams();
+ audio_receive_stream =
+ receiver_call_->CreateAudioReceiveStream(audio_recv_config);
+ }
+ EXPECT_EQ(1u, video_receive_streams_.size());
+ observer.set_receive_stream(video_receive_streams_[0]);
+ drifting_clock = rtc::MakeUnique<DriftingClock>(clock_, video_ntp_speed);
+ CreateFrameGeneratorCapturerWithDrift(drifting_clock.get(), video_rtp_speed,
+ kDefaultFramerate, kDefaultWidth,
+ kDefaultHeight);
- Start();
+ Start();
- audio_send_stream->Start();
- audio_receive_stream->Start();
+ audio_send_stream->Start();
+ audio_receive_stream->Start();
+ });
EXPECT_TRUE(observer.Wait())
<< "Timed out while waiting for audio and video to be synchronized.";
- audio_send_stream->Stop();
- audio_receive_stream->Stop();
+ task_queue_.SendTask([&]() {
+ audio_send_stream->Stop();
+ audio_receive_stream->Stop();
+
+ Stop();
+
+ DestroyStreams();
- Stop();
- video_send_transport.StopSending();
- audio_send_transport.StopSending();
- receive_transport.StopSending();
+ video_send_transport.reset();
+ audio_send_transport.reset();
+ receive_transport.reset();
- DestroyStreams();
+ sender_call_->DestroyAudioSendStream(audio_send_stream);
+ receiver_call_->DestroyAudioReceiveStream(audio_receive_stream);
- sender_call_->DestroyAudioSendStream(audio_send_stream);
- receiver_call_->DestroyAudioReceiveStream(audio_receive_stream);
+ voe_base->DeleteChannel(send_channel_id);
+ voe_base->DeleteChannel(recv_channel_id);
+ voe_base->Release();
- voe_base->DeleteChannel(send_channel_id);
- voe_base->DeleteChannel(recv_channel_id);
- voe_base->Release();
+ DestroyCalls();
- DestroyCalls();
+ VoiceEngine::Delete(voice_engine);
- VoiceEngine::Delete(voice_engine);
+ fake_audio_device.reset();
+ });
observer.PrintResults();
@@ -335,14 +357,17 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
rtp_start_timestamp_(0) {}
private:
- test::PacketTransport* CreateSendTransport(Call* sender_call) override {
- return new test::PacketTransport(sender_call, this,
+ test::PacketTransport* CreateSendTransport(
+ test::SingleThreadedTaskQueueForTesting* task_queue,
+ Call* sender_call) override {
+ return new test::PacketTransport(task_queue, sender_call, this,
test::PacketTransport::kSender,
payload_type_map_, net_config_);
}
- test::PacketTransport* CreateReceiveTransport() override {
- return new test::PacketTransport(nullptr, this,
+ test::PacketTransport* CreateReceiveTransport(
+ test::SingleThreadedTaskQueueForTesting* task_queue) override {
+ return new test::PacketTransport(task_queue, nullptr, this,
test::PacketTransport::kReceiver,
payload_type_map_, net_config_);
}

Powered by Google App Engine
This is Rietveld 408576698