Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1140)

Side by Side Diff: base/message_loop/message_loop.cc

Issue 235893016: Some cleanups for the message_loop.h/cc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tot-merge Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/message_loop/message_loop.h ('k') | base/message_loop/message_pump_glib.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/message_loop/message_loop.h" 5 #include "base/message_loop/message_loop.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 14 matching lines...) Expand all
25 25
26 #if defined(OS_MACOSX) 26 #if defined(OS_MACOSX)
27 #include "base/message_loop/message_pump_mac.h" 27 #include "base/message_loop/message_pump_mac.h"
28 #endif 28 #endif
29 #if defined(OS_POSIX) && !defined(OS_IOS) 29 #if defined(OS_POSIX) && !defined(OS_IOS)
30 #include "base/message_loop/message_pump_libevent.h" 30 #include "base/message_loop/message_pump_libevent.h"
31 #endif 31 #endif
32 #if defined(OS_ANDROID) 32 #if defined(OS_ANDROID)
33 #include "base/message_loop/message_pump_android.h" 33 #include "base/message_loop/message_pump_android.h"
34 #endif 34 #endif
35 #if defined(USE_GLIB)
36 #include "base/message_loop/message_pump_glib.h"
37 #endif
35 38
36 namespace base { 39 namespace base {
37 40
38 namespace { 41 namespace {
39 42
40 // A lazily created thread local storage for quick access to a thread's message 43 // A lazily created thread local storage for quick access to a thread's message
41 // loop, if one exists. This should be safe and free of static constructors. 44 // loop, if one exists. This should be safe and free of static constructors.
42 LazyInstance<base::ThreadLocalPointer<MessageLoop> >::Leaky lazy_tls_ptr = 45 LazyInstance<base::ThreadLocalPointer<MessageLoop> >::Leaky lazy_tls_ptr =
43 LAZY_INSTANCE_INITIALIZER; 46 LAZY_INSTANCE_INITIALIZER;
44 47
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 // Returns true if MessagePump::ScheduleWork() must be called one 91 // Returns true if MessagePump::ScheduleWork() must be called one
89 // time for every task that is added to the MessageLoop incoming queue. 92 // time for every task that is added to the MessageLoop incoming queue.
90 bool AlwaysNotifyPump(MessageLoop::Type type) { 93 bool AlwaysNotifyPump(MessageLoop::Type type) {
91 #if defined(OS_ANDROID) 94 #if defined(OS_ANDROID)
92 return type == MessageLoop::TYPE_UI || type == MessageLoop::TYPE_JAVA; 95 return type == MessageLoop::TYPE_UI || type == MessageLoop::TYPE_JAVA;
93 #else 96 #else
94 return false; 97 return false;
95 #endif 98 #endif
96 } 99 }
97 100
101 #if defined(OS_IOS)
102 typedef MessagePumpIOSForIO MessagePumpForIO;
103 #elif defined(OS_NACL)
104 typedef MessagePumpDefault MessagePumpForIO;
105 #elif defined(OS_POSIX)
106 typedef MessagePumpLibevent MessagePumpForIO;
107 #endif
108
109 MessagePumpForIO* ToPumpIO(MessagePump* pump) {
110 return static_cast<MessagePumpForIO*>(pump);
111 }
112
98 } // namespace 113 } // namespace
99 114
100 //------------------------------------------------------------------------------ 115 //------------------------------------------------------------------------------
101 116
102 MessageLoop::TaskObserver::TaskObserver() { 117 MessageLoop::TaskObserver::TaskObserver() {
103 } 118 }
104 119
105 MessageLoop::TaskObserver::~TaskObserver() { 120 MessageLoop::TaskObserver::~TaskObserver() {
106 } 121 }
107 122
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 if (message_pump_for_ui_factory_) 206 if (message_pump_for_ui_factory_)
192 return false; 207 return false;
193 208
194 message_pump_for_ui_factory_ = factory; 209 message_pump_for_ui_factory_ = factory;
195 return true; 210 return true;
196 } 211 }
197 212
198 // static 213 // static
199 scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) { 214 scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) {
200 // TODO(rvargas): Get rid of the OS guards. 215 // TODO(rvargas): Get rid of the OS guards.
201 #if defined(OS_WIN) 216 #if defined(USE_GLIB) && !defined(OS_NACL)
202 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) 217 typedef MessagePumpGlib MessagePumpForUI;
203 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpForIO()) 218 #elif defined(OS_LINUX) && !defined(OS_NACL)
204 #elif defined(OS_IOS) 219 typedef MessagePumpLibevent MessagePumpForUI;
220 #endif
221
222 #if defined(OS_IOS) || defined(OS_MACOSX)
205 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create()) 223 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create())
206 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpIOSForIO())
207 #elif defined(OS_MACOSX)
208 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create())
209 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
210 #elif defined(OS_NACL) 224 #elif defined(OS_NACL)
211 // Currently NaCl doesn't have a UI MessageLoop. 225 // Currently NaCl doesn't have a UI MessageLoop.
212 // TODO(abarth): Figure out if we need this. 226 // TODO(abarth): Figure out if we need this.
213 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>() 227 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>()
214 // ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and 228 #else
215 // doesn't require extra support for watching file descriptors.
216 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpDefault())
217 #elif defined(USE_OZONE)
218 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpLibevent())
219 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
220 #elif defined(OS_POSIX) // POSIX but not MACOSX.
221 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) 229 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
222 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
223 #else
224 #error Not implemented
225 #endif 230 #endif
226 231
227 if (type == MessageLoop::TYPE_UI) { 232 if (type == MessageLoop::TYPE_UI) {
228 if (message_pump_for_ui_factory_) 233 if (message_pump_for_ui_factory_)
229 return message_pump_for_ui_factory_(); 234 return message_pump_for_ui_factory_();
230 return MESSAGE_PUMP_UI; 235 return MESSAGE_PUMP_UI;
231 } 236 }
232 if (type == MessageLoop::TYPE_IO) 237 if (type == MessageLoop::TYPE_IO)
233 return MESSAGE_PUMP_IO; 238 return scoped_ptr<MessagePump>(new MessagePumpForIO());
239
234 #if defined(OS_ANDROID) 240 #if defined(OS_ANDROID)
235 if (type == MessageLoop::TYPE_JAVA) 241 if (type == MessageLoop::TYPE_JAVA)
236 return MESSAGE_PUMP_UI; 242 return scoped_ptr<MessagePump>(new MessagePumpForUI());
237 #endif 243 #endif
244
238 DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type); 245 DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type);
239 return scoped_ptr<MessagePump>(new MessagePumpDefault()); 246 return scoped_ptr<MessagePump>(new MessagePumpDefault());
240 } 247 }
241 248
242 void MessageLoop::AddDestructionObserver( 249 void MessageLoop::AddDestructionObserver(
243 DestructionObserver* destruction_observer) { 250 DestructionObserver* destruction_observer) {
244 DCHECK_EQ(this, current()); 251 DCHECK_EQ(this, current());
245 destruction_observers_.AddObserver(destruction_observer); 252 destruction_observers_.AddObserver(destruction_observer);
246 } 253 }
247 254
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 PostNonNestableTask(from_here, Bind(deleter, object)); 644 PostNonNestableTask(from_here, Bind(deleter, object));
638 } 645 }
639 646
640 void MessageLoop::ReleaseSoonInternal( 647 void MessageLoop::ReleaseSoonInternal(
641 const tracked_objects::Location& from_here, 648 const tracked_objects::Location& from_here,
642 void(*releaser)(const void*), 649 void(*releaser)(const void*),
643 const void* object) { 650 const void* object) {
644 PostNonNestableTask(from_here, Bind(releaser, object)); 651 PostNonNestableTask(from_here, Bind(releaser, object));
645 } 652 }
646 653
654 #if !defined(OS_NACL)
647 //------------------------------------------------------------------------------ 655 //------------------------------------------------------------------------------
648 // MessageLoopForUI 656 // MessageLoopForUI
649 657
650 #if defined(OS_ANDROID) 658 #if defined(OS_ANDROID)
651 void MessageLoopForUI::Start() { 659 void MessageLoopForUI::Start() {
652 // No Histogram support for UI message loop as it is managed by Java side 660 // No Histogram support for UI message loop as it is managed by Java side
653 static_cast<MessagePumpForUI*>(pump_.get())->Start(this); 661 static_cast<MessagePumpForUI*>(pump_.get())->Start(this);
654 } 662 }
655 #endif 663 #endif
656 664
657 #if defined(OS_IOS) 665 #if defined(OS_IOS)
658 void MessageLoopForUI::Attach() { 666 void MessageLoopForUI::Attach() {
659 static_cast<MessagePumpUIApplication*>(pump_.get())->Attach(this); 667 static_cast<MessagePumpUIApplication*>(pump_.get())->Attach(this);
660 } 668 }
661 #endif 669 #endif
662 670
663 #if !defined(OS_NACL) && defined(OS_WIN) 671 #if defined(OS_WIN)
664 void MessageLoopForUI::AddObserver(Observer* observer) { 672 void MessageLoopForUI::AddObserver(Observer* observer) {
665 pump_ui()->AddObserver(observer); 673 static_cast<MessagePumpWin*>(pump_.get())->AddObserver(observer);
666 } 674 }
667 675
668 void MessageLoopForUI::RemoveObserver(Observer* observer) { 676 void MessageLoopForUI::RemoveObserver(Observer* observer) {
669 pump_ui()->RemoveObserver(observer); 677 static_cast<MessagePumpWin*>(pump_.get())->RemoveObserver(observer);
670 } 678 }
671 #endif // !defined(OS_NACL) && defined(OS_WIN) 679 #endif // defined(OS_WIN)
672 680
673 #if !defined(OS_NACL) && \ 681 #if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
674 (defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB)))
675 bool MessageLoopForUI::WatchFileDescriptor( 682 bool MessageLoopForUI::WatchFileDescriptor(
676 int fd, 683 int fd,
677 bool persistent, 684 bool persistent,
678 MessagePumpLibevent::Mode mode, 685 MessagePumpLibevent::Mode mode,
679 MessagePumpLibevent::FileDescriptorWatcher *controller, 686 MessagePumpLibevent::FileDescriptorWatcher *controller,
680 MessagePumpLibevent::Watcher *delegate) { 687 MessagePumpLibevent::Watcher *delegate) {
681 return pump_libevent()->WatchFileDescriptor( 688 return static_cast<MessagePumpLibevent*>(pump_.get())->WatchFileDescriptor(
682 fd, 689 fd,
683 persistent, 690 persistent,
684 mode, 691 mode,
685 controller, 692 controller,
686 delegate); 693 delegate);
687 } 694 }
688 #endif 695 #endif
689 696
697 #endif // !defined(OS_NACL)
698
690 //------------------------------------------------------------------------------ 699 //------------------------------------------------------------------------------
691 // MessageLoopForIO 700 // MessageLoopForIO
692 701
702 #if !defined(OS_NACL)
703 void MessageLoopForIO::AddIOObserver(
704 MessageLoopForIO::IOObserver* io_observer) {
705 ToPumpIO(pump_.get())->AddIOObserver(io_observer);
706 }
707
708 void MessageLoopForIO::RemoveIOObserver(
709 MessageLoopForIO::IOObserver* io_observer) {
710 ToPumpIO(pump_.get())->RemoveIOObserver(io_observer);
711 }
712
693 #if defined(OS_WIN) 713 #if defined(OS_WIN)
694
695 void MessageLoopForIO::RegisterIOHandler(HANDLE file, IOHandler* handler) { 714 void MessageLoopForIO::RegisterIOHandler(HANDLE file, IOHandler* handler) {
696 pump_io()->RegisterIOHandler(file, handler); 715 ToPumpIO(pump_.get())->RegisterIOHandler(file, handler);
697 } 716 }
698 717
699 bool MessageLoopForIO::RegisterJobObject(HANDLE job, IOHandler* handler) { 718 bool MessageLoopForIO::RegisterJobObject(HANDLE job, IOHandler* handler) {
700 return pump_io()->RegisterJobObject(job, handler); 719 return ToPumpIO(pump_.get())->RegisterJobObject(job, handler);
701 } 720 }
702 721
703 bool MessageLoopForIO::WaitForIOCompletion(DWORD timeout, IOHandler* filter) { 722 bool MessageLoopForIO::WaitForIOCompletion(DWORD timeout, IOHandler* filter) {
704 return pump_io()->WaitForIOCompletion(timeout, filter); 723 return ToPumpIO(pump_.get())->WaitForIOCompletion(timeout, filter);
705 } 724 }
706 725 #elif defined(OS_POSIX)
707 #elif defined(OS_IOS)
708
709 bool MessageLoopForIO::WatchFileDescriptor(int fd, 726 bool MessageLoopForIO::WatchFileDescriptor(int fd,
710 bool persistent, 727 bool persistent,
711 Mode mode, 728 Mode mode,
712 FileDescriptorWatcher *controller, 729 FileDescriptorWatcher *controller,
713 Watcher *delegate) { 730 Watcher *delegate) {
714 return pump_io()->WatchFileDescriptor( 731 return ToPumpIO(pump_.get())->WatchFileDescriptor(
715 fd, 732 fd,
716 persistent, 733 persistent,
717 mode, 734 mode,
718 controller, 735 controller,
719 delegate); 736 delegate);
720 } 737 }
721
722 #elif defined(OS_POSIX) && !defined(OS_NACL)
723
724 bool MessageLoopForIO::WatchFileDescriptor(int fd,
725 bool persistent,
726 Mode mode,
727 FileDescriptorWatcher *controller,
728 Watcher *delegate) {
729 return pump_libevent()->WatchFileDescriptor(
730 fd,
731 persistent,
732 mode,
733 controller,
734 delegate);
735 }
736
737 #endif 738 #endif
738 739
740 #endif // !defined(OS_NACL)
741
739 } // namespace base 742 } // namespace base
OLDNEW
« no previous file with comments | « base/message_loop/message_loop.h ('k') | base/message_loop/message_pump_glib.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698