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

Side by Side Diff: webrtc/test/call_test.cc

Issue 2998923002: Use SingleThreadedTaskQueue in DirectTransport (Closed)
Patch Set: . 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/test/call_test.h" 11 #include "webrtc/test/call_test.h"
12 12
13 #include <algorithm> 13 #include <algorithm>
14 14
15 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h" 15 #include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
16 #include "webrtc/api/audio_codecs/builtin_audio_encoder_factory.h" 16 #include "webrtc/api/audio_codecs/builtin_audio_encoder_factory.h"
17 #include "webrtc/call/rtp_transport_controller_send.h" 17 #include "webrtc/call/rtp_transport_controller_send.h"
18 #include "webrtc/config.h" 18 #include "webrtc/config.h"
19 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h" 19 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
20 #include "webrtc/rtc_base/checks.h" 20 #include "webrtc/rtc_base/checks.h"
21 #include "webrtc/rtc_base/event.h"
22 #include "webrtc/rtc_base/ptr_util.h"
21 #include "webrtc/test/testsupport/fileutils.h" 23 #include "webrtc/test/testsupport/fileutils.h"
22 #include "webrtc/voice_engine/include/voe_base.h" 24 #include "webrtc/voice_engine/include/voe_base.h"
25
23 namespace webrtc { 26 namespace webrtc {
24 namespace test { 27 namespace test {
25 28
26 namespace { 29 namespace {
27 const int kVideoRotationRtpExtensionId = 4; 30 const int kVideoRotationRtpExtensionId = 4;
28 } 31 }
29 32
30 CallTest::CallTest() 33 CallTest::CallTest()
31 : clock_(Clock::GetRealTimeClock()), 34 : clock_(Clock::GetRealTimeClock()),
32 event_log_(RtcEventLog::CreateNull()), 35 event_log_(RtcEventLog::CreateNull()),
33 sender_call_transport_controller_(nullptr), 36 sender_call_transport_controller_(nullptr),
34 video_send_config_(nullptr), 37 video_send_config_(nullptr),
35 video_send_stream_(nullptr), 38 video_send_stream_(nullptr),
36 audio_send_config_(nullptr), 39 audio_send_config_(nullptr),
37 audio_send_stream_(nullptr), 40 audio_send_stream_(nullptr),
38 fake_encoder_(clock_), 41 fake_encoder_(clock_),
39 num_video_streams_(1), 42 num_video_streams_(1),
40 num_audio_streams_(0), 43 num_audio_streams_(0),
41 num_flexfec_streams_(0), 44 num_flexfec_streams_(0),
42 decoder_factory_(CreateBuiltinAudioDecoderFactory()), 45 decoder_factory_(CreateBuiltinAudioDecoderFactory()),
43 encoder_factory_(CreateBuiltinAudioEncoderFactory()), 46 encoder_factory_(CreateBuiltinAudioEncoderFactory()),
44 fake_send_audio_device_(nullptr), 47 fake_send_audio_device_(nullptr),
45 fake_recv_audio_device_(nullptr) {} 48 fake_recv_audio_device_(nullptr),
49 task_queue_("CallTestTaskQueue") {}
46 50
47 CallTest::~CallTest() { 51 CallTest::~CallTest() {
52 task_queue_.SendTask([this]() {
53 fake_send_audio_device_.reset();
54 fake_recv_audio_device_.reset();
55 frame_generator_capturer_.reset();
56 });
48 } 57 }
49 58
50 void CallTest::RunBaseTest(BaseTest* test) { 59 void CallTest::RunBaseTest(BaseTest* test) {
51 num_video_streams_ = test->GetNumVideoStreams(); 60 task_queue_.SendTask([this, test]() {
nisse-webrtc 2017/08/18 11:08:29 There's a lot of code moving around here, not clea
eladalon 2017/08/18 12:12:37 * The diff-tool used by the code-review system is
52 num_audio_streams_ = test->GetNumAudioStreams(); 61 num_video_streams_ = test->GetNumVideoStreams();
53 num_flexfec_streams_ = test->GetNumFlexfecStreams(); 62 num_audio_streams_ = test->GetNumAudioStreams();
54 RTC_DCHECK(num_video_streams_ > 0 || num_audio_streams_ > 0); 63 num_flexfec_streams_ = test->GetNumFlexfecStreams();
55 Call::Config send_config(test->GetSenderCallConfig()); 64 RTC_DCHECK(num_video_streams_ > 0 || num_audio_streams_ > 0);
56 if (num_audio_streams_ > 0) { 65 Call::Config send_config(test->GetSenderCallConfig());
57 CreateFakeAudioDevices(test->CreateCapturer(), test->CreateRenderer());
58 test->OnFakeAudioDevicesCreated(fake_send_audio_device_.get(),
59 fake_recv_audio_device_.get());
60 apm_send_ = AudioProcessing::Create();
61 apm_recv_ = AudioProcessing::Create();
62 CreateVoiceEngines();
63 AudioState::Config audio_state_config;
64 audio_state_config.voice_engine = voe_send_.voice_engine;
65 audio_state_config.audio_mixer = AudioMixerImpl::Create();
66 audio_state_config.audio_processing = apm_send_;
67 send_config.audio_state = AudioState::Create(audio_state_config);
68 }
69 CreateSenderCall(send_config);
70 if (sender_call_transport_controller_ != nullptr) {
71 test->OnRtpTransportControllerSendCreated(
72 sender_call_transport_controller_);
73 }
74 if (test->ShouldCreateReceivers()) {
75 Call::Config recv_config(test->GetReceiverCallConfig());
76 if (num_audio_streams_ > 0) { 66 if (num_audio_streams_ > 0) {
67 CreateFakeAudioDevices(test->CreateCapturer(), test->CreateRenderer());
68 test->OnFakeAudioDevicesCreated(fake_send_audio_device_.get(),
69 fake_recv_audio_device_.get());
70 apm_send_ = AudioProcessing::Create();
71 apm_recv_ = AudioProcessing::Create();
72 CreateVoiceEngines();
77 AudioState::Config audio_state_config; 73 AudioState::Config audio_state_config;
78 audio_state_config.voice_engine = voe_recv_.voice_engine; 74 audio_state_config.voice_engine = voe_send_.voice_engine;
79 audio_state_config.audio_mixer = AudioMixerImpl::Create(); 75 audio_state_config.audio_mixer = AudioMixerImpl::Create();
80 audio_state_config.audio_processing = apm_recv_; 76 audio_state_config.audio_processing = apm_send_;
81 recv_config.audio_state = AudioState::Create(audio_state_config); 77 send_config.audio_state = AudioState::Create(audio_state_config);
82 } 78 }
83 CreateReceiverCall(recv_config); 79 CreateSenderCall(send_config);
84 } 80 if (sender_call_transport_controller_ != nullptr) {
85 test->OnCallsCreated(sender_call_.get(), receiver_call_.get()); 81 test->OnRtpTransportControllerSendCreated(
86 receive_transport_.reset(test->CreateReceiveTransport()); 82 sender_call_transport_controller_);
87 send_transport_.reset(test->CreateSendTransport(sender_call_.get())); 83 }
84 if (test->ShouldCreateReceivers()) {
85 Call::Config recv_config(test->GetReceiverCallConfig());
86 if (num_audio_streams_ > 0) {
87 AudioState::Config audio_state_config;
88 audio_state_config.voice_engine = voe_recv_.voice_engine;
89 audio_state_config.audio_mixer = AudioMixerImpl::Create();
90 audio_state_config.audio_processing = apm_recv_;
91 recv_config.audio_state = AudioState::Create(audio_state_config);
92 }
93 CreateReceiverCall(recv_config);
94 }
95 test->OnCallsCreated(sender_call_.get(), receiver_call_.get());
96 receive_transport_.reset(test->CreateReceiveTransport(&task_queue_));
97 send_transport_.reset(
98 test->CreateSendTransport(&task_queue_, sender_call_.get()));
88 99
89 if (test->ShouldCreateReceivers()) { 100 if (test->ShouldCreateReceivers()) {
90 send_transport_->SetReceiver(receiver_call_->Receiver()); 101 send_transport_->SetReceiver(receiver_call_->Receiver());
91 receive_transport_->SetReceiver(sender_call_->Receiver()); 102 receive_transport_->SetReceiver(sender_call_->Receiver());
92 if (num_video_streams_ > 0) 103 if (num_video_streams_ > 0)
93 receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); 104 receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
105 if (num_audio_streams_ > 0)
106 receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
107 } else {
108 // Sender-only call delivers to itself.
109 send_transport_->SetReceiver(sender_call_->Receiver());
110 receive_transport_->SetReceiver(nullptr);
111 }
112
113 CreateSendConfig(num_video_streams_, num_audio_streams_,
114 num_flexfec_streams_, send_transport_.get());
115 if (test->ShouldCreateReceivers()) {
116 CreateMatchingReceiveConfigs(receive_transport_.get());
117 }
118 if (num_video_streams_ > 0) {
119 test->ModifyVideoConfigs(&video_send_config_, &video_receive_configs_,
120 &video_encoder_config_);
121 }
122 if (num_audio_streams_ > 0) {
123 test->ModifyAudioConfigs(&audio_send_config_, &audio_receive_configs_);
124 }
125 if (num_flexfec_streams_ > 0) {
126 test->ModifyFlexfecConfigs(&flexfec_receive_configs_);
127 }
128
129 if (num_flexfec_streams_ > 0) {
130 CreateFlexfecStreams();
131 test->OnFlexfecStreamsCreated(flexfec_receive_streams_);
132 }
133 if (num_video_streams_ > 0) {
134 CreateVideoStreams();
135 test->OnVideoStreamsCreated(video_send_stream_, video_receive_streams_);
136 }
137 if (num_audio_streams_ > 0) {
138 CreateAudioStreams();
139 test->OnAudioStreamsCreated(audio_send_stream_, audio_receive_streams_);
140 }
141
142 if (num_video_streams_ > 0) {
143 int width = kDefaultWidth;
144 int height = kDefaultHeight;
145 int frame_rate = kDefaultFramerate;
146 test->ModifyVideoCaptureStartResolution(&width, &height, &frame_rate);
147 CreateFrameGeneratorCapturer(frame_rate, width, height);
148 test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_.get());
149 }
150
151 Start();
152 });
153
154 test->PerformTest();
155
156 task_queue_.SendTask([this]() {
157 Stop();
158 DestroyStreams();
159 send_transport_.reset();
160 receive_transport_.reset();
161 DestroyCalls();
94 if (num_audio_streams_ > 0) 162 if (num_audio_streams_ > 0)
95 receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp); 163 DestroyVoiceEngines();
96 } else { 164 });
97 // Sender-only call delivers to itself.
98 send_transport_->SetReceiver(sender_call_->Receiver());
99 receive_transport_->SetReceiver(nullptr);
100 }
101
102 CreateSendConfig(num_video_streams_, num_audio_streams_, num_flexfec_streams_,
103 send_transport_.get());
104 if (test->ShouldCreateReceivers()) {
105 CreateMatchingReceiveConfigs(receive_transport_.get());
106 }
107 if (num_video_streams_ > 0) {
108 test->ModifyVideoConfigs(&video_send_config_, &video_receive_configs_,
109 &video_encoder_config_);
110 }
111 if (num_audio_streams_ > 0) {
112 test->ModifyAudioConfigs(&audio_send_config_, &audio_receive_configs_);
113 }
114 if (num_flexfec_streams_ > 0) {
115 test->ModifyFlexfecConfigs(&flexfec_receive_configs_);
116 }
117
118 if (num_flexfec_streams_ > 0) {
119 CreateFlexfecStreams();
120 test->OnFlexfecStreamsCreated(flexfec_receive_streams_);
121 }
122 if (num_video_streams_ > 0) {
123 CreateVideoStreams();
124 test->OnVideoStreamsCreated(video_send_stream_, video_receive_streams_);
125 }
126 if (num_audio_streams_ > 0) {
127 CreateAudioStreams();
128 test->OnAudioStreamsCreated(audio_send_stream_, audio_receive_streams_);
129 }
130
131 if (num_video_streams_ > 0) {
132 int width = kDefaultWidth;
133 int height = kDefaultHeight;
134 int frame_rate = kDefaultFramerate;
135 test->ModifyVideoCaptureStartResolution(&width, &height, &frame_rate);
136 CreateFrameGeneratorCapturer(frame_rate, width, height);
137 test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_.get());
138 }
139
140 Start();
141 test->PerformTest();
142 send_transport_->StopSending();
143 receive_transport_->StopSending();
144 Stop();
145
146 DestroyStreams();
147 DestroyCalls();
148 if (num_audio_streams_ > 0)
149 DestroyVoiceEngines();
150 165
151 test->OnTestFinished(); 166 test->OnTestFinished();
152 } 167 }
153 168
154 void CallTest::CreateCalls(const Call::Config& sender_config, 169 void CallTest::CreateCalls(const Call::Config& sender_config,
155 const Call::Config& receiver_config) { 170 const Call::Config& receiver_config) {
156 CreateSenderCall(sender_config); 171 CreateSenderCall(sender_config);
157 CreateReceiverCall(receiver_config); 172 CreateReceiverCall(receiver_config);
158 } 173 }
159 174
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 Call::Config BaseTest::GetReceiverCallConfig() { 525 Call::Config BaseTest::GetReceiverCallConfig() {
511 return Call::Config(event_log_.get()); 526 return Call::Config(event_log_.get());
512 } 527 }
513 528
514 void BaseTest::OnRtpTransportControllerSendCreated( 529 void BaseTest::OnRtpTransportControllerSendCreated(
515 RtpTransportControllerSend* controller) {} 530 RtpTransportControllerSend* controller) {}
516 531
517 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) { 532 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {
518 } 533 }
519 534
520 test::PacketTransport* BaseTest::CreateSendTransport(Call* sender_call) { 535 test::PacketTransport* BaseTest::CreateSendTransport(
521 return new PacketTransport(sender_call, this, test::PacketTransport::kSender, 536 SingleThreadedTaskQueueForTesting* task_queue,
522 CallTest::payload_type_map_, 537 Call* sender_call) {
523 FakeNetworkPipe::Config()); 538 return new PacketTransport(
539 task_queue, sender_call, this, test::PacketTransport::kSender,
540 CallTest::payload_type_map_, FakeNetworkPipe::Config());
524 } 541 }
525 542
526 test::PacketTransport* BaseTest::CreateReceiveTransport() { 543 test::PacketTransport* BaseTest::CreateReceiveTransport(
527 return new PacketTransport(nullptr, this, test::PacketTransport::kReceiver, 544 SingleThreadedTaskQueueForTesting* task_queue) {
528 CallTest::payload_type_map_, 545 return new PacketTransport(
529 FakeNetworkPipe::Config()); 546 task_queue, nullptr, this, test::PacketTransport::kReceiver,
547 CallTest::payload_type_map_, FakeNetworkPipe::Config());
530 } 548 }
531 549
532 size_t BaseTest::GetNumVideoStreams() const { 550 size_t BaseTest::GetNumVideoStreams() const {
533 return 1; 551 return 1;
534 } 552 }
535 553
536 size_t BaseTest::GetNumAudioStreams() const { 554 size_t BaseTest::GetNumAudioStreams() const {
537 return 0; 555 return 0;
538 } 556 }
539 557
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 604
587 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { 605 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) {
588 } 606 }
589 607
590 bool EndToEndTest::ShouldCreateReceivers() const { 608 bool EndToEndTest::ShouldCreateReceivers() const {
591 return true; 609 return true;
592 } 610 }
593 611
594 } // namespace test 612 } // namespace test
595 } // namespace webrtc 613 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698