diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-23 00:55:07 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-23 00:55:07 +0000 |
commit | bf933e547cfde01c866e01a5b148c336ba753314 (patch) | |
tree | 240282f99dda9c46a336581b8cffc12c8b59ad5c /base/message_loop | |
parent | 1050d05b4622d187368060468f92d586d161a6f9 (diff) | |
download | chromium_src-bf933e547cfde01c866e01a5b148c336ba753314.zip chromium_src-bf933e547cfde01c866e01a5b148c336ba753314.tar.gz chromium_src-bf933e547cfde01c866e01a5b148c336ba753314.tar.bz2 |
Some cleanups for the message_loop.h/cc.
The cleanups include:
* Remove some #includes and typedefs from message_loop.h
* Remove MessageLoop::Observer, and add MessageLoopForUI:Observer instead.
* Wrap all of MessageLoopForUI inside !defined(OS_NACL).
* Remove some pump_*() accessors (e.g. pump_win(), pump_libevent()), and
use static_cast<> instead where necessary.
* Add a MessagePumpForIO typedef in message_loop.cc for the various IO
message-pumps, and remove MESSAGE_PUMP_IO macro for creating the io pumps.
* Simplify the #ifdef's for MESSAGE_PUMP_UI macro.
BUG=none
R=darin@chromium.org
Review URL: https://codereview.chromium.org/235893016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265451 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_loop')
-rw-r--r-- | base/message_loop/message_loop.cc | 105 | ||||
-rw-r--r-- | base/message_loop/message_loop.h | 124 | ||||
-rw-r--r-- | base/message_loop/message_pump_glib.h | 2 |
3 files changed, 85 insertions, 146 deletions
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc index 0ca6e81..dd1a393 100644 --- a/base/message_loop/message_loop.cc +++ b/base/message_loop/message_loop.cc @@ -32,6 +32,9 @@ #if defined(OS_ANDROID) #include "base/message_loop/message_pump_android.h" #endif +#if defined(USE_GLIB) +#include "base/message_loop/message_pump_glib.h" +#endif namespace base { @@ -95,6 +98,18 @@ bool AlwaysNotifyPump(MessageLoop::Type type) { #endif } +#if defined(OS_IOS) +typedef MessagePumpIOSForIO MessagePumpForIO; +#elif defined(OS_NACL) +typedef MessagePumpDefault MessagePumpForIO; +#elif defined(OS_POSIX) +typedef MessagePumpLibevent MessagePumpForIO; +#endif + +MessagePumpForIO* ToPumpIO(MessagePump* pump) { + return static_cast<MessagePumpForIO*>(pump); +} + } // namespace //------------------------------------------------------------------------------ @@ -198,30 +213,20 @@ bool MessageLoop::InitMessagePumpForUIFactory(MessagePumpFactory* factory) { // static scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) { // TODO(rvargas): Get rid of the OS guards. -#if defined(OS_WIN) -#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) -#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpForIO()) -#elif defined(OS_IOS) -#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create()) -#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpIOSForIO()) -#elif defined(OS_MACOSX) +#if defined(USE_GLIB) && !defined(OS_NACL) + typedef MessagePumpGlib MessagePumpForUI; +#elif defined(OS_LINUX) && !defined(OS_NACL) + typedef MessagePumpLibevent MessagePumpForUI; +#endif + +#if defined(OS_IOS) || defined(OS_MACOSX) #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create()) -#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent()) #elif defined(OS_NACL) // Currently NaCl doesn't have a UI MessageLoop. // TODO(abarth): Figure out if we need this. #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>() -// ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and -// doesn't require extra support for watching file descriptors. -#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpDefault()) -#elif defined(USE_OZONE) -#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpLibevent()) -#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent()) -#elif defined(OS_POSIX) // POSIX but not MACOSX. -#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) -#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent()) #else -#error Not implemented +#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) #endif if (type == MessageLoop::TYPE_UI) { @@ -230,11 +235,13 @@ scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) { return MESSAGE_PUMP_UI; } if (type == MessageLoop::TYPE_IO) - return MESSAGE_PUMP_IO; + return scoped_ptr<MessagePump>(new MessagePumpForIO()); + #if defined(OS_ANDROID) if (type == MessageLoop::TYPE_JAVA) - return MESSAGE_PUMP_UI; + return scoped_ptr<MessagePump>(new MessagePumpForUI()); #endif + DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type); return scoped_ptr<MessagePump>(new MessagePumpDefault()); } @@ -644,6 +651,7 @@ void MessageLoop::ReleaseSoonInternal( PostNonNestableTask(from_here, Bind(releaser, object)); } +#if !defined(OS_NACL) //------------------------------------------------------------------------------ // MessageLoopForUI @@ -660,25 +668,24 @@ void MessageLoopForUI::Attach() { } #endif -#if !defined(OS_NACL) && defined(OS_WIN) +#if defined(OS_WIN) void MessageLoopForUI::AddObserver(Observer* observer) { - pump_ui()->AddObserver(observer); + static_cast<MessagePumpWin*>(pump_.get())->AddObserver(observer); } void MessageLoopForUI::RemoveObserver(Observer* observer) { - pump_ui()->RemoveObserver(observer); + static_cast<MessagePumpWin*>(pump_.get())->RemoveObserver(observer); } -#endif // !defined(OS_NACL) && defined(OS_WIN) +#endif // defined(OS_WIN) -#if !defined(OS_NACL) && \ - (defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))) +#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB)) bool MessageLoopForUI::WatchFileDescriptor( int fd, bool persistent, MessagePumpLibevent::Mode mode, MessagePumpLibevent::FileDescriptorWatcher *controller, MessagePumpLibevent::Watcher *delegate) { - return pump_libevent()->WatchFileDescriptor( + return static_cast<MessagePumpLibevent*>(pump_.get())->WatchFileDescriptor( fd, persistent, mode, @@ -687,53 +694,49 @@ bool MessageLoopForUI::WatchFileDescriptor( } #endif +#endif // !defined(OS_NACL) + //------------------------------------------------------------------------------ // MessageLoopForIO -#if defined(OS_WIN) +#if !defined(OS_NACL) +void MessageLoopForIO::AddIOObserver( + MessageLoopForIO::IOObserver* io_observer) { + ToPumpIO(pump_.get())->AddIOObserver(io_observer); +} + +void MessageLoopForIO::RemoveIOObserver( + MessageLoopForIO::IOObserver* io_observer) { + ToPumpIO(pump_.get())->RemoveIOObserver(io_observer); +} +#if defined(OS_WIN) void MessageLoopForIO::RegisterIOHandler(HANDLE file, IOHandler* handler) { - pump_io()->RegisterIOHandler(file, handler); + ToPumpIO(pump_.get())->RegisterIOHandler(file, handler); } bool MessageLoopForIO::RegisterJobObject(HANDLE job, IOHandler* handler) { - return pump_io()->RegisterJobObject(job, handler); + return ToPumpIO(pump_.get())->RegisterJobObject(job, handler); } bool MessageLoopForIO::WaitForIOCompletion(DWORD timeout, IOHandler* filter) { - return pump_io()->WaitForIOCompletion(timeout, filter); -} - -#elif defined(OS_IOS) - -bool MessageLoopForIO::WatchFileDescriptor(int fd, - bool persistent, - Mode mode, - FileDescriptorWatcher *controller, - Watcher *delegate) { - return pump_io()->WatchFileDescriptor( - fd, - persistent, - mode, - controller, - delegate); + return ToPumpIO(pump_.get())->WaitForIOCompletion(timeout, filter); } - -#elif defined(OS_POSIX) && !defined(OS_NACL) - +#elif defined(OS_POSIX) bool MessageLoopForIO::WatchFileDescriptor(int fd, bool persistent, Mode mode, FileDescriptorWatcher *controller, Watcher *delegate) { - return pump_libevent()->WatchFileDescriptor( + return ToPumpIO(pump_.get())->WatchFileDescriptor( fd, persistent, mode, controller, delegate); } - #endif +#endif // !defined(OS_NACL) + } // namespace base diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h index 6617646..4bb7d55 100644 --- a/base/message_loop/message_loop.h +++ b/base/message_loop/message_loop.h @@ -32,17 +32,6 @@ #include "base/message_loop/message_pump_io_ios.h" #elif defined(OS_POSIX) #include "base/message_loop/message_pump_libevent.h" -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) - -#if defined(OS_CHROMEOS) && !defined(OS_NACL) && !defined(USE_GLIB) -#include "base/message_loop/message_pump_libevent.h" -#elif defined(USE_GLIB) && !defined(OS_NACL) -#include "base/message_loop/message_pump_glib.h" -#elif !defined(OS_ANDROID_HOST) -#include "base/message_loop/message_pump_glib.h" -#endif - -#endif #endif namespace base { @@ -51,11 +40,6 @@ class HistogramBase; class MessagePumpObserver; class RunLoop; class ThreadTaskRunnerHandle; -#if defined(OS_ANDROID) -class MessagePumpForUI; -#elif defined(OS_ANDROID_HOST) || (defined(OS_CHROMEOS) && !defined(USE_GLIB)) -typedef MessagePumpLibevent MessagePumpForUI; -#endif class WaitableEvent; // A MessageLoop is used to process events for a particular thread. There is @@ -91,10 +75,6 @@ class WaitableEvent; // class BASE_EXPORT MessageLoop : public MessagePump::Delegate { public: -#if defined(OS_WIN) - typedef MessagePumpObserver Observer; -#endif - // A MessageLoop has a particular type, which indicates the set of // asynchronous events it may process in addition to tasks and timers. // @@ -392,17 +372,6 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate { //---------------------------------------------------------------------------- protected: - -#if defined(OS_WIN) - MessagePumpWin* pump_win() { - return static_cast<MessagePumpWin*>(pump_.get()); - } -#elif defined(OS_POSIX) && !defined(OS_IOS) - MessagePumpLibevent* pump_libevent() { - return static_cast<MessagePumpLibevent*>(pump_.get()); - } -#endif - scoped_ptr<MessagePump> pump_; private: @@ -518,6 +487,8 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate { DISALLOW_COPY_AND_ASSIGN(MessageLoop); }; +#if !defined(OS_NACL) + //----------------------------------------------------------------------------- // MessageLoopForUI extends MessageLoop with methods that are particular to a // MessageLoop instantiated with TYPE_UI. @@ -557,14 +528,15 @@ class BASE_EXPORT MessageLoopForUI : public MessageLoop { void Start(); #endif -#if !defined(OS_NACL) && defined(OS_WIN) +#if defined(OS_WIN) + typedef MessagePumpObserver Observer; + // Please see message_pump_win for definitions of these methods. void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); #endif -#if !defined(OS_NACL) && \ - (defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))) +#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB)) // Please see MessagePumpLibevent for definition. bool WatchFileDescriptor( int fd, @@ -573,14 +545,6 @@ class BASE_EXPORT MessageLoopForUI : public MessageLoop { MessagePumpLibevent::FileDescriptorWatcher* controller, MessagePumpLibevent::Watcher* delegate); #endif - - protected: -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) - // TODO(rvargas): Make this platform independent. - MessagePumpForUI* pump_ui() { - return static_cast<MessagePumpForUI*>(pump_.get()); - } -#endif }; // Do not add any member variables to MessageLoopForUI! This is important b/c @@ -589,6 +553,8 @@ class BASE_EXPORT MessageLoopForUI : public MessageLoop { COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForUI), MessageLoopForUI_should_not_have_extra_member_variables); +#endif // !defined(OS_NACL) + //----------------------------------------------------------------------------- // MessageLoopForIO extends MessageLoop with methods that are particular to a // MessageLoop instantiated with TYPE_IO. @@ -598,6 +564,23 @@ COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForUI), // class BASE_EXPORT MessageLoopForIO : public MessageLoop { public: + MessageLoopForIO() : MessageLoop(TYPE_IO) { + } + + // Returns the MessageLoopForIO of the current thread. + static MessageLoopForIO* current() { + MessageLoop* loop = MessageLoop::current(); + DCHECK_EQ(MessageLoop::TYPE_IO, loop->type()); + return static_cast<MessageLoopForIO*>(loop); + } + + static bool IsCurrent() { + MessageLoop* loop = MessageLoop::current(); + return loop && loop->type() == MessageLoop::TYPE_IO; + } + +#if !defined(OS_NACL) + #if defined(OS_WIN) typedef MessagePumpForIO::IOHandler IOHandler; typedef MessagePumpForIO::IOContext IOContext; @@ -624,70 +607,25 @@ class BASE_EXPORT MessageLoopForIO : public MessageLoop { WATCH_WRITE = MessagePumpLibevent::WATCH_WRITE, WATCH_READ_WRITE = MessagePumpLibevent::WATCH_READ_WRITE }; - #endif - MessageLoopForIO() : MessageLoop(TYPE_IO) { - } - - // Returns the MessageLoopForIO of the current thread. - static MessageLoopForIO* current() { - MessageLoop* loop = MessageLoop::current(); - DCHECK_EQ(MessageLoop::TYPE_IO, loop->type()); - return static_cast<MessageLoopForIO*>(loop); - } - - static bool IsCurrent() { - MessageLoop* loop = MessageLoop::current(); - return loop && loop->type() == MessageLoop::TYPE_IO; - } - - void AddIOObserver(IOObserver* io_observer) { - pump_io()->AddIOObserver(io_observer); - } - - void RemoveIOObserver(IOObserver* io_observer) { - pump_io()->RemoveIOObserver(io_observer); - } + void AddIOObserver(IOObserver* io_observer); + void RemoveIOObserver(IOObserver* io_observer); #if defined(OS_WIN) // Please see MessagePumpWin for definitions of these methods. void RegisterIOHandler(HANDLE file, IOHandler* handler); bool RegisterJobObject(HANDLE job, IOHandler* handler); bool WaitForIOCompletion(DWORD timeout, IOHandler* filter); - - protected: - // TODO(rvargas): Make this platform independent. - MessagePumpForIO* pump_io() { - return static_cast<MessagePumpForIO*>(pump_.get()); - } - -#elif defined(OS_IOS) - // Please see MessagePumpIOSForIO for definition. +#elif defined(OS_POSIX) + // Please see MessagePumpIOSForIO/MessagePumpLibevent for definition. bool WatchFileDescriptor(int fd, bool persistent, Mode mode, FileDescriptorWatcher *controller, Watcher *delegate); - - private: - MessagePumpIOSForIO* pump_io() { - return static_cast<MessagePumpIOSForIO*>(pump_.get()); - } - -#elif defined(OS_POSIX) - // Please see MessagePumpLibevent for definition. - bool WatchFileDescriptor(int fd, - bool persistent, - Mode mode, - FileDescriptorWatcher* controller, - Watcher* delegate); - - private: - MessagePumpLibevent* pump_io() { - return static_cast<MessagePumpLibevent*>(pump_.get()); - } -#endif // defined(OS_POSIX) +#endif // defined(OS_IOS) || defined(OS_POSIX) +#endif // !defined(OS_NACL) }; // Do not add any member variables to MessageLoopForIO! This is important b/c diff --git a/base/message_loop/message_pump_glib.h b/base/message_loop/message_pump_glib.h index 179e264..a13493a 100644 --- a/base/message_loop/message_pump_glib.h +++ b/base/message_loop/message_pump_glib.h @@ -73,8 +73,6 @@ class BASE_EXPORT MessagePumpGlib : public MessagePump { DISALLOW_COPY_AND_ASSIGN(MessagePumpGlib); }; -typedef MessagePumpGlib MessagePumpForUI; - } // namespace base #endif // BASE_MESSAGE_LOOP_MESSAGE_PUMP_GLIB_H_ |