Add thread accessors to Call.

Classes associated with the Call instance, need access to these threads
and/or awareness, for checking for thread correctness.

Bug: webrtc:11993
Change-Id: I93bcee0657875f211be2ec959b96f818fa9fd8a0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215584
Reviewed-by: Markus Handell <handellm@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33772}
This commit is contained in:
Tomas Gunnarsson
2021-04-19 09:21:06 +02:00
committed by Commit Bot
parent bddebc8b03
commit e984aa2e58
8 changed files with 52 additions and 3 deletions

View File

@ -292,6 +292,9 @@ class Call final : public webrtc::Call,
const WebRtcKeyValueConfig& trials() const override; const WebRtcKeyValueConfig& trials() const override;
TaskQueueBase* network_thread() const override;
TaskQueueBase* worker_thread() const override;
// Implements PacketReceiver. // Implements PacketReceiver.
DeliveryStatus DeliverPacket(MediaType media_type, DeliveryStatus DeliverPacket(MediaType media_type,
rtc::CopyOnWriteBuffer packet, rtc::CopyOnWriteBuffer packet,
@ -1164,6 +1167,14 @@ const WebRtcKeyValueConfig& Call::trials() const {
return *config_.trials; return *config_.trials;
} }
TaskQueueBase* Call::network_thread() const {
return network_thread_;
}
TaskQueueBase* Call::worker_thread() const {
return worker_thread_;
}
void Call::SignalChannelNetworkState(MediaType media, NetworkState state) { void Call::SignalChannelNetworkState(MediaType media, NetworkState state) {
RTC_DCHECK_RUN_ON(network_thread_); RTC_DCHECK_RUN_ON(network_thread_);
RTC_DCHECK(media == MediaType::AUDIO || media == MediaType::VIDEO); RTC_DCHECK(media == MediaType::AUDIO || media == MediaType::VIDEO);

View File

@ -17,6 +17,7 @@
#include "api/adaptation/resource.h" #include "api/adaptation/resource.h"
#include "api/media_types.h" #include "api/media_types.h"
#include "api/task_queue/task_queue_base.h"
#include "call/audio_receive_stream.h" #include "call/audio_receive_stream.h"
#include "call/audio_send_stream.h" #include "call/audio_send_stream.h"
#include "call/call_config.h" #include "call/call_config.h"
@ -158,6 +159,9 @@ class Call {
virtual const WebRtcKeyValueConfig& trials() const = 0; virtual const WebRtcKeyValueConfig& trials() const = 0;
virtual TaskQueueBase* network_thread() const = 0;
virtual TaskQueueBase* worker_thread() const = 0;
virtual ~Call() {} virtual ~Call() {}
}; };

View File

@ -270,6 +270,14 @@ const WebRtcKeyValueConfig& DegradedCall::trials() const {
return call_->trials(); return call_->trials();
} }
TaskQueueBase* DegradedCall::network_thread() const {
return call_->network_thread();
}
TaskQueueBase* DegradedCall::worker_thread() const {
return call_->worker_thread();
}
void DegradedCall::SignalChannelNetworkState(MediaType media, void DegradedCall::SignalChannelNetworkState(MediaType media,
NetworkState state) { NetworkState state) {
call_->SignalChannelNetworkState(media, state); call_->SignalChannelNetworkState(media, state);

View File

@ -87,6 +87,9 @@ class DegradedCall : public Call, private PacketReceiver {
const WebRtcKeyValueConfig& trials() const override; const WebRtcKeyValueConfig& trials() const override;
TaskQueueBase* network_thread() const override;
TaskQueueBase* worker_thread() const override;
void SignalChannelNetworkState(MediaType media, NetworkState state) override; void SignalChannelNetworkState(MediaType media, NetworkState state) override;
void OnAudioTransportOverheadChanged( void OnAudioTransportOverheadChanged(
int transport_overhead_per_packet) override; int transport_overhead_per_packet) override;

View File

@ -17,6 +17,7 @@
#include "media/base/rtp_utils.h" #include "media/base/rtp_utils.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/gunit.h" #include "rtc_base/gunit.h"
#include "rtc_base/thread.h"
namespace cricket { namespace cricket {
FakeAudioSendStream::FakeAudioSendStream( FakeAudioSendStream::FakeAudioSendStream(
@ -377,7 +378,13 @@ void FakeFlexfecReceiveStream::OnRtpPacket(const webrtc::RtpPacketReceived&) {
} }
FakeCall::FakeCall() FakeCall::FakeCall()
: audio_network_state_(webrtc::kNetworkUp), : FakeCall(rtc::Thread::Current(), rtc::Thread::Current()) {}
FakeCall::FakeCall(webrtc::TaskQueueBase* worker_thread,
webrtc::TaskQueueBase* network_thread)
: network_thread_(network_thread),
worker_thread_(worker_thread),
audio_network_state_(webrtc::kNetworkUp),
video_network_state_(webrtc::kNetworkUp), video_network_state_(webrtc::kNetworkUp),
num_created_send_streams_(0), num_created_send_streams_(0),
num_created_receive_streams_(0) {} num_created_receive_streams_(0) {}
@ -612,6 +619,14 @@ webrtc::Call::Stats FakeCall::GetStats() const {
return stats_; return stats_;
} }
webrtc::TaskQueueBase* FakeCall::network_thread() const {
return network_thread_;
}
webrtc::TaskQueueBase* FakeCall::worker_thread() const {
return worker_thread_;
}
void FakeCall::SignalChannelNetworkState(webrtc::MediaType media, void FakeCall::SignalChannelNetworkState(webrtc::MediaType media,
webrtc::NetworkState state) { webrtc::NetworkState state) {
switch (media) { switch (media) {

View File

@ -282,6 +282,8 @@ class FakeFlexfecReceiveStream final : public webrtc::FlexfecReceiveStream {
class FakeCall final : public webrtc::Call, public webrtc::PacketReceiver { class FakeCall final : public webrtc::Call, public webrtc::PacketReceiver {
public: public:
FakeCall(); FakeCall();
FakeCall(webrtc::TaskQueueBase* worker_thread,
webrtc::TaskQueueBase* network_thread);
~FakeCall() override; ~FakeCall() override;
webrtc::MockRtpTransportControllerSend* GetMockTransportControllerSend() { webrtc::MockRtpTransportControllerSend* GetMockTransportControllerSend() {
@ -364,12 +366,18 @@ class FakeCall final : public webrtc::Call, public webrtc::PacketReceiver {
return trials_; return trials_;
} }
webrtc::TaskQueueBase* network_thread() const override;
webrtc::TaskQueueBase* worker_thread() const override;
void SignalChannelNetworkState(webrtc::MediaType media, void SignalChannelNetworkState(webrtc::MediaType media,
webrtc::NetworkState state) override; webrtc::NetworkState state) override;
void OnAudioTransportOverheadChanged( void OnAudioTransportOverheadChanged(
int transport_overhead_per_packet) override; int transport_overhead_per_packet) override;
void OnSentPacket(const rtc::SentPacket& sent_packet) override; void OnSentPacket(const rtc::SentPacket& sent_packet) override;
webrtc::TaskQueueBase* const network_thread_;
webrtc::TaskQueueBase* const worker_thread_;
::testing::NiceMock<webrtc::MockRtpTransportControllerSend> ::testing::NiceMock<webrtc::MockRtpTransportControllerSend>
transport_controller_send_; transport_controller_send_;

View File

@ -61,7 +61,7 @@ class ChannelManagerTest : public ::testing::Test {
false, false,
worker_, worker_,
network_.get())), network_.get())),
fake_call_() { fake_call_(worker_, network_.get()) {
network_->SetName("Network", this); network_->SetName("Network", this);
network_->Start(); network_->Start();
} }

View File

@ -107,7 +107,7 @@ class RtpSenderReceiverTest
// Create fake media engine/etc. so we can create channels to use to // Create fake media engine/etc. so we can create channels to use to
// test RtpSenders/RtpReceivers. // test RtpSenders/RtpReceivers.
media_engine_(new cricket::FakeMediaEngine()), media_engine_(new cricket::FakeMediaEngine()),
fake_call_(), fake_call_(worker_thread_, network_thread_),
local_stream_(MediaStream::Create(kStreamId1)) { local_stream_(MediaStream::Create(kStreamId1)) {
worker_thread_->Invoke<void>(RTC_FROM_HERE, [&]() { worker_thread_->Invoke<void>(RTC_FROM_HERE, [&]() {
channel_manager_ = cricket::ChannelManager::Create( channel_manager_ = cricket::ChannelManager::Create(