Propogate network-worker thread split to api
BUG=webrtc:5645
Review-Url: https://codereview.webrtc.org/1968393002
Cr-Commit-Position: refs/heads/master@{#12767}
diff --git a/webrtc/api/java/jni/peerconnection_jni.cc b/webrtc/api/java/jni/peerconnection_jni.cc
index 6c5ba97..165d6da 100644
--- a/webrtc/api/java/jni/peerconnection_jni.cc
+++ b/webrtc/api/java/jni/peerconnection_jni.cc
@@ -1038,14 +1038,16 @@
// single thing for Java to hold and eventually free.
class OwnedFactoryAndThreads {
public:
- OwnedFactoryAndThreads(Thread* worker_thread,
- Thread* signaling_thread,
+ OwnedFactoryAndThreads(std::unique_ptr<Thread> network_thread,
+ std::unique_ptr<Thread> worker_thread,
+ std::unique_ptr<Thread> signaling_thread,
WebRtcVideoEncoderFactory* encoder_factory,
WebRtcVideoDecoderFactory* decoder_factory,
rtc::NetworkMonitorFactory* network_monitor_factory,
PeerConnectionFactoryInterface* factory)
- : worker_thread_(worker_thread),
- signaling_thread_(signaling_thread),
+ : network_thread_(std::move(network_thread)),
+ worker_thread_(std::move(worker_thread)),
+ signaling_thread_(std::move(signaling_thread)),
encoder_factory_(encoder_factory),
decoder_factory_(decoder_factory),
network_monitor_factory_(network_monitor_factory),
@@ -1070,6 +1072,7 @@
private:
void JavaCallbackOnFactoryThreads();
+ const std::unique_ptr<Thread> network_thread_;
const std::unique_ptr<Thread> worker_thread_;
const std::unique_ptr<Thread> signaling_thread_;
WebRtcVideoEncoderFactory* encoder_factory_;
@@ -1083,11 +1086,15 @@
ScopedLocalRefFrame local_ref_frame(jni);
jclass j_factory_class = FindClass(jni, "org/webrtc/PeerConnectionFactory");
jmethodID m = nullptr;
- if (Thread::Current() == worker_thread_.get()) {
+ if (network_thread_->IsCurrent()) {
+ LOG(LS_INFO) << "Network thread JavaCallback";
+ m = GetStaticMethodID(jni, j_factory_class, "onNetworkThreadReady", "()V");
+ }
+ if (worker_thread_->IsCurrent()) {
LOG(LS_INFO) << "Worker thread JavaCallback";
m = GetStaticMethodID(jni, j_factory_class, "onWorkerThreadReady", "()V");
}
- if (Thread::Current() == signaling_thread_.get()) {
+ if (signaling_thread_->IsCurrent()) {
LOG(LS_INFO) << "Signaling thread JavaCallback";
m = GetStaticMethodID(
jni, j_factory_class, "onSignalingThreadReady", "()V");
@@ -1100,10 +1107,9 @@
void OwnedFactoryAndThreads::InvokeJavaCallbacksOnFactoryThreads() {
LOG(LS_INFO) << "InvokeJavaCallbacksOnFactoryThreads.";
- worker_thread_->Invoke<void>(
- Bind(&OwnedFactoryAndThreads::JavaCallbackOnFactoryThreads, this));
- signaling_thread_->Invoke<void>(
- Bind(&OwnedFactoryAndThreads::JavaCallbackOnFactoryThreads, this));
+ network_thread_->Invoke<void>([this] { JavaCallbackOnFactoryThreads(); });
+ worker_thread_->Invoke<void>([this] { JavaCallbackOnFactoryThreads(); });
+ signaling_thread_->Invoke<void>([this] { JavaCallbackOnFactoryThreads(); });
}
PeerConnectionFactoryInterface::Options ParseOptionsFromJava(JNIEnv* jni,
@@ -1143,12 +1149,20 @@
// about ramifications of auto-wrapping there.
rtc::ThreadManager::Instance()->WrapCurrentThread();
webrtc::Trace::CreateTrace();
- Thread* worker_thread = new Thread();
- worker_thread->SetName("worker_thread", NULL);
- Thread* signaling_thread = new Thread();
+
+ std::unique_ptr<Thread> network_thread =
+ rtc::Thread::CreateWithSocketServer();
+ network_thread->SetName("network_thread", nullptr);
+ RTC_CHECK(network_thread->Start()) << "Failed to start thread";
+
+ std::unique_ptr<Thread> worker_thread = rtc::Thread::Create();
+ worker_thread->SetName("worker_thread", nullptr);
+ RTC_CHECK(worker_thread->Start()) << "Failed to start thread";
+
+ std::unique_ptr<Thread> signaling_thread = rtc::Thread::Create();
signaling_thread->SetName("signaling_thread", NULL);
- RTC_CHECK(worker_thread->Start() && signaling_thread->Start())
- << "Failed to start threads";
+ RTC_CHECK(signaling_thread->Start()) << "Failed to start thread";
+
WebRtcVideoEncoderFactory* encoder_factory = nullptr;
WebRtcVideoDecoderFactory* decoder_factory = nullptr;
rtc::NetworkMonitorFactory* network_monitor_factory = nullptr;
@@ -1171,11 +1185,9 @@
}
rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
- webrtc::CreatePeerConnectionFactory(worker_thread,
- signaling_thread,
- NULL,
- encoder_factory,
- decoder_factory));
+ webrtc::CreatePeerConnectionFactory(
+ network_thread.get(), worker_thread.get(), signaling_thread.get(),
+ nullptr, encoder_factory, decoder_factory));
RTC_CHECK(factory) << "Failed to create the peer connection factory; "
<< "WebRTC/libjingle init likely failed on this device";
// TODO(honghaiz): Maybe put the options as the argument of
@@ -1184,8 +1196,8 @@
factory->SetOptions(options);
}
OwnedFactoryAndThreads* owned_factory = new OwnedFactoryAndThreads(
- worker_thread, signaling_thread,
- encoder_factory, decoder_factory,
+ std::move(network_thread), std::move(worker_thread),
+ std::move(signaling_thread), encoder_factory, decoder_factory,
network_monitor_factory, factory.release());
owned_factory->InvokeJavaCallbacksOnFactoryThreads();
return jlongFromPointer(owned_factory);
diff --git a/webrtc/api/java/src/org/webrtc/PeerConnectionFactory.java b/webrtc/api/java/src/org/webrtc/PeerConnectionFactory.java
index fef56ba..0c1ef3c 100644
--- a/webrtc/api/java/src/org/webrtc/PeerConnectionFactory.java
+++ b/webrtc/api/java/src/org/webrtc/PeerConnectionFactory.java
@@ -24,6 +24,7 @@
private static final String TAG = "PeerConnectionFactory";
private final long nativeFactory;
+ private static Thread networkThread;
private static Thread workerThread;
private static Thread signalingThread;
private EglBase localEglbase;
@@ -198,8 +199,9 @@
public void dispose() {
nativeFreeFactory(nativeFactory);
- signalingThread = null;
+ networkThread = null;
workerThread = null;
+ signalingThread = null;
if (localEglbase != null)
localEglbase.release();
if (remoteEglbase != null)
@@ -223,10 +225,16 @@
}
public static void printStackTraces() {
+ printStackTrace(networkThread, "Network thread");
printStackTrace(workerThread, "Worker thread");
printStackTrace(signalingThread, "Signaling thread");
}
+ private static void onNetworkThreadReady() {
+ networkThread = Thread.currentThread();
+ Logging.d(TAG, "onNetworkThreadReady");
+ }
+
private static void onWorkerThreadReady() {
workerThread = Thread.currentThread();
Logging.d(TAG, "onWorkerThreadReady");
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index 5284db3..dda0eeb 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -588,8 +588,9 @@
factory_->CreateMediaController(configuration.media_config));
session_.reset(
- new WebRtcSession(media_controller_.get(), factory_->signaling_thread(),
- factory_->worker_thread(), port_allocator_.get()));
+ new WebRtcSession(media_controller_.get(), factory_->network_thread(),
+ factory_->worker_thread(), factory_->signaling_thread(),
+ port_allocator_.get()));
stats_.reset(new StatsCollector(this));
// Initialize the WebRtcSession. It creates transport channels etc.
diff --git a/webrtc/api/peerconnection_unittest.cc b/webrtc/api/peerconnection_unittest.cc
index 1c3d073..24411ab 100644
--- a/webrtc/api/peerconnection_unittest.cc
+++ b/webrtc/api/peerconnection_unittest.cc
@@ -156,10 +156,11 @@
const PeerConnectionFactory::Options* options,
std::unique_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store,
bool prefer_constraint_apis,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread) {
PeerConnectionTestClient* client(new PeerConnectionTestClient(id));
if (!client->Init(constraints, options, std::move(dtls_identity_store),
- prefer_constraint_apis, worker_thread)) {
+ prefer_constraint_apis, network_thread, worker_thread)) {
delete client;
return nullptr;
}
@@ -170,27 +171,29 @@
const std::string& id,
const MediaConstraintsInterface* constraints,
const PeerConnectionFactory::Options* options,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread) {
std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store(
rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore()
: nullptr);
- return CreateClientWithDtlsIdentityStore(id, constraints, options,
- std::move(dtls_identity_store),
- true, worker_thread);
+ return CreateClientWithDtlsIdentityStore(
+ id, constraints, options, std::move(dtls_identity_store), true,
+ network_thread, worker_thread);
}
static PeerConnectionTestClient* CreateClientPreferNoConstraints(
const std::string& id,
const PeerConnectionFactory::Options* options,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread) {
std::unique_ptr<FakeDtlsIdentityStore> dtls_identity_store(
rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore()
: nullptr);
- return CreateClientWithDtlsIdentityStore(id, nullptr, options,
- std::move(dtls_identity_store),
- false, worker_thread);
+ return CreateClientWithDtlsIdentityStore(
+ id, nullptr, options, std::move(dtls_identity_store), false,
+ network_thread, worker_thread);
}
~PeerConnectionTestClient() {
@@ -806,6 +809,7 @@
const PeerConnectionFactory::Options* options,
std::unique_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store,
bool prefer_constraint_apis,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread) {
EXPECT_TRUE(!peer_connection_);
EXPECT_TRUE(!peer_connection_factory_);
@@ -815,7 +819,7 @@
prefer_constraint_apis_ = prefer_constraint_apis;
std::unique_ptr<cricket::PortAllocator> port_allocator(
- new cricket::FakePortAllocator(worker_thread, nullptr));
+ new cricket::FakePortAllocator(network_thread, nullptr));
fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
if (fake_audio_capture_module_ == nullptr) {
@@ -823,9 +827,11 @@
}
fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory();
fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory();
+ rtc::Thread* const signaling_thread = rtc::Thread::Current();
peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
- worker_thread, rtc::Thread::Current(), fake_audio_capture_module_,
- fake_video_encoder_factory_, fake_video_decoder_factory_);
+ network_thread, worker_thread, signaling_thread,
+ fake_audio_capture_module_, fake_video_encoder_factory_,
+ fake_video_decoder_factory_);
if (!peer_connection_factory_) {
return false;
}
@@ -1022,10 +1028,13 @@
class P2PTestConductor : public testing::Test {
public:
P2PTestConductor()
- : pss_(new rtc::PhysicalSocketServer),
+ : network_thread_(rtc::Thread::CreateWithSocketServer()),
+ worker_thread_(rtc::Thread::Create()),
+ pss_(new rtc::PhysicalSocketServer),
ss_(new rtc::VirtualSocketServer(pss_.get())),
ss_scope_(ss_.get()) {
- RTC_CHECK(worker_thread_.Start());
+ RTC_CHECK(network_thread_->Start());
+ RTC_CHECK(worker_thread_->Start());
}
bool SessionActive() {
@@ -1135,10 +1144,10 @@
bool CreateTestClientsThatPreferNoConstraints() {
initiating_client_.reset(
PeerConnectionTestClient::CreateClientPreferNoConstraints(
- "Caller: ", nullptr, &worker_thread_));
+ "Caller: ", nullptr, network_thread_.get(), worker_thread_.get()));
receiving_client_.reset(
PeerConnectionTestClient::CreateClientPreferNoConstraints(
- "Callee: ", nullptr, &worker_thread_));
+ "Callee: ", nullptr, network_thread_.get(), worker_thread_.get()));
if (!initiating_client_ || !receiving_client_) {
return false;
}
@@ -1158,9 +1167,11 @@
MediaConstraintsInterface* recv_constraints,
PeerConnectionFactory::Options* recv_options) {
initiating_client_.reset(PeerConnectionTestClient::CreateClient(
- "Caller: ", init_constraints, init_options, &worker_thread_));
+ "Caller: ", init_constraints, init_options, network_thread_.get(),
+ worker_thread_.get()));
receiving_client_.reset(PeerConnectionTestClient::CreateClient(
- "Callee: ", recv_constraints, recv_options, &worker_thread_));
+ "Callee: ", recv_constraints, recv_options, network_thread_.get(),
+ worker_thread_.get()));
if (!initiating_client_ || !receiving_client_) {
return false;
}
@@ -1262,7 +1273,7 @@
return PeerConnectionTestClient::CreateClientWithDtlsIdentityStore(
"New Peer: ", &setup_constraints, nullptr,
std::move(dtls_identity_store), prefer_constraint_apis_,
- &worker_thread_);
+ network_thread_.get(), worker_thread_.get());
}
void SendRtpData(webrtc::DataChannelInterface* dc, const std::string& data) {
@@ -1304,7 +1315,8 @@
private:
// |worker_thread_| is used by both |initiating_client_| and
// |receiving_client_|. Must be destroyed last.
- rtc::Thread worker_thread_;
+ std::unique_ptr<rtc::Thread> network_thread_;
+ std::unique_ptr<rtc::Thread> worker_thread_;
std::unique_ptr<rtc::PhysicalSocketServer> pss_;
std::unique_ptr<rtc::VirtualSocketServer> ss_;
rtc::SocketServerScope ss_scope_;
diff --git a/webrtc/api/peerconnectionendtoend_unittest.cc b/webrtc/api/peerconnectionendtoend_unittest.cc
index 40bb437..4ca73ba 100644
--- a/webrtc/api/peerconnectionendtoend_unittest.cc
+++ b/webrtc/api/peerconnectionendtoend_unittest.cc
@@ -50,11 +50,12 @@
DataChannelList;
PeerConnectionEndToEndTest() {
+ RTC_CHECK(network_thread_.Start());
RTC_CHECK(worker_thread_.Start());
caller_ = new rtc::RefCountedObject<PeerConnectionTestWrapper>(
- "caller", &worker_thread_);
+ "caller", &network_thread_, &worker_thread_);
callee_ = new rtc::RefCountedObject<PeerConnectionTestWrapper>(
- "callee", &worker_thread_);
+ "callee", &network_thread_, &worker_thread_);
#ifdef WEBRTC_ANDROID
webrtc::InitializeAndroidObjects();
#endif
@@ -155,6 +156,7 @@
}
protected:
+ rtc::Thread network_thread_;
rtc::Thread worker_thread_;
rtc::scoped_refptr<PeerConnectionTestWrapper> caller_;
rtc::scoped_refptr<PeerConnectionTestWrapper> callee_;
diff --git a/webrtc/api/peerconnectionfactory.cc b/webrtc/api/peerconnectionfactory.cc
index d236b19..9cb5b46 100644
--- a/webrtc/api/peerconnectionfactory.cc
+++ b/webrtc/api/peerconnectionfactory.cc
@@ -74,19 +74,17 @@
pc_factory);
}
-rtc::scoped_refptr<PeerConnectionFactoryInterface>
-CreatePeerConnectionFactory(
+rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
rtc::Thread* signaling_thread,
AudioDeviceModule* default_adm,
cricket::WebRtcVideoEncoderFactory* encoder_factory,
cricket::WebRtcVideoDecoderFactory* decoder_factory) {
rtc::scoped_refptr<PeerConnectionFactory> pc_factory(
- new rtc::RefCountedObject<PeerConnectionFactory>(worker_thread,
- signaling_thread,
- default_adm,
- encoder_factory,
- decoder_factory));
+ new rtc::RefCountedObject<PeerConnectionFactory>(
+ network_thread, worker_thread, signaling_thread, default_adm,
+ encoder_factory, decoder_factory));
// Call Initialize synchronously but make sure its executed on
// |signaling_thread|.
@@ -104,16 +102,19 @@
PeerConnectionFactory::PeerConnectionFactory()
: owns_ptrs_(true),
wraps_current_thread_(false),
- signaling_thread_(rtc::ThreadManager::Instance()->CurrentThread()),
- worker_thread_(new rtc::Thread) {
+ network_thread_(rtc::Thread::CreateWithSocketServer().release()),
+ worker_thread_(rtc::Thread::Create().release()),
+ signaling_thread_(rtc::Thread::Current()) {
if (!signaling_thread_) {
signaling_thread_ = rtc::ThreadManager::Instance()->WrapCurrentThread();
wraps_current_thread_ = true;
}
+ network_thread_->Start();
worker_thread_->Start();
}
PeerConnectionFactory::PeerConnectionFactory(
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
rtc::Thread* signaling_thread,
AudioDeviceModule* default_adm,
@@ -121,13 +122,15 @@
cricket::WebRtcVideoDecoderFactory* video_decoder_factory)
: owns_ptrs_(false),
wraps_current_thread_(false),
- signaling_thread_(signaling_thread),
+ network_thread_(network_thread),
worker_thread_(worker_thread),
+ signaling_thread_(signaling_thread),
default_adm_(default_adm),
video_encoder_factory_(video_encoder_factory),
video_decoder_factory_(video_decoder_factory) {
- ASSERT(worker_thread != NULL);
- ASSERT(signaling_thread != NULL);
+ RTC_DCHECK(network_thread);
+ RTC_DCHECK(worker_thread);
+ RTC_DCHECK(signaling_thread);
// TODO: Currently there is no way creating an external adm in
// libjingle source tree. So we can 't currently assert if this is NULL.
// ASSERT(default_adm != NULL);
@@ -148,6 +151,7 @@
if (wraps_current_thread_)
rtc::ThreadManager::Instance()->UnwrapCurrentThread();
delete worker_thread_;
+ delete network_thread_;
}
}
@@ -161,7 +165,7 @@
}
default_socket_factory_.reset(
- new rtc::BasicPacketSocketFactory(worker_thread_));
+ new rtc::BasicPacketSocketFactory(network_thread_));
if (!default_socket_factory_) {
return false;
}
@@ -172,17 +176,16 @@
worker_thread_->Invoke<cricket::MediaEngineInterface*>(rtc::Bind(
&PeerConnectionFactory::CreateMediaEngine_w, this));
- rtc::Thread* const network_thread = worker_thread_;
channel_manager_.reset(new cricket::ChannelManager(
- media_engine, worker_thread_, network_thread));
+ media_engine, worker_thread_, network_thread_));
channel_manager_->SetVideoRtxEnabled(true);
if (!channel_manager_->Init()) {
return false;
}
- dtls_identity_store_ = new RefCountedDtlsIdentityStore(
- signaling_thread_, worker_thread_);
+ dtls_identity_store_ =
+ new RefCountedDtlsIdentityStore(signaling_thread_, network_thread_);
return true;
}
@@ -340,6 +343,10 @@
return worker_thread_;
}
+rtc::Thread* PeerConnectionFactory::network_thread() {
+ return network_thread_;
+}
+
cricket::MediaEngineInterface* PeerConnectionFactory::CreateMediaEngine_w() {
ASSERT(worker_thread_ == rtc::Thread::Current());
return cricket::WebRtcMediaEngineFactory::Create(
diff --git a/webrtc/api/peerconnectionfactory.h b/webrtc/api/peerconnectionfactory.h
index ec8ea17..21165cf 100644
--- a/webrtc/api/peerconnectionfactory.h
+++ b/webrtc/api/peerconnectionfactory.h
@@ -94,11 +94,13 @@
const cricket::MediaConfig& config) const;
virtual rtc::Thread* signaling_thread();
virtual rtc::Thread* worker_thread();
+ virtual rtc::Thread* network_thread();
const Options& options() const { return options_; }
protected:
PeerConnectionFactory();
PeerConnectionFactory(
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
rtc::Thread* signaling_thread,
AudioDeviceModule* default_adm,
@@ -111,8 +113,9 @@
bool owns_ptrs_;
bool wraps_current_thread_;
- rtc::Thread* signaling_thread_;
+ rtc::Thread* network_thread_;
rtc::Thread* worker_thread_;
+ rtc::Thread* signaling_thread_;
Options options_;
// External Audio device used for audio playback.
rtc::scoped_refptr<AudioDeviceModule> default_adm_;
diff --git a/webrtc/api/peerconnectionfactory_unittest.cc b/webrtc/api/peerconnectionfactory_unittest.cc
index 963f1fe..de21e80 100644
--- a/webrtc/api/peerconnectionfactory_unittest.cc
+++ b/webrtc/api/peerconnectionfactory_unittest.cc
@@ -87,11 +87,9 @@
#ifdef WEBRTC_ANDROID
webrtc::InitializeAndroidObjects();
#endif
- factory_ = webrtc::CreatePeerConnectionFactory(rtc::Thread::Current(),
- rtc::Thread::Current(),
- NULL,
- NULL,
- NULL);
+ factory_ = webrtc::CreatePeerConnectionFactory(
+ rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
+ nullptr, nullptr, nullptr);
ASSERT_TRUE(factory_.get() != NULL);
port_allocator_.reset(
diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h
index 68904e2..7575c7a 100644
--- a/webrtc/api/peerconnectioninterface.h
+++ b/webrtc/api/peerconnectioninterface.h
@@ -58,7 +58,6 @@
#include "webrtc/api/datachannelinterface.h"
#include "webrtc/api/dtlsidentitystore.h"
-#include "webrtc/api/dtlsidentitystore.h"
#include "webrtc/api/dtmfsenderinterface.h"
#include "webrtc/api/jsep.h"
#include "webrtc/api/mediastreaminterface.h"
@@ -66,6 +65,7 @@
#include "webrtc/api/rtpsenderinterface.h"
#include "webrtc/api/statstypes.h"
#include "webrtc/api/umametrics.h"
+#include "webrtc/base/deprecation.h"
#include "webrtc/base/fileutils.h"
#include "webrtc/base/network.h"
#include "webrtc/base/rtccertificate.h"
@@ -679,19 +679,34 @@
// Create a new instance of PeerConnectionFactoryInterface.
//
-// |worker_thread| and |signaling_thread| are the only mandatory
-// parameters.
+// |network_thread|, |worker_thread| and |signaling_thread| are
+// the only mandatory parameters.
//
// If non-null, ownership of |default_adm|, |encoder_factory| and
// |decoder_factory| are transferred to the returned factory.
-rtc::scoped_refptr<PeerConnectionFactoryInterface>
-CreatePeerConnectionFactory(
+rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
rtc::Thread* signaling_thread,
AudioDeviceModule* default_adm,
cricket::WebRtcVideoEncoderFactory* encoder_factory,
cricket::WebRtcVideoDecoderFactory* decoder_factory);
+// Create a new instance of PeerConnectionFactoryInterface.
+// Same thread is used as worker and network thread.
+RTC_DEPRECATED
+inline rtc::scoped_refptr<PeerConnectionFactoryInterface>
+CreatePeerConnectionFactory(
+ rtc::Thread* worker_and_network_thread,
+ rtc::Thread* signaling_thread,
+ AudioDeviceModule* default_adm,
+ cricket::WebRtcVideoEncoderFactory* encoder_factory,
+ cricket::WebRtcVideoDecoderFactory* decoder_factory) {
+ return CreatePeerConnectionFactory(
+ worker_and_network_thread, worker_and_network_thread, signaling_thread,
+ default_adm, encoder_factory, decoder_factory);
+}
+
} // namespace webrtc
#endif // WEBRTC_API_PEERCONNECTIONINTERFACE_H_
diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc
index d33a402..445f025 100644
--- a/webrtc/api/peerconnectioninterface_unittest.cc
+++ b/webrtc/api/peerconnectioninterface_unittest.cc
@@ -545,9 +545,9 @@
virtual void SetUp() {
pc_factory_ = webrtc::CreatePeerConnectionFactory(
- rtc::Thread::Current(), rtc::Thread::Current(), NULL, NULL,
- NULL);
- ASSERT_TRUE(pc_factory_.get() != NULL);
+ rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
+ nullptr, nullptr, nullptr);
+ ASSERT_TRUE(pc_factory_);
}
void CreatePeerConnection() {
diff --git a/webrtc/api/statscollector_unittest.cc b/webrtc/api/statscollector_unittest.cc
index 9243aed..7953515 100644
--- a/webrtc/api/statscollector_unittest.cc
+++ b/webrtc/api/statscollector_unittest.cc
@@ -75,6 +75,7 @@
: WebRtcSession(media_controller,
rtc::Thread::Current(),
rtc::Thread::Current(),
+ rtc::Thread::Current(),
nullptr) {}
MOCK_METHOD0(voice_channel, cricket::VoiceChannel*());
MOCK_METHOD0(video_channel, cricket::VideoChannel*());
diff --git a/webrtc/api/test/peerconnectiontestwrapper.cc b/webrtc/api/test/peerconnectiontestwrapper.cc
index 1ec2b47..ed8e031 100644
--- a/webrtc/api/test/peerconnectiontestwrapper.cc
+++ b/webrtc/api/test/peerconnectiontestwrapper.cc
@@ -47,16 +47,20 @@
caller, &PeerConnectionTestWrapper::ReceiveAnswerSdp);
}
-PeerConnectionTestWrapper::PeerConnectionTestWrapper(const std::string& name,
- rtc::Thread* worker_thread)
- : name_(name), worker_thread_(worker_thread) {}
+PeerConnectionTestWrapper::PeerConnectionTestWrapper(
+ const std::string& name,
+ rtc::Thread* network_thread,
+ rtc::Thread* worker_thread)
+ : name_(name),
+ network_thread_(network_thread),
+ worker_thread_(worker_thread) {}
PeerConnectionTestWrapper::~PeerConnectionTestWrapper() {}
bool PeerConnectionTestWrapper::CreatePc(
const MediaConstraintsInterface* constraints) {
std::unique_ptr<cricket::PortAllocator> port_allocator(
- new cricket::FakePortAllocator(worker_thread_, nullptr));
+ new cricket::FakePortAllocator(network_thread_, nullptr));
fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
if (fake_audio_capture_module_ == NULL) {
@@ -64,8 +68,8 @@
}
peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
- worker_thread_, rtc::Thread::Current(), fake_audio_capture_module_, NULL,
- NULL);
+ network_thread_, worker_thread_, rtc::Thread::Current(),
+ fake_audio_capture_module_, NULL, NULL);
if (!peer_connection_factory_) {
return false;
}
diff --git a/webrtc/api/test/peerconnectiontestwrapper.h b/webrtc/api/test/peerconnectiontestwrapper.h
index 7a9bea4..3272366 100644
--- a/webrtc/api/test/peerconnectiontestwrapper.h
+++ b/webrtc/api/test/peerconnectiontestwrapper.h
@@ -27,8 +27,9 @@
static void Connect(PeerConnectionTestWrapper* caller,
PeerConnectionTestWrapper* callee);
- explicit PeerConnectionTestWrapper(const std::string& name,
- rtc::Thread* worker_thread);
+ PeerConnectionTestWrapper(const std::string& name,
+ rtc::Thread* network_thread,
+ rtc::Thread* worker_thread);
virtual ~PeerConnectionTestWrapper();
bool CreatePc(const webrtc::MediaConstraintsInterface* constraints);
@@ -91,7 +92,8 @@
bool video, const webrtc::FakeConstraints& video_constraints);
std::string name_;
- rtc::Thread* worker_thread_;
+ rtc::Thread* const network_thread_;
+ rtc::Thread* const worker_thread_;
rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
peer_connection_factory_;
diff --git a/webrtc/api/webrtcsession.cc b/webrtc/api/webrtcsession.cc
index 96442c8..e7d9b14 100644
--- a/webrtc/api/webrtcsession.cc
+++ b/webrtc/api/webrtcsession.cc
@@ -454,17 +454,18 @@
}
WebRtcSession::WebRtcSession(webrtc::MediaControllerInterface* media_controller,
- rtc::Thread* signaling_thread,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
+ rtc::Thread* signaling_thread,
cricket::PortAllocator* port_allocator)
- : signaling_thread_(signaling_thread),
- worker_thread_(worker_thread),
+ : worker_thread_(worker_thread),
+ signaling_thread_(signaling_thread),
// RFC 3264: The numeric value of the session id and version in the
// o line MUST be representable with a "64 bit signed integer".
// Due to this constraint session id |sid_| is max limited to LLONG_MAX.
sid_(rtc::ToString(rtc::CreateRandomId64() & LLONG_MAX)),
transport_controller_(new cricket::TransportController(signaling_thread,
- worker_thread,
+ network_thread,
port_allocator)),
media_controller_(media_controller),
channel_manager_(media_controller_->channel_manager()),
diff --git a/webrtc/api/webrtcsession.h b/webrtc/api/webrtcsession.h
index d0a5cd4..a97bd73 100644
--- a/webrtc/api/webrtcsession.h
+++ b/webrtc/api/webrtcsession.h
@@ -138,14 +138,15 @@
};
WebRtcSession(webrtc::MediaControllerInterface* media_controller,
- rtc::Thread* signaling_thread,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
+ rtc::Thread* signaling_thread,
cricket::PortAllocator* port_allocator);
virtual ~WebRtcSession();
// These are const to allow them to be called from const methods.
- rtc::Thread* signaling_thread() const { return signaling_thread_; }
rtc::Thread* worker_thread() const { return worker_thread_; }
+ rtc::Thread* signaling_thread() const { return signaling_thread_; }
// The ID of this session.
const std::string& id() const { return sid_; }
@@ -470,8 +471,8 @@
void OnSentPacket_w(const rtc::SentPacket& sent_packet);
- rtc::Thread* const signaling_thread_;
rtc::Thread* const worker_thread_;
+ rtc::Thread* const signaling_thread_;
State state_ = STATE_INIT;
Error error_ = ERROR_NONE;
diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc
index d81aece..ea8b3c5 100644
--- a/webrtc/api/webrtcsession_unittest.cc
+++ b/webrtc/api/webrtcsession_unittest.cc
@@ -208,13 +208,15 @@
class WebRtcSessionForTest : public webrtc::WebRtcSession {
public:
WebRtcSessionForTest(webrtc::MediaControllerInterface* media_controller,
- rtc::Thread* signaling_thread,
+ rtc::Thread* network_thread,
rtc::Thread* worker_thread,
+ rtc::Thread* signaling_thread,
cricket::PortAllocator* port_allocator,
webrtc::IceObserver* ice_observer)
: WebRtcSession(media_controller,
- signaling_thread,
+ network_thread,
worker_thread,
+ signaling_thread,
port_allocator) {
RegisterIceObserver(ice_observer);
}
@@ -381,7 +383,7 @@
ASSERT_TRUE(session_.get() == NULL);
session_.reset(new WebRtcSessionForTest(
media_controller_.get(), rtc::Thread::Current(), rtc::Thread::Current(),
- allocator_.get(), &observer_));
+ rtc::Thread::Current(), allocator_.get(), &observer_));
session_->SignalDataChannelOpenMessage.connect(
this, &WebRtcSessionTest::OnDataChannelOpenMessage);
session_->GetOnDestroyedSignal()->connect(
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm
index 82d7707..2398ce5 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm
@@ -23,23 +23,30 @@
#include <memory>
@implementation RTCPeerConnectionFactory {
- std::unique_ptr<rtc::Thread> _signalingThread;
+ std::unique_ptr<rtc::Thread> _networkThread;
std::unique_ptr<rtc::Thread> _workerThread;
+ std::unique_ptr<rtc::Thread> _signalingThread;
}
@synthesize nativeFactory = _nativeFactory;
- (instancetype)init {
if ((self = [super init])) {
- _signalingThread.reset(new rtc::Thread());
- BOOL result = _signalingThread->Start();
- NSAssert(result, @"Failed to start signaling thread.");
- _workerThread.reset(new rtc::Thread());
+ _networkThread = rtc::Thread::CreateWithSocketServer();
+ BOOL result = _networkThread->Start();
+ NSAssert(result, @"Failed to start network thread.");
+
+ _workerThread = rtc::Thread::Create();
result = _workerThread->Start();
NSAssert(result, @"Failed to start worker thread.");
+ _signalingThread = rtc::Thread::Create();
+ result = _signalingThread->Start();
+ NSAssert(result, @"Failed to start signaling thread.");
+
_nativeFactory = webrtc::CreatePeerConnectionFactory(
- _workerThread.get(), _signalingThread.get(), nullptr, nullptr, nullptr);
+ _networkThread.get(), _workerThread.get(), _signalingThread.get(),
+ nullptr, nullptr, nullptr);
NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!");
}
return self;