// 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 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