| Index: base/message_loop/message_loop.cc
|
| diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
|
| index eb0f968849485ea73ef8a1aab9094bb9527af403..4bb312777324036ce820e5365f81fb4fb50a64fe 100644
|
| --- a/base/message_loop/message_loop.cc
|
| +++ b/base/message_loop/message_loop.cc
|
| @@ -100,10 +100,25 @@ MessagePumpForIO* ToPumpIO(MessagePump* pump) {
|
| }
|
| #endif // !defined(OS_NACL_SFI)
|
|
|
| +MessageLoop::Type GetMessageLoopType(const MessageLoop::Options& options) {
|
| + if (options.message_pump_factory.is_null())
|
| + return options.message_loop_type;
|
| + return MessageLoop::TYPE_CUSTOM;
|
| +}
|
| +
|
| } // namespace
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| +MessageLoop::Options::Options()
|
| + : message_loop_type(MessageLoop::TYPE_DEFAULT) {
|
| +}
|
| +
|
| +MessageLoop::Options::~Options() {
|
| +}
|
| +
|
| +//------------------------------------------------------------------------------
|
| +
|
| MessageLoop::TaskObserver::TaskObserver() {
|
| }
|
|
|
| @@ -115,6 +130,26 @@ MessageLoop::DestructionObserver::~DestructionObserver() {
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| +MessageLoop::MessageLoop(const Options& options)
|
| + : type_(GetMessageLoopType(options)),
|
| +#if defined(OS_WIN)
|
| + pending_high_res_tasks_(0),
|
| + in_high_res_mode_(false),
|
| +#endif
|
| + nestable_tasks_allowed_(true),
|
| +#if defined(OS_WIN)
|
| + os_modal_loop_(false),
|
| +#endif // OS_WIN
|
| + message_histogram_(NULL),
|
| + run_loop_(NULL),
|
| + incoming_task_queue_(options.incoming_task_queue) {
|
| + if (!options.message_pump_factory.is_null())
|
| + pump_ = options.message_pump_factory.Run();
|
| + else
|
| + pump_ = CreateMessagePumpForType(type_);
|
| + Init();
|
| +}
|
| +
|
| MessageLoop::MessageLoop(Type type)
|
| : type_(type),
|
| #if defined(OS_WIN)
|
| @@ -128,7 +163,6 @@ MessageLoop::MessageLoop(Type type)
|
| message_histogram_(NULL),
|
| run_loop_(NULL) {
|
| Init();
|
| -
|
| pump_ = CreateMessagePumpForType(type).Pass();
|
| }
|
|
|
| @@ -387,7 +421,9 @@ void MessageLoop::Init() {
|
| DCHECK(!current()) << "should only have one message loop per thread";
|
| lazy_tls_ptr.Pointer()->Set(this);
|
|
|
| - incoming_task_queue_ = new internal::IncomingTaskQueue(this);
|
| + if (!incoming_task_queue_)
|
| + incoming_task_queue_ = new internal::IncomingTaskQueue();
|
| + incoming_task_queue_->StartScheduling(this);
|
| message_loop_proxy_ =
|
| new internal::MessageLoopProxyImpl(incoming_task_queue_);
|
| thread_task_runner_handle_.reset(
|
| @@ -441,7 +477,7 @@ void MessageLoop::RunTask(const PendingTask& pending_task) {
|
|
|
| FOR_EACH_OBSERVER(TaskObserver, task_observers_,
|
| WillProcessTask(pending_task));
|
| - task_annotator_.RunTask(
|
| + task_annotator()->RunTask(
|
| "MessageLoop::PostTask", "MessageLoop::RunTask", pending_task);
|
| FOR_EACH_OBSERVER(TaskObserver, task_observers_,
|
| DidProcessTask(pending_task));
|
|
|