summaryrefslogtreecommitdiffstats
path: root/base/message_loop
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 00:55:07 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 00:55:07 +0000
commitbf933e547cfde01c866e01a5b148c336ba753314 (patch)
tree240282f99dda9c46a336581b8cffc12c8b59ad5c /base/message_loop
parent1050d05b4622d187368060468f92d586d161a6f9 (diff)
downloadchromium_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.cc105
-rw-r--r--base/message_loop/message_loop.h124
-rw-r--r--base/message_loop/message_pump_glib.h2
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_