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
NullAudioPoller::NullAudioPoller(AudioTransport* audio_transport)
: MessageHandler(false),
audio_transport_(audio_transport),
: audio_transport_(audio_transport),
reschedule_at_(rtc::TimeMillis() + kPollDelayMs) {
RTC_DCHECK(audio_transport);
OnMessage(nullptr); // Start the poll loop.

View file

@ -43,11 +43,7 @@ rtc::AsyncSocket* CreateClientSocket(int family) {
} // namespace
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() {
rtc::Thread::Current()->Clear(this);

View file

@ -174,8 +174,7 @@ bool StunRequestManager::CheckResponse(const char* data, size_t size) {
}
StunRequest::StunRequest()
: rtc::MessageHandler(false),
count_(0),
: count_(0),
timeout_(false),
manager_(0),
msg_(new StunMessage()),
@ -184,12 +183,7 @@ StunRequest::StunRequest()
}
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));
}

View file

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

View file

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

View file

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

View file

@ -14,14 +14,7 @@
namespace rtc {
MessageHandler::MessageHandler(bool auto_cleanup) {
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

View file

@ -21,29 +21,18 @@ namespace rtc {
struct Message;
// MessageQueue/Thread Messages get dispatched to a MessageHandler via the
// |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.
// MessageQueue/Thread Messages get dispatched via the MessageHandler interface.
class RTC_EXPORT MessageHandler {
public:
virtual ~MessageHandler();
virtual ~MessageHandler() {}
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 {
public:
~MessageHandlerAutoCleanup() override;

View file

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

View file

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

View file

@ -82,9 +82,7 @@ void PostJavaCallback(JNIEnv* env,
JavaAsyncCallback(JNIEnv* env,
const JavaRef<jobject>& j_object,
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 {
java_method_pointer_(AttachCurrentThreadIfNeeded(), j_object_);

View file

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