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

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 });
48 } 56 }
49 57
50 void CallTest::RunBaseTest(BaseTest* test) { 58 void CallTest::RunBaseTest(BaseTest* test) {
51 num_video_streams_ = test->GetNumVideoStreams(); 59 task_queue_.SendTask([this, test]() {
52 num_audio_streams_ = test->GetNumAudioStreams(); 60 num_video_streams_ = test->GetNumVideoStreams();
53 num_flexfec_streams_ = test->GetNumFlexfecStreams(); 61 num_audio_streams_ = test->GetNumAudioStreams();
54 RTC_DCHECK(num_video_streams_ > 0 || num_audio_streams_ > 0); 62 num_flexfec_streams_ = test->GetNumFlexfecStreams();
55 Call::Config send_config(test->GetSenderCallConfig()); 63 RTC_DCHECK(num_video_streams_ > 0 || num_audio_streams_ > 0);
56 if (num_audio_streams_ > 0) { 64 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) { 65 if (num_audio_streams_ > 0) {
66 CreateFakeAudioDevices(test->CreateCapturer(), test->CreateRenderer());
67 test->OnFakeAudioDevicesCreated(fake_send_audio_device_.get(),
68 fake_recv_audio_device_.get());
69 apm_send_ = AudioProcessing::Create();
70 apm_recv_ = AudioProcessing::Create();
71 CreateVoiceEngines();
77 AudioState::Config audio_state_config; 72 AudioState::Config audio_state_config;
78 audio_state_config.voice_engine = voe_recv_.voice_engine; 73 audio_state_config.voice_engine = voe_send_.voice_engine;
79 audio_state_config.audio_mixer = AudioMixerImpl::Create(); 74 audio_state_config.audio_mixer = AudioMixerImpl::Create();
80 audio_state_config.audio_processing = apm_recv_; 75 audio_state_config.audio_processing = apm_send_;
81 recv_config.audio_state = AudioState::Create(audio_state_config); 76 send_config.audio_state = AudioState::Create(audio_state_config);
82 } 77 }
83 CreateReceiverCall(recv_config); 78 CreateSenderCall(send_config);
84 } 79 if (sender_call_transport_controller_ != nullptr) {
85 test->OnCallsCreated(sender_call_.get(), receiver_call_.get()); 80 test->OnRtpTransportControllerSendCreated(
86 receive_transport_.reset(test->CreateReceiveTransport()); 81 sender_call_transport_controller_);
87 send_transport_.reset(test->CreateSendTransport(sender_call_.get())); 82 }
83 if (test->ShouldCreateReceivers()) {
84 Call::Config recv_config(test->GetReceiverCallConfig());
85 if (num_audio_streams_ > 0) {
86 AudioState::Config audio_state_config;
87 audio_state_config.voice_engine = voe_recv_.voice_engine;
88 audio_state_config.audio_mixer = AudioMixerImpl::Create();
89 audio_state_config.audio_processing = apm_recv_;
90 recv_config.audio_state = AudioState::Create(audio_state_config);
91 }
92 CreateReceiverCall(recv_config);
93 }
94 test->OnCallsCreated(sender_call_.get(), receiver_call_.get());
95 receive_transport_.reset(test->CreateReceiveTransport(&task_queue_));
96 send_transport_.reset(
97 test->CreateSendTransport(&task_queue_, sender_call_.get()));
88 98
89 if (test->ShouldCreateReceivers()) { 99 if (test->ShouldCreateReceivers()) {
90 send_transport_->SetReceiver(receiver_call_->Receiver()); 100 send_transport_->SetReceiver(receiver_call_->Receiver());
91 receive_transport_->SetReceiver(sender_call_->Receiver()); 101 receive_transport_->SetReceiver(sender_call_->Receiver());
92 if (num_video_streams_ > 0) 102 if (num_video_streams_ > 0)
93 receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); 103 receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
104 if (num_audio_streams_ > 0)
105 receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
106 } else {
107 // Sender-only call delivers to itself.
108 send_transport_->SetReceiver(sender_call_->Receiver());
109 receive_transport_->SetReceiver(nullptr);
110 }
111
112 CreateSendConfig(num_video_streams_, num_audio_streams_,
113 num_flexfec_streams_, send_transport_.get());
114 if (test->ShouldCreateReceivers()) {
115 CreateMatchingReceiveConfigs(receive_transport_.get());
116 }
117 if (num_video_streams_ > 0) {
118 test->ModifyVideoConfigs(&video_send_config_, &video_receive_configs_,
119 &video_encoder_config_);
120 }
121 if (num_audio_streams_ > 0) {
122 test->ModifyAudioConfigs(&audio_send_config_, &audio_receive_configs_);
123 }
124 if (num_flexfec_streams_ > 0) {
125 test->ModifyFlexfecConfigs(&flexfec_receive_configs_);
126 }
127
128 if (num_flexfec_streams_ > 0) {
129 CreateFlexfecStreams();
130 test->OnFlexfecStreamsCreated(flexfec_receive_streams_);
131 }
132 if (num_video_streams_ > 0) {
133 CreateVideoStreams();
134 test->OnVideoStreamsCreated(video_send_stream_, video_receive_streams_);
135 }
136 if (num_audio_streams_ > 0) {
137 CreateAudioStreams();
138 test->OnAudioStreamsCreated(audio_send_stream_, audio_receive_streams_);
139 }
140
141 if (num_video_streams_ > 0) {
142 int width = kDefaultWidth;
143 int height = kDefaultHeight;
144 int frame_rate = kDefaultFramerate;
145 test->ModifyVideoCaptureStartResolution(&width, &height, &frame_rate);
146 CreateFrameGeneratorCapturer(frame_rate, width, height);
147 test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_.get());
148 }
149
150 Start();
151 });
152
153 test->PerformTest();
154
155 task_queue_.SendTask([this]() {
156 Stop();
157 DestroyStreams();
158 send_transport_.reset();
159 receive_transport_.reset();
160 DestroyCalls();
94 if (num_audio_streams_ > 0) 161 if (num_audio_streams_ > 0)
95 receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp); 162 DestroyVoiceEngines();
96 } else { 163 });
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 164
151 test->OnTestFinished(); 165 test->OnTestFinished();
152 } 166 }
153 167
154 void CallTest::CreateCalls(const Call::Config& sender_config, 168 void CallTest::CreateCalls(const Call::Config& sender_config,
155 const Call::Config& receiver_config) { 169 const Call::Config& receiver_config) {
156 CreateSenderCall(sender_config); 170 CreateSenderCall(sender_config);
157 CreateReceiverCall(receiver_config); 171 CreateReceiverCall(receiver_config);
158 } 172 }
159 173
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 Call::Config BaseTest::GetReceiverCallConfig() { 528 Call::Config BaseTest::GetReceiverCallConfig() {
515 return Call::Config(event_log_.get()); 529 return Call::Config(event_log_.get());
516 } 530 }
517 531
518 void BaseTest::OnRtpTransportControllerSendCreated( 532 void BaseTest::OnRtpTransportControllerSendCreated(
519 RtpTransportControllerSend* controller) {} 533 RtpTransportControllerSend* controller) {}
520 534
521 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) { 535 void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {
522 } 536 }
523 537
524 test::PacketTransport* BaseTest::CreateSendTransport(Call* sender_call) { 538 test::PacketTransport* BaseTest::CreateSendTransport(
525 return new PacketTransport(sender_call, this, test::PacketTransport::kSender, 539 SingleThreadedTaskQueue* task_queue,
526 CallTest::payload_type_map_, 540 Call* sender_call) {
527 FakeNetworkPipe::Config()); 541 return new PacketTransport(
542 task_queue, sender_call, this, test::PacketTransport::kSender,
543 CallTest::payload_type_map_, FakeNetworkPipe::Config());
528 } 544 }
529 545
530 test::PacketTransport* BaseTest::CreateReceiveTransport() { 546 test::PacketTransport* BaseTest::CreateReceiveTransport(
531 return new PacketTransport(nullptr, this, test::PacketTransport::kReceiver, 547 SingleThreadedTaskQueue* task_queue) {
532 CallTest::payload_type_map_, 548 return new PacketTransport(
533 FakeNetworkPipe::Config()); 549 task_queue, nullptr, this, test::PacketTransport::kReceiver,
550 CallTest::payload_type_map_, FakeNetworkPipe::Config());
534 } 551 }
535 552
536 size_t BaseTest::GetNumVideoStreams() const { 553 size_t BaseTest::GetNumVideoStreams() const {
537 return 1; 554 return 1;
538 } 555 }
539 556
540 size_t BaseTest::GetNumAudioStreams() const { 557 size_t BaseTest::GetNumAudioStreams() const {
541 return 0; 558 return 0;
542 } 559 }
543 560
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 607
591 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) { 608 EndToEndTest::EndToEndTest(unsigned int timeout_ms) : BaseTest(timeout_ms) {
592 } 609 }
593 610
594 bool EndToEndTest::ShouldCreateReceivers() const { 611 bool EndToEndTest::ShouldCreateReceivers() const {
595 return true; 612 return true;
596 } 613 }
597 614
598 } // namespace test 615 } // namespace test
599 } // namespace webrtc 616 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698