Remove sigslot usage from DtmfProviderInterface

Bug: webrtc:11943
Change-Id: I452efbb099affc10e9197573fa0e40094a0d90ca
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/270420
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Fredrik Solenberg <solenberg@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37681}
This commit is contained in:
Fredrik Solenberg 2022-08-03 12:07:51 +02:00 committed by WebRTC LUCI CQ
parent 9582f7548c
commit da2afbd70c
6 changed files with 18 additions and 56 deletions

View file

@ -75,11 +75,14 @@ DtmfSender::DtmfSender(TaskQueueBase* signaling_thread,
inter_tone_gap_(kDtmfDefaultGapMs),
comma_delay_(kDtmfDefaultCommaDelayMs) {
RTC_DCHECK(signaling_thread_);
if (provider_) {
RTC_DCHECK(provider_->GetOnDestroyedSignal());
provider_->GetOnDestroyedSignal()->connect(
this, &DtmfSender::OnProviderDestroyed);
}
RTC_DCHECK(provider_);
}
void DtmfSender::OnDtmfProviderDestroyed() {
RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_DLOG(LS_INFO) << "The Dtmf provider is deleted. Clear the sending queue.";
StopSending();
provider_ = nullptr;
}
DtmfSender::~DtmfSender() {
@ -232,14 +235,6 @@ void DtmfSender::DoInsertDtmf() {
QueueInsertDtmf(RTC_FROM_HERE, tone_gap);
}
void DtmfSender::OnProviderDestroyed() {
RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_LOG(LS_INFO) << "The Dtmf provider is deleted. Clear the sending queue.";
StopSending();
provider_ = nullptr;
}
void DtmfSender::StopSending() {
if (safety_flag_) {
safety_flag_->SetNotAlive();

View file

@ -23,7 +23,6 @@
#include "pc/proxy.h"
#include "rtc_base/location.h"
#include "rtc_base/ref_count.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread_annotations.h"
// DtmfSender is the native implementation of the RTCDTMFSender defined by
@ -43,19 +42,18 @@ class DtmfProviderInterface {
// The `duration` indicates the length of the DTMF tone in ms.
// Returns true on success and false on failure.
virtual bool InsertDtmf(int code, int duration) = 0;
// Returns a `sigslot::signal0<>` signal. The signal should fire before
// the provider is destroyed.
virtual sigslot::signal0<>* GetOnDestroyedSignal() = 0;
protected:
virtual ~DtmfProviderInterface() {}
};
class DtmfSender : public DtmfSenderInterface, public sigslot::has_slots<> {
class DtmfSender : public DtmfSenderInterface {
public:
static rtc::scoped_refptr<DtmfSender> Create(TaskQueueBase* signaling_thread,
DtmfProviderInterface* provider);
void OnDtmfProviderDestroyed();
// Implements DtmfSenderInterface.
void RegisterObserver(DtmfSenderObserverInterface* observer) override;
void UnregisterObserver() override;
@ -85,8 +83,6 @@ class DtmfSender : public DtmfSenderInterface, public sigslot::has_slots<> {
// The DTMF sending task.
void DoInsertDtmf() RTC_RUN_ON(signaling_thread_);
void OnProviderDestroyed();
void StopSending() RTC_RUN_ON(signaling_thread_);
DtmfSenderObserverInterface* observer_ RTC_GUARDED_BY(signaling_thread_);

View file

@ -77,8 +77,6 @@ class FakeDtmfProvider : public DtmfProviderInterface {
FakeDtmfProvider() : last_insert_dtmf_call_(0) {}
~FakeDtmfProvider() { SignalDestroyed(); }
// Implements DtmfProviderInterface.
bool CanInsertDtmf() override { return can_insert_; }
@ -95,10 +93,6 @@ class FakeDtmfProvider : public DtmfProviderInterface {
return true;
}
sigslot::signal0<>* GetOnDestroyedSignal() override {
return &SignalDestroyed;
}
// getter and setter
const std::vector<DtmfInfo>& dtmf_info_queue() const {
return dtmf_info_queue_;
@ -111,7 +105,6 @@ class FakeDtmfProvider : public DtmfProviderInterface {
bool can_insert_ = false;
std::vector<DtmfInfo> dtmf_info_queue_;
int64_t last_insert_dtmf_call_;
sigslot::signal0<> SignalDestroyed;
};
class DtmfSenderTest : public ::testing::Test {
@ -273,6 +266,7 @@ TEST_F(DtmfSenderTest, InsertDtmfWhileProviderIsDeleted) {
EXPECT_TRUE_SIMULATED_WAIT(observer_->tones().size() == 1, kMaxWaitMs,
fake_clock_);
// Delete provider.
dtmf_->OnDtmfProviderDestroyed();
provider_.reset();
// The queue should be discontinued so no more tone callbacks.
SIMULATED_WAIT(false, 200, fake_clock_);

View file

@ -467,14 +467,13 @@ AudioRtpSender::AudioRtpSender(rtc::Thread* worker_thread,
SetStreamsObserver* set_streams_observer)
: RtpSenderBase(worker_thread, id, set_streams_observer),
legacy_stats_(legacy_stats),
dtmf_sender_proxy_(DtmfSenderProxy::Create(
rtc::Thread::Current(),
DtmfSender::Create(rtc::Thread::Current(), this))),
dtmf_sender_(DtmfSender::Create(rtc::Thread::Current(), this)),
dtmf_sender_proxy_(
DtmfSenderProxy::Create(rtc::Thread::Current(), dtmf_sender_)),
sink_adapter_(new LocalAudioSinkAdapter()) {}
AudioRtpSender::~AudioRtpSender() {
// For DtmfSender.
SignalDestroyed();
dtmf_sender_->OnDtmfProviderDestroyed();
Stop();
}
@ -511,10 +510,6 @@ bool AudioRtpSender::InsertDtmf(int code, int duration) {
return success;
}
sigslot::signal0<>* AudioRtpSender::GetOnDestroyedSignal() {
return &SignalDestroyed;
}
void AudioRtpSender::OnChanged() {
RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "AudioRtpSender::OnChanged");

View file

@ -40,7 +40,6 @@
#include "pc/legacy_stats_collector_interface.h"
#include "rtc_base/checks.h"
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread.h"
#include "rtc_base/thread_annotations.h"
@ -314,7 +313,6 @@ class AudioRtpSender : public DtmfProviderInterface, public RtpSenderBase {
// DtmfSenderProvider implementation.
bool CanInsertDtmf() override;
bool InsertDtmf(int code, int duration) override;
sigslot::signal0<>* GetOnDestroyedSignal() override;
// ObserverInterface implementation.
void OnChanged() override;
@ -351,9 +349,9 @@ class AudioRtpSender : public DtmfProviderInterface, public RtpSenderBase {
return rtc::scoped_refptr<AudioTrackInterface>(
static_cast<AudioTrackInterface*>(track_.get()));
}
sigslot::signal0<> SignalDestroyed;
LegacyStatsCollectorInterface* legacy_stats_ = nullptr;
rtc::scoped_refptr<DtmfSender> dtmf_sender_;
rtc::scoped_refptr<DtmfSenderInterface> dtmf_sender_proxy_;
bool cached_track_enabled_ = false;

View file

@ -63,7 +63,6 @@
#include "rtc_base/checks.h"
#include "rtc_base/gunit.h"
#include "rtc_base/location.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread.h"
#include "test/gmock.h"
#include "test/gtest.h"
@ -102,8 +101,7 @@ namespace webrtc {
class RtpSenderReceiverTest
: public ::testing::Test,
public ::testing::WithParamInterface<std::pair<RidList, RidList>>,
public sigslot::has_slots<> {
public ::testing::WithParamInterface<std::pair<RidList, RidList>> {
public:
RtpSenderReceiverTest()
: network_thread_(rtc::Thread::Current()),
@ -209,8 +207,6 @@ class RtpSenderReceiverTest
audio_rtp_sender_->SetStreams({local_stream_->id()});
audio_rtp_sender_->SetMediaChannel(voice_media_channel());
audio_rtp_sender_->SetSsrc(kAudioSsrc);
audio_rtp_sender_->GetOnDestroyedSignal()->connect(
this, &RtpSenderReceiverTest::OnAudioSenderDestroyed);
VerifyVoiceChannelInput();
}
@ -220,8 +216,6 @@ class RtpSenderReceiverTest
audio_rtp_sender_->SetMediaChannel(voice_media_channel());
}
void OnAudioSenderDestroyed() { audio_sender_destroyed_signal_fired_ = true; }
void CreateVideoRtpSender(uint32_t ssrc) {
CreateVideoRtpSender(false, ssrc);
}
@ -528,7 +522,6 @@ class RtpSenderReceiverTest
rtc::scoped_refptr<MediaStreamInterface> local_stream_;
rtc::scoped_refptr<VideoTrackInterface> video_track_;
rtc::scoped_refptr<AudioTrackInterface> audio_track_;
bool audio_sender_destroyed_signal_fired_ = false;
webrtc::test::ScopedKeyValueConfig field_trials_;
};
@ -1621,15 +1614,6 @@ TEST_F(RtpSenderReceiverTest, InsertDtmf) {
send_ssrc, 2, expected_duration));
}
// Make sure the signal from "GetOnDestroyedSignal()" fires when the sender is
// destroyed, which is needed for the DTMF sender.
TEST_F(RtpSenderReceiverTest, TestOnDestroyedSignal) {
CreateAudioRtpSender();
EXPECT_FALSE(audio_sender_destroyed_signal_fired_);
audio_rtp_sender_ = nullptr;
EXPECT_TRUE(audio_sender_destroyed_signal_fired_);
}
// Validate that the default FrameEncryptor setting is nullptr.
TEST_F(RtpSenderReceiverTest, AudioSenderCanSetFrameEncryptor) {
CreateAudioRtpSender();