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;
TaskQueueBase* network_thread() const override;
TaskQueueBase* worker_thread() const override;
// Implements PacketReceiver.
DeliveryStatus DeliverPacket(MediaType media_type,
rtc::CopyOnWriteBuffer packet,
@ -1164,6 +1167,14 @@ const WebRtcKeyValueConfig& Call::trials() const {
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) {
RTC_DCHECK_RUN_ON(network_thread_);
RTC_DCHECK(media == MediaType::AUDIO || media == MediaType::VIDEO);

View File

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

View File

@ -270,6 +270,14 @@ const WebRtcKeyValueConfig& DegradedCall::trials() const {
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,
NetworkState state) {
call_->SignalChannelNetworkState(media, state);

View File

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

View File

@ -17,6 +17,7 @@
#include "media/base/rtp_utils.h"
#include "rtc_base/checks.h"
#include "rtc_base/gunit.h"
#include "rtc_base/thread.h"
namespace cricket {
FakeAudioSendStream::FakeAudioSendStream(
@ -377,7 +378,13 @@ void FakeFlexfecReceiveStream::OnRtpPacket(const webrtc::RtpPacketReceived&) {
}
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),
num_created_send_streams_(0),
num_created_receive_streams_(0) {}
@ -612,6 +619,14 @@ webrtc::Call::Stats FakeCall::GetStats() const {
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,
webrtc::NetworkState state) {
switch (media) {

View File

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

View File

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

View File

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