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

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

Issue 66193007: Implementation of MessagePump for Mojo. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge 2 trunk Created 7 years, 1 month 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_loop_test.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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 : type_(type), 139 : type_(type),
140 exception_restoration_(false), 140 exception_restoration_(false),
141 nestable_tasks_allowed_(true), 141 nestable_tasks_allowed_(true),
142 #if defined(OS_WIN) 142 #if defined(OS_WIN)
143 os_modal_loop_(false), 143 os_modal_loop_(false),
144 #endif // OS_WIN 144 #endif // OS_WIN
145 message_histogram_(NULL), 145 message_histogram_(NULL),
146 run_loop_(NULL) { 146 run_loop_(NULL) {
147 Init(); 147 Init();
148 148
149 // TODO(rvargas): Get rid of the OS guards. 149 pump_.reset(CreateMessagePumpForType(type));
150 #if defined(OS_WIN)
151 #define MESSAGE_PUMP_UI new MessagePumpForUI()
152 #define MESSAGE_PUMP_IO new MessagePumpForIO()
153 #elif defined(OS_IOS)
154 #define MESSAGE_PUMP_UI MessagePumpMac::Create()
155 #define MESSAGE_PUMP_IO new MessagePumpIOSForIO()
156 #elif defined(OS_MACOSX)
157 #define MESSAGE_PUMP_UI MessagePumpMac::Create()
158 #define MESSAGE_PUMP_IO new MessagePumpLibevent()
159 #elif defined(OS_NACL)
160 // Currently NaCl doesn't have a UI MessageLoop.
161 // TODO(abarth): Figure out if we need this.
162 #define MESSAGE_PUMP_UI NULL
163 // ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and
164 // doesn't require extra support for watching file descriptors.
165 #define MESSAGE_PUMP_IO new MessagePumpDefault()
166 #elif defined(OS_POSIX) // POSIX but not MACOSX.
167 #define MESSAGE_PUMP_UI new MessagePumpForUI()
168 #define MESSAGE_PUMP_IO new MessagePumpLibevent()
169 #else
170 #error Not implemented
171 #endif
172
173 if (type_ == TYPE_UI) {
174 if (message_pump_for_ui_factory_)
175 pump_.reset(message_pump_for_ui_factory_());
176 else
177 pump_.reset(MESSAGE_PUMP_UI);
178 } else if (type_ == TYPE_IO) {
179 pump_.reset(MESSAGE_PUMP_IO);
180 #if defined(TOOLKIT_GTK)
181 } else if (type_ == TYPE_GPU) {
182 pump_.reset(new MessagePumpX11());
183 #endif
184 #if defined(OS_ANDROID)
185 } else if (type_ == TYPE_JAVA) {
186 pump_.reset(MESSAGE_PUMP_UI);
187 #endif
188 } else {
189 DCHECK_EQ(TYPE_DEFAULT, type_);
190 pump_.reset(new MessagePumpDefault());
191 }
192 } 150 }
193 151
194 MessageLoop::MessageLoop(scoped_ptr<MessagePump> pump) 152 MessageLoop::MessageLoop(scoped_ptr<MessagePump> pump)
195 : pump_(pump.Pass()), 153 : pump_(pump.Pass()),
196 type_(TYPE_CUSTOM), 154 type_(TYPE_CUSTOM),
197 exception_restoration_(false), 155 exception_restoration_(false),
198 nestable_tasks_allowed_(true), 156 nestable_tasks_allowed_(true),
199 #if defined(OS_WIN) 157 #if defined(OS_WIN)
200 os_modal_loop_(false), 158 os_modal_loop_(false),
201 #endif // OS_WIN 159 #endif // OS_WIN
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 215
258 // static 216 // static
259 bool MessageLoop::InitMessagePumpForUIFactory(MessagePumpFactory* factory) { 217 bool MessageLoop::InitMessagePumpForUIFactory(MessagePumpFactory* factory) {
260 if (message_pump_for_ui_factory_) 218 if (message_pump_for_ui_factory_)
261 return false; 219 return false;
262 220
263 message_pump_for_ui_factory_ = factory; 221 message_pump_for_ui_factory_ = factory;
264 return true; 222 return true;
265 } 223 }
266 224
225 // static
226 MessagePump* MessageLoop::CreateMessagePumpForType(Type type) {
227 // TODO(rvargas): Get rid of the OS guards.
228 #if defined(OS_WIN)
229 #define MESSAGE_PUMP_UI new MessagePumpForUI()
230 #define MESSAGE_PUMP_IO new MessagePumpForIO()
231 #elif defined(OS_IOS)
232 #define MESSAGE_PUMP_UI MessagePumpMac::Create()
233 #define MESSAGE_PUMP_IO new MessagePumpIOSForIO()
234 #elif defined(OS_MACOSX)
235 #define MESSAGE_PUMP_UI MessagePumpMac::Create()
236 #define MESSAGE_PUMP_IO new MessagePumpLibevent()
237 #elif defined(OS_NACL)
238 // Currently NaCl doesn't have a UI MessageLoop.
239 // TODO(abarth): Figure out if we need this.
240 #define MESSAGE_PUMP_UI NULL
241 // ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and
242 // doesn't require extra support for watching file descriptors.
243 #define MESSAGE_PUMP_IO new MessagePumpDefault()
244 #elif defined(OS_POSIX) // POSIX but not MACOSX.
245 #define MESSAGE_PUMP_UI new MessagePumpForUI()
246 #define MESSAGE_PUMP_IO new MessagePumpLibevent()
247 #else
248 #error Not implemented
249 #endif
250
251 if (type == MessageLoop::TYPE_UI) {
252 if (message_pump_for_ui_factory_)
253 return message_pump_for_ui_factory_();
254 return MESSAGE_PUMP_UI;
255 }
256 if (type == MessageLoop::TYPE_IO)
257 return MESSAGE_PUMP_IO;
258 #if defined(TOOLKIT_GTK)
259 if (type == MessageLoop::TYPE_GPU)
260 return new MessagePumpX11();
261 #endif
262 #if defined(OS_ANDROID)
263 if (type == MessageLoop::TYPE_JAVA)
264 return MESSAGE_PUMP_UI;
265 #endif
266 DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type);
267 return new MessagePumpDefault();
268 }
269
267 void MessageLoop::AddDestructionObserver( 270 void MessageLoop::AddDestructionObserver(
268 DestructionObserver* destruction_observer) { 271 DestructionObserver* destruction_observer) {
269 DCHECK_EQ(this, current()); 272 DCHECK_EQ(this, current());
270 destruction_observers_.AddObserver(destruction_observer); 273 destruction_observers_.AddObserver(destruction_observer);
271 } 274 }
272 275
273 void MessageLoop::RemoveDestructionObserver( 276 void MessageLoop::RemoveDestructionObserver(
274 DestructionObserver* destruction_observer) { 277 DestructionObserver* destruction_observer) {
275 DCHECK_EQ(this, current()); 278 DCHECK_EQ(this, current());
276 destruction_observers_.RemoveObserver(destruction_observer); 279 destruction_observers_.RemoveObserver(destruction_observer);
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 fd, 783 fd,
781 persistent, 784 persistent,
782 mode, 785 mode,
783 controller, 786 controller,
784 delegate); 787 delegate);
785 } 788 }
786 789
787 #endif 790 #endif
788 791
789 } // namespace base 792 } // namespace base
OLDNEW
« no previous file with comments | « base/message_loop/message_loop.h ('k') | base/message_loop/message_loop_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698