Chromium Code Reviews| Index: content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| index a48d508c1365e2effcca1ae685f2fbced508b756..1d4ad5ec0daec6d4856151dffa87d5f34dffa442 100644 |
| --- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| +++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| @@ -169,6 +169,7 @@ PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( |
| p2p_socket_dispatcher_(p2p_socket_dispatcher), |
| signaling_thread_(NULL), |
| worker_thread_(NULL), |
| + chrome_signaling_thread_("Chrome_libJingle_Signaling"), |
| chrome_worker_thread_("Chrome_libJingle_WorkerThread") { |
| } |
| @@ -186,7 +187,7 @@ PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler( |
| // webKitRTCPeerConnection. |
| UpdateWebRTCMethodCount(WEBKIT_RTC_PEER_CONNECTION); |
| - return new RTCPeerConnectionHandler(client, this); |
| + return new RTCPeerConnectionHandler(client, this, GetWebRtcSignalingThread()); |
| } |
| bool PeerConnectionDependencyFactory::InitializeMediaStreamAudioSource( |
| @@ -273,15 +274,16 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { |
| DCHECK(!worker_thread_); |
| DCHECK(!network_manager_); |
| DCHECK(!socket_factory_); |
| + DCHECK(!chrome_signaling_thread_.IsRunning()); |
| DCHECK(!chrome_worker_thread_.IsRunning()); |
| DVLOG(1) << "PeerConnectionDependencyFactory::CreatePeerConnectionFactory()"; |
| + // To allow sending to the signaling/worker threads. |
| jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); |
| jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); |
| - signaling_thread_ = jingle_glue::JingleThreadWrapper::current(); |
| - CHECK(signaling_thread_); |
| + CHECK(chrome_signaling_thread_.Start()); |
| CHECK(chrome_worker_thread_.Start()); |
| base::WaitableEvent start_worker_event(true, false); |
| @@ -290,18 +292,17 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { |
| base::Unretained(this), |
| &worker_thread_, |
| &start_worker_event)); |
| - start_worker_event.Wait(); |
| - CHECK(worker_thread_); |
| base::WaitableEvent create_network_manager_event(true, false); |
| chrome_worker_thread_.message_loop()->PostTask(FROM_HERE, base::Bind( |
| &PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnWorkerThread, |
| base::Unretained(this), |
| &create_network_manager_event)); |
| + |
| + start_worker_event.Wait(); |
| create_network_manager_event.Wait(); |
| - socket_factory_.reset( |
| - new IpcPacketSocketFactory(p2p_socket_dispatcher_.get())); |
| + CHECK(worker_thread_); |
| // Init SSL, which will be needed by PeerConnection. |
| #if defined(USE_OPENSSL) |
| @@ -315,19 +316,53 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { |
| net::EnsureNSSSSLInit(); |
| #endif |
| + base::WaitableEvent start_signaling_event(true, false); |
| + chrome_signaling_thread_.message_loop()->PostTask(FROM_HERE, base::Bind( |
| + &PeerConnectionDependencyFactory::InitializeSignalingThread, |
| + base::Unretained(this), |
| + RenderThreadImpl::current()->GetGpuFactories(), |
| + &start_signaling_event)); |
| + |
| + // TODO(xians): Remove the following code after kDisableAudioTrackProcessing |
| + // is removed. |
| + if (!MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled()) { |
|
no longer working on chromium
2014/10/30 11:55:14
just remove line 328-335
:) or you probably should
tommi (sloooow) - chröme
2014/10/30 20:37:36
Good point. Looked at your cl and lgtm-ed it.
|
| + aec_dump_message_filter_ = AecDumpMessageFilter::Get(); |
| + // In unit tests not creating a message filter, |aec_dump_message_filter_| |
| + // will be NULL. We can just ignore that. Other unit tests and browser tests |
| + // ensure that we do get the filter when we should. |
| + if (aec_dump_message_filter_.get()) |
| + aec_dump_message_filter_->AddDelegate(this); |
| + } |
| + |
| + start_signaling_event.Wait(); |
| + CHECK(signaling_thread_); |
| +} |
| + |
| +void PeerConnectionDependencyFactory::InitializeSignalingThread( |
| + const scoped_refptr<media::GpuVideoAcceleratorFactories>& gpu_factories, |
| + base::WaitableEvent* event) { |
| + DCHECK(chrome_signaling_thread_.task_runner()->BelongsToCurrentThread()); |
| + DCHECK(worker_thread_); |
| + DCHECK(p2p_socket_dispatcher_.get()); |
| + |
| + jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); |
| + jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); |
| + signaling_thread_ = jingle_glue::JingleThreadWrapper::current(); |
| + |
| + EnsureWebRtcAudioDeviceImpl(); |
| + |
| + socket_factory_.reset( |
| + new IpcPacketSocketFactory(p2p_socket_dispatcher_.get())); |
| + |
| scoped_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; |
| scoped_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; |
| const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
| - scoped_refptr<media::GpuVideoAcceleratorFactories> gpu_factories = |
| - RenderThreadImpl::current()->GetGpuFactories(); |
| - if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) { |
| - if (gpu_factories.get()) |
| + if (gpu_factories.get()) { |
| + if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) |
| decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); |
| - } |
| - if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) { |
| - if (gpu_factories.get()) |
| + if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) |
| encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); |
| } |
| @@ -336,33 +371,18 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { |
| encoder_factory.reset(); |
| #endif |
| - EnsureWebRtcAudioDeviceImpl(); |
| - |
| - scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
| - webrtc::CreatePeerConnectionFactory(worker_thread_, |
| - signaling_thread_, |
| - audio_device_.get(), |
| - encoder_factory.release(), |
| - decoder_factory.release())); |
| - CHECK(factory.get()); |
| + pc_factory_ = webrtc::CreatePeerConnectionFactory( |
| + worker_thread_, signaling_thread_, audio_device_.get(), |
| + encoder_factory.release(), decoder_factory.release()); |
| + CHECK(pc_factory_.get()); |
| - pc_factory_ = factory; |
| webrtc::PeerConnectionFactoryInterface::Options factory_options; |
| factory_options.disable_sctp_data_channels = false; |
| factory_options.disable_encryption = |
| cmd_line->HasSwitch(switches::kDisableWebRtcEncryption); |
| pc_factory_->SetOptions(factory_options); |
| - // TODO(xians): Remove the following code after kDisableAudioTrackProcessing |
| - // is removed. |
| - if (!MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled()) { |
| - aec_dump_message_filter_ = AecDumpMessageFilter::Get(); |
| - // In unit tests not creating a message filter, |aec_dump_message_filter_| |
| - // will be NULL. We can just ignore that. Other unit tests and browser tests |
| - // ensure that we do get the filter when we should. |
| - if (aec_dump_message_filter_.get()) |
| - aec_dump_message_filter_->AddDelegate(this); |
| - } |
| + event->Signal(); |
| } |
| bool PeerConnectionDependencyFactory::PeerConnectionFactoryCreated() { |
| @@ -600,22 +620,6 @@ PeerConnectionDependencyFactory::CreateAudioCapturer( |
| audio_source); |
| } |
| -void PeerConnectionDependencyFactory::AddNativeAudioTrackToBlinkTrack( |
| - webrtc::MediaStreamTrackInterface* native_track, |
| - const blink::WebMediaStreamTrack& webkit_track, |
| - bool is_local_track) { |
| - DCHECK(!webkit_track.isNull() && !webkit_track.extraData()); |
| - DCHECK_EQ(blink::WebMediaStreamSource::TypeAudio, |
| - webkit_track.source().type()); |
| - blink::WebMediaStreamTrack track = webkit_track; |
| - |
| - DVLOG(1) << "AddNativeTrackToBlinkTrack() audio"; |
| - track.setExtraData( |
| - new MediaStreamTrack( |
| - static_cast<webrtc::AudioTrackInterface*>(native_track), |
| - is_local_track)); |
| -} |
| - |
| scoped_refptr<base::MessageLoopProxy> |
| PeerConnectionDependencyFactory::GetWebRtcWorkerThread() const { |
| DCHECK(CalledOnValidThread()); |
| @@ -625,7 +629,7 @@ PeerConnectionDependencyFactory::GetWebRtcWorkerThread() const { |
| scoped_refptr<base::MessageLoopProxy> |
| PeerConnectionDependencyFactory::GetWebRtcSignalingThread() const { |
| DCHECK(CalledOnValidThread()); |
| - return RenderThreadImpl::current()->GetMessageLoop()->message_loop_proxy(); |
| + return chrome_signaling_thread_.message_loop_proxy(); |
| } |
| void PeerConnectionDependencyFactory::OnAecDumpFile( |