OLD | NEW |
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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 MessageLoop::MessageLoop(Type type) | 118 MessageLoop::MessageLoop(Type type) |
119 : type_(type), | 119 : type_(type), |
120 nestable_tasks_allowed_(true), | 120 nestable_tasks_allowed_(true), |
121 #if defined(OS_WIN) | 121 #if defined(OS_WIN) |
122 os_modal_loop_(false), | 122 os_modal_loop_(false), |
123 #endif // OS_WIN | 123 #endif // OS_WIN |
124 message_histogram_(NULL), | 124 message_histogram_(NULL), |
125 run_loop_(NULL) { | 125 run_loop_(NULL) { |
126 Init(); | 126 Init(); |
127 | 127 |
128 pump_.reset(CreateMessagePumpForType(type)); | 128 pump_ = CreateMessagePumpForType(type).Pass(); |
129 } | 129 } |
130 | 130 |
131 MessageLoop::MessageLoop(scoped_ptr<MessagePump> pump) | 131 MessageLoop::MessageLoop(scoped_ptr<MessagePump> pump) |
132 : pump_(pump.Pass()), | 132 : pump_(pump.Pass()), |
133 type_(TYPE_CUSTOM), | 133 type_(TYPE_CUSTOM), |
134 nestable_tasks_allowed_(true), | 134 nestable_tasks_allowed_(true), |
135 #if defined(OS_WIN) | 135 #if defined(OS_WIN) |
136 os_modal_loop_(false), | 136 os_modal_loop_(false), |
137 #endif // OS_WIN | 137 #endif // OS_WIN |
138 message_histogram_(NULL), | 138 message_histogram_(NULL), |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 // static | 194 // static |
195 bool MessageLoop::InitMessagePumpForUIFactory(MessagePumpFactory* factory) { | 195 bool MessageLoop::InitMessagePumpForUIFactory(MessagePumpFactory* factory) { |
196 if (message_pump_for_ui_factory_) | 196 if (message_pump_for_ui_factory_) |
197 return false; | 197 return false; |
198 | 198 |
199 message_pump_for_ui_factory_ = factory; | 199 message_pump_for_ui_factory_ = factory; |
200 return true; | 200 return true; |
201 } | 201 } |
202 | 202 |
203 // static | 203 // static |
204 MessagePump* MessageLoop::CreateMessagePumpForType(Type type) { | 204 scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) { |
205 // TODO(rvargas): Get rid of the OS guards. | 205 // TODO(rvargas): Get rid of the OS guards. |
206 #if defined(OS_WIN) | 206 #if defined(OS_WIN) |
207 #define MESSAGE_PUMP_UI new MessagePumpForUI() | 207 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) |
208 #define MESSAGE_PUMP_IO new MessagePumpForIO() | 208 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpForIO()) |
209 #elif defined(OS_IOS) | 209 #elif defined(OS_IOS) |
210 #define MESSAGE_PUMP_UI MessagePumpMac::Create() | 210 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create()) |
211 #define MESSAGE_PUMP_IO new MessagePumpIOSForIO() | 211 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpIOSForIO()) |
212 #elif defined(OS_MACOSX) | 212 #elif defined(OS_MACOSX) |
213 #define MESSAGE_PUMP_UI MessagePumpMac::Create() | 213 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create()) |
214 #define MESSAGE_PUMP_IO new MessagePumpLibevent() | 214 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent()) |
215 #elif defined(OS_NACL) | 215 #elif defined(OS_NACL) |
216 // Currently NaCl doesn't have a UI MessageLoop. | 216 // Currently NaCl doesn't have a UI MessageLoop. |
217 // TODO(abarth): Figure out if we need this. | 217 // TODO(abarth): Figure out if we need this. |
218 #define MESSAGE_PUMP_UI NULL | 218 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>() |
219 // ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and | 219 // ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and |
220 // doesn't require extra support for watching file descriptors. | 220 // doesn't require extra support for watching file descriptors. |
221 #define MESSAGE_PUMP_IO new MessagePumpDefault() | 221 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpDefault()) |
222 #elif defined(OS_POSIX) // POSIX but not MACOSX. | 222 #elif defined(OS_POSIX) // POSIX but not MACOSX. |
223 #define MESSAGE_PUMP_UI new MessagePumpForUI() | 223 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI()) |
224 #define MESSAGE_PUMP_IO new MessagePumpLibevent() | 224 #define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent()) |
225 #else | 225 #else |
226 #error Not implemented | 226 #error Not implemented |
227 #endif | 227 #endif |
228 | 228 |
229 if (type == MessageLoop::TYPE_UI) { | 229 if (type == MessageLoop::TYPE_UI) { |
230 if (message_pump_for_ui_factory_) | 230 if (message_pump_for_ui_factory_) |
231 return message_pump_for_ui_factory_(); | 231 return message_pump_for_ui_factory_(); |
232 return MESSAGE_PUMP_UI; | 232 return MESSAGE_PUMP_UI; |
233 } | 233 } |
234 if (type == MessageLoop::TYPE_IO) | 234 if (type == MessageLoop::TYPE_IO) |
235 return MESSAGE_PUMP_IO; | 235 return MESSAGE_PUMP_IO; |
236 #if defined(TOOLKIT_GTK) | 236 #if defined(TOOLKIT_GTK) |
237 if (type == MessageLoop::TYPE_GPU) | 237 if (type == MessageLoop::TYPE_GPU) |
238 return new MessagePumpX11(); | 238 return scoped_ptr<MessagePump>(new MessagePumpX11()); |
239 #endif | 239 #endif |
240 #if defined(OS_ANDROID) | 240 #if defined(OS_ANDROID) |
241 if (type == MessageLoop::TYPE_JAVA) | 241 if (type == MessageLoop::TYPE_JAVA) |
242 return MESSAGE_PUMP_UI; | 242 return MESSAGE_PUMP_UI; |
243 #endif | 243 #endif |
244 DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type); | 244 DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type); |
245 return new MessagePumpDefault(); | 245 return scoped_ptr<MessagePump>(new MessagePumpDefault()); |
246 } | 246 } |
247 | 247 |
248 void MessageLoop::AddDestructionObserver( | 248 void MessageLoop::AddDestructionObserver( |
249 DestructionObserver* destruction_observer) { | 249 DestructionObserver* destruction_observer) { |
250 DCHECK_EQ(this, current()); | 250 DCHECK_EQ(this, current()); |
251 destruction_observers_.AddObserver(destruction_observer); | 251 destruction_observers_.AddObserver(destruction_observer); |
252 } | 252 } |
253 | 253 |
254 void MessageLoop::RemoveDestructionObserver( | 254 void MessageLoop::RemoveDestructionObserver( |
255 DestructionObserver* destruction_observer) { | 255 DestructionObserver* destruction_observer) { |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 fd, | 720 fd, |
721 persistent, | 721 persistent, |
722 mode, | 722 mode, |
723 controller, | 723 controller, |
724 delegate); | 724 delegate); |
725 } | 725 } |
726 | 726 |
727 #endif | 727 #endif |
728 | 728 |
729 } // namespace base | 729 } // namespace base |
OLD | NEW |