Revert of Revert "[Mac] Reland r276808 Use a native MessagePump instead of a MessagePumpDefault" (https://codereview.chromium.org/354673005/)

Reason for revert:
Original revert was due to a perf regression, which turned out to be nothing - see crbug.com/388360 for details.

Original issue's description:
> Revert "[Mac] Reland r276808 Use a native MessagePump instead of a MessagePumpDefault"
> 
> This reverts commit e82339d44d0dde725295785b9fea8c448d382621.
> 
> See if this fixes the perf regression.
> 
> BUG=388360
> TBR=jeremy@chromium.org
> NOTRY=true
> 
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=279474

TBR=miletus@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=388360

Review URL: https://codereview.chromium.org/349933004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@279749 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 32857c06c8b61738dc7ac6c2adb7b3bd18a437d0
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index dd1a393..ccece4d 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -229,6 +229,14 @@
 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
 #endif
 
+#if defined(OS_MACOSX)
+  // Use an OS native runloop on Mac to support timer coalescing.
+  #define MESSAGE_PUMP_DEFAULT \
+      scoped_ptr<MessagePump>(new MessagePumpCFRunLoop())
+#else
+  #define MESSAGE_PUMP_DEFAULT scoped_ptr<MessagePump>(new MessagePumpDefault())
+#endif
+
   if (type == MessageLoop::TYPE_UI) {
     if (message_pump_for_ui_factory_)
       return message_pump_for_ui_factory_();
@@ -243,7 +251,7 @@
 #endif
 
   DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type);
-  return scoped_ptr<MessagePump>(new MessagePumpDefault());
+  return MESSAGE_PUMP_DEFAULT;
 }
 
 void MessageLoop::AddDestructionObserver(
diff --git a/base/message_loop/message_pump_default.h b/base/message_loop/message_pump_default.h
index a9b83e8..19e7200 100644
--- a/base/message_loop/message_pump_default.h
+++ b/base/message_loop/message_pump_default.h
@@ -5,13 +5,14 @@
 #ifndef BASE_MESSAGE_LOOP_MESSAGE_PUMP_DEFAULT_H_
 #define BASE_MESSAGE_LOOP_MESSAGE_PUMP_DEFAULT_H_
 
+#include "base/base_export.h"
 #include "base/message_loop/message_pump.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/time/time.h"
 
 namespace base {
 
-class MessagePumpDefault : public MessagePump {
+class BASE_EXPORT MessagePumpDefault : public MessagePump {
  public:
   MessagePumpDefault();
   virtual ~MessagePumpDefault();