1b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Use of this source code is governed by a BSD-style license that can be 3b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// found in the LICENSE file. 4b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 5cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko#include "base/message_loop/message_loop_task_runner.h" 6b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 7b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/location.h" 8b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/logging.h" 9b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/message_loop/incoming_task_queue.h" 10b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 11b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratnamespace base { 12b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratnamespace internal { 13b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 14cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex VakulenkoMessageLoopTaskRunner::MessageLoopTaskRunner( 15b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat scoped_refptr<IncomingTaskQueue> incoming_queue) 16cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko : incoming_queue_(incoming_queue), valid_thread_id_(kInvalidThreadId) { 17b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 18b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 19cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenkovoid MessageLoopTaskRunner::BindToCurrentThread() { 20b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat AutoLock lock(valid_thread_id_lock_); 21b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat DCHECK_EQ(kInvalidThreadId, valid_thread_id_); 22b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat valid_thread_id_ = PlatformThread::CurrentId(); 23b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 24b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 25cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenkobool MessageLoopTaskRunner::PostDelayedTask( 26b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const tracked_objects::Location& from_here, 27b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const base::Closure& task, 28b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat base::TimeDelta delay) { 29b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat DCHECK(!task.is_null()) << from_here.ToString(); 30b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat return incoming_queue_->AddToIncomingQueue(from_here, task, delay, true); 31b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 32b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 33cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenkobool MessageLoopTaskRunner::PostNonNestableDelayedTask( 34b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const tracked_objects::Location& from_here, 35b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const base::Closure& task, 36b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat base::TimeDelta delay) { 37b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat DCHECK(!task.is_null()) << from_here.ToString(); 38b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat return incoming_queue_->AddToIncomingQueue(from_here, task, delay, false); 39b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 40b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 41cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenkobool MessageLoopTaskRunner::RunsTasksOnCurrentThread() const { 42b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat AutoLock lock(valid_thread_id_lock_); 43b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat return valid_thread_id_ == PlatformThread::CurrentId(); 44b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 45b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 46cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex VakulenkoMessageLoopTaskRunner::~MessageLoopTaskRunner() { 47b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 48b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 49b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} // namespace internal 50b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 51b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} // namespace base 52