Make MessageHandler be a pure virtual interface.

Bug: webrtc:11908
Change-Id: I35d3c4005d970082bff8c5ff24186aab54205c37
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185340
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32194}
This commit is contained in:
Tomas Gunnarsson 2020-09-24 22:39:21 +02:00 committed by Commit Bot
parent ad148272b8
commit 77baeee99e
12 changed files with 20 additions and 55 deletions

View file

@ -31,8 +31,7 @@ constexpr size_t kNumSamples = kSamplesPerSecond / 100; // 10ms of samples
} // namespace } // namespace
NullAudioPoller::NullAudioPoller(AudioTransport* audio_transport) NullAudioPoller::NullAudioPoller(AudioTransport* audio_transport)
: MessageHandler(false), : audio_transport_(audio_transport),
audio_transport_(audio_transport),
reschedule_at_(rtc::TimeMillis() + kPollDelayMs) { reschedule_at_(rtc::TimeMillis() + kPollDelayMs) {
RTC_DCHECK(audio_transport); RTC_DCHECK(audio_transport);
OnMessage(nullptr); // Start the poll loop. OnMessage(nullptr); // Start the poll loop.

View file

@ -43,11 +43,7 @@ rtc::AsyncSocket* CreateClientSocket(int family) {
} // namespace } // namespace
PeerConnectionClient::PeerConnectionClient() PeerConnectionClient::PeerConnectionClient()
: MessageHandler(false), : callback_(NULL), resolver_(NULL), state_(NOT_CONNECTED), my_id_(-1) {}
callback_(NULL),
resolver_(NULL),
state_(NOT_CONNECTED),
my_id_(-1) {}
PeerConnectionClient::~PeerConnectionClient() { PeerConnectionClient::~PeerConnectionClient() {
rtc::Thread::Current()->Clear(this); rtc::Thread::Current()->Clear(this);

View file

@ -174,8 +174,7 @@ bool StunRequestManager::CheckResponse(const char* data, size_t size) {
} }
StunRequest::StunRequest() StunRequest::StunRequest()
: rtc::MessageHandler(false), : count_(0),
count_(0),
timeout_(false), timeout_(false),
manager_(0), manager_(0),
msg_(new StunMessage()), msg_(new StunMessage()),
@ -184,12 +183,7 @@ StunRequest::StunRequest()
} }
StunRequest::StunRequest(StunMessage* request) StunRequest::StunRequest(StunMessage* request)
: rtc::MessageHandler(false), : count_(0), timeout_(false), manager_(0), msg_(request), tstamp_(0) {
count_(0),
timeout_(false),
manager_(0),
msg_(request),
tstamp_(0) {
msg_->SetTransactionID(rtc::CreateRandomString(kStunTransactionIdLength)); msg_->SetTransactionID(rtc::CreateRandomString(kStunTransactionIdLength));
} }

View file

@ -1026,8 +1026,7 @@ void ExtractSharedMediaSessionOptions(
PeerConnection::PeerConnection(PeerConnectionFactory* factory, PeerConnection::PeerConnection(PeerConnectionFactory* factory,
std::unique_ptr<RtcEventLog> event_log, std::unique_ptr<RtcEventLog> event_log,
std::unique_ptr<Call> call) std::unique_ptr<Call> call)
: MessageHandler(false), : factory_(factory),
factory_(factory),
event_log_(std::move(event_log)), event_log_(std::move(event_log)),
event_log_ptr_(event_log_.get()), event_log_ptr_(event_log_.get()),
operations_chain_(rtc::OperationsChain::Create()), operations_chain_(rtc::OperationsChain::Create()),

View file

@ -50,8 +50,7 @@ class RemoteAudioSource::AudioDataProxy : public AudioSinkInterface {
}; };
RemoteAudioSource::RemoteAudioSource(rtc::Thread* worker_thread) RemoteAudioSource::RemoteAudioSource(rtc::Thread* worker_thread)
: MessageHandler(false), : main_thread_(rtc::Thread::Current()),
main_thread_(rtc::Thread::Current()),
worker_thread_(worker_thread), worker_thread_(worker_thread),
state_(MediaSourceInterface::kLive) { state_(MediaSourceInterface::kLive) {
RTC_DCHECK(main_thread_); RTC_DCHECK(main_thread_);

View file

@ -130,8 +130,7 @@ WebRtcSessionDescriptionFactory::WebRtcSessionDescriptionFactory(
std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator, std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator,
const rtc::scoped_refptr<rtc::RTCCertificate>& certificate, const rtc::scoped_refptr<rtc::RTCCertificate>& certificate,
UniqueRandomIdGenerator* ssrc_generator) UniqueRandomIdGenerator* ssrc_generator)
: MessageHandler(false), : signaling_thread_(signaling_thread),
signaling_thread_(signaling_thread),
session_desc_factory_(channel_manager, session_desc_factory_(channel_manager,
&transport_desc_factory_, &transport_desc_factory_,
ssrc_generator), ssrc_generator),

View file

@ -14,14 +14,7 @@
namespace rtc { namespace rtc {
MessageHandler::MessageHandler(bool auto_cleanup) { MessageHandlerAutoCleanup::MessageHandlerAutoCleanup() {}
RTC_DCHECK(!auto_cleanup) << "Use MessageHandlerAutoCleanup";
}
MessageHandler::~MessageHandler() {}
MessageHandlerAutoCleanup::MessageHandlerAutoCleanup()
: MessageHandler(false) {}
MessageHandlerAutoCleanup::~MessageHandlerAutoCleanup() { MessageHandlerAutoCleanup::~MessageHandlerAutoCleanup() {
// Note that even though this clears currently pending messages for the // Note that even though this clears currently pending messages for the

View file

@ -21,29 +21,18 @@ namespace rtc {
struct Message; struct Message;
// MessageQueue/Thread Messages get dispatched to a MessageHandler via the // MessageQueue/Thread Messages get dispatched via the MessageHandler interface.
// |OnMessage()| callback method.
//
// Note: Besides being an interface, the class can perform automatic cleanup
// in the destructor.
// TODO(bugs.webrtc.org/11908): The |auto_cleanup| parameter and associated
// logic is a temporary step while changing the MessageHandler class to be
// a pure virtual interface. The automatic cleanup step involves a number of
// complex operations and as part of this interface, can easily go by unnoticed
// and bundled into situations where it's not needed.
class RTC_EXPORT MessageHandler { class RTC_EXPORT MessageHandler {
public: public:
virtual ~MessageHandler(); virtual ~MessageHandler() {}
virtual void OnMessage(Message* msg) = 0; virtual void OnMessage(Message* msg) = 0;
protected:
// TODO(bugs.webrtc.org/11908): Remove this ctor.
explicit MessageHandler(bool auto_cleanup);
private:
RTC_DISALLOW_COPY_AND_ASSIGN(MessageHandler);
}; };
// Warning: Provided for backwards compatibility.
//
// This class performs expensive cleanup in the dtor that will affect all
// instances of Thread (and their pending message queues) and will block the
// current thread as well as all other threads.
class RTC_EXPORT MessageHandlerAutoCleanup : public MessageHandler { class RTC_EXPORT MessageHandlerAutoCleanup : public MessageHandler {
public: public:
~MessageHandlerAutoCleanup() override; ~MessageHandlerAutoCleanup() override;

View file

@ -74,7 +74,7 @@ const int kSlowDispatchLoggingThreshold = 50; // 50 ms
class MessageHandlerWithTask final : public MessageHandler { class MessageHandlerWithTask final : public MessageHandler {
public: public:
MessageHandlerWithTask() : MessageHandler(false) {} MessageHandlerWithTask() {}
void OnMessage(Message* msg) override { void OnMessage(Message* msg) override {
static_cast<rtc_thread_internal::MessageLikeTask*>(msg->pdata)->Run(); static_cast<rtc_thread_internal::MessageLikeTask*>(msg->pdata)->Run();
@ -961,7 +961,7 @@ void Thread::InvokeInternal(const Location& posted_from,
class FunctorMessageHandler : public MessageHandler { class FunctorMessageHandler : public MessageHandler {
public: public:
explicit FunctorMessageHandler(rtc::FunctionView<void()> functor) explicit FunctorMessageHandler(rtc::FunctionView<void()> functor)
: MessageHandler(false), functor_(functor) {} : functor_(functor) {}
void OnMessage(Message* msg) override { functor_(); } void OnMessage(Message* msg) override { functor_(); }
private: private:

View file

@ -534,7 +534,7 @@ class RTC_LOCKABLE RTC_EXPORT Thread : public webrtc::TaskQueueBase {
private: private:
class QueuedTaskHandler final : public MessageHandler { class QueuedTaskHandler final : public MessageHandler {
public: public:
QueuedTaskHandler() : MessageHandler(false) {} QueuedTaskHandler() {}
void OnMessage(Message* msg) override; void OnMessage(Message* msg) override;
}; };

View file

@ -82,9 +82,7 @@ void PostJavaCallback(JNIEnv* env,
JavaAsyncCallback(JNIEnv* env, JavaAsyncCallback(JNIEnv* env,
const JavaRef<jobject>& j_object, const JavaRef<jobject>& j_object,
JavaMethodPointer java_method_pointer) JavaMethodPointer java_method_pointer)
: rtc::MessageHandler(false), : j_object_(env, j_object), java_method_pointer_(java_method_pointer) {}
j_object_(env, j_object),
java_method_pointer_(java_method_pointer) {}
void OnMessage(rtc::Message*) override { void OnMessage(rtc::Message*) override {
java_method_pointer_(AttachCurrentThreadIfNeeded(), j_object_); java_method_pointer_(AttachCurrentThreadIfNeeded(), j_object_);

View file

@ -101,8 +101,7 @@ static void LogDeviceInfo() {
#endif // !defined(NDEBUG) #endif // !defined(NDEBUG)
AudioDeviceIOS::AudioDeviceIOS() AudioDeviceIOS::AudioDeviceIOS()
: MessageHandler(false), : audio_device_buffer_(nullptr),
audio_device_buffer_(nullptr),
audio_unit_(nullptr), audio_unit_(nullptr),
recording_(0), recording_(0),
playing_(0), playing_(0),