Simplify ChannelManager initialization.
* A ChannelManager instance is now created via ChannelManager::Create()
* Initialization is performed inside Create(), RAII.
* All member variables in CM are now either const or RTC_GUARDED_BY
the worker thread.
* Removed dead code (initialization and capturing states are gone).
* ChannelManager now requires construction/destruction on worker thread.
- one fewer threads that its aware of.
* media_engine_ pointer removed from ConnectionContext.
* Thread policy changes moved from ChannelManager to ConnectionContext.
These changes will make a few other issues easier to fix, so tagging
those bugs with this CL.
Bug: webrtc:12601, webrtc:11988, webrtc:11992, webrtc:11994
Change-Id: I3284cf0a08c773e628af4124e8f52e9faddbe57a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/212617
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33614}
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index 364e87a..4d6d58d 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -108,24 +108,25 @@
// Create fake media engine/etc. so we can create channels to use to
// test RtpSenders/RtpReceivers.
media_engine_(new cricket::FakeMediaEngine()),
- channel_manager_(absl::WrapUnique(media_engine_),
- std::make_unique<cricket::RtpDataEngine>(),
- worker_thread_,
- network_thread_),
fake_call_(),
local_stream_(MediaStream::Create(kStreamId1)) {
- // Create channels to be used by the RtpSenders and RtpReceivers.
- channel_manager_.Init();
+ worker_thread_->Invoke<void>(RTC_FROM_HERE, [&]() {
+ channel_manager_ = cricket::ChannelManager::Create(
+ absl::WrapUnique(media_engine_),
+ std::make_unique<cricket::RtpDataEngine>(), false, worker_thread_,
+ network_thread_);
+ });
+
bool srtp_required = true;
rtp_dtls_transport_ = std::make_unique<cricket::FakeDtlsTransport>(
"fake_dtls_transport", cricket::ICE_CANDIDATE_COMPONENT_RTP);
rtp_transport_ = CreateDtlsSrtpTransport();
- voice_channel_ = channel_manager_.CreateVoiceChannel(
+ voice_channel_ = channel_manager_->CreateVoiceChannel(
&fake_call_, cricket::MediaConfig(), rtp_transport_.get(),
rtc::Thread::Current(), cricket::CN_AUDIO, srtp_required,
webrtc::CryptoOptions(), &ssrc_generator_, cricket::AudioOptions());
- video_channel_ = channel_manager_.CreateVideoChannel(
+ video_channel_ = channel_manager_->CreateVideoChannel(
&fake_call_, cricket::MediaConfig(), rtp_transport_.get(),
rtc::Thread::Current(), cricket::CN_VIDEO, srtp_required,
webrtc::CryptoOptions(), &ssrc_generator_, cricket::VideoOptions(),
@@ -161,6 +162,18 @@
cricket::StreamParams::CreateLegacy(kVideoSsrc2));
}
+ ~RtpSenderReceiverTest() {
+ audio_rtp_sender_ = nullptr;
+ video_rtp_sender_ = nullptr;
+ audio_rtp_receiver_ = nullptr;
+ video_rtp_receiver_ = nullptr;
+ local_stream_ = nullptr;
+ video_track_ = nullptr;
+ audio_track_ = nullptr;
+ worker_thread_->Invoke<void>(RTC_FROM_HERE,
+ [&]() { channel_manager_.reset(); });
+ }
+
std::unique_ptr<webrtc::RtpTransportInternal> CreateDtlsSrtpTransport() {
auto dtls_srtp_transport = std::make_unique<webrtc::DtlsSrtpTransport>(
/*rtcp_mux_required=*/true);
@@ -497,7 +510,7 @@
video_bitrate_allocator_factory_;
// |media_engine_| is actually owned by |channel_manager_|.
cricket::FakeMediaEngine* media_engine_;
- cricket::ChannelManager channel_manager_;
+ std::unique_ptr<cricket::ChannelManager> channel_manager_;
cricket::FakeCall fake_call_;
cricket::VoiceChannel* voice_channel_;
cricket::VideoChannel* video_channel_;