diff options
Diffstat (limited to 'base/message_loop/message_loop_task_runner.cc')
-rw-r--r-- | base/message_loop/message_loop_task_runner.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/base/message_loop/message_loop_task_runner.cc b/base/message_loop/message_loop_task_runner.cc new file mode 100644 index 0000000000..c9b5ffe3f7 --- /dev/null +++ b/base/message_loop/message_loop_task_runner.cc @@ -0,0 +1,51 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/message_loop/message_loop_task_runner.h" + +#include "base/location.h" +#include "base/logging.h" +#include "base/message_loop/incoming_task_queue.h" + +namespace base { +namespace internal { + +MessageLoopTaskRunner::MessageLoopTaskRunner( + scoped_refptr<IncomingTaskQueue> incoming_queue) + : incoming_queue_(incoming_queue), valid_thread_id_(kInvalidThreadId) { +} + +void MessageLoopTaskRunner::BindToCurrentThread() { + AutoLock lock(valid_thread_id_lock_); + DCHECK_EQ(kInvalidThreadId, valid_thread_id_); + valid_thread_id_ = PlatformThread::CurrentId(); +} + +bool MessageLoopTaskRunner::PostDelayedTask( + const tracked_objects::Location& from_here, + const base::Closure& task, + base::TimeDelta delay) { + DCHECK(!task.is_null()) << from_here.ToString(); + return incoming_queue_->AddToIncomingQueue(from_here, task, delay, true); +} + +bool MessageLoopTaskRunner::PostNonNestableDelayedTask( + const tracked_objects::Location& from_here, + const base::Closure& task, + base::TimeDelta delay) { + DCHECK(!task.is_null()) << from_here.ToString(); + return incoming_queue_->AddToIncomingQueue(from_here, task, delay, false); +} + +bool MessageLoopTaskRunner::RunsTasksOnCurrentThread() const { + AutoLock lock(valid_thread_id_lock_); + return valid_thread_id_ == PlatformThread::CurrentId(); +} + +MessageLoopTaskRunner::~MessageLoopTaskRunner() { +} + +} // namespace internal + +} // namespace base |