// Copyright 2011 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/single_thread_task_runner.h" #include "cc/trees/blocking_task_runner.h" #include "cc/trees/task_runner_provider.h" namespace cc { base::SingleThreadTaskRunner* TaskRunnerProvider::MainThreadTaskRunner() const { return main_task_runner_.get(); } bool TaskRunnerProvider::HasImplThread() const { return !!impl_task_runner_.get(); } base::SingleThreadTaskRunner* TaskRunnerProvider::ImplThreadTaskRunner() const { return impl_task_runner_.get(); } bool TaskRunnerProvider::IsMainThread() const { #if DCHECK_IS_ON() if (impl_thread_is_overridden_) return false; bool is_main_thread = base::PlatformThread::CurrentId() == main_thread_id_; if (is_main_thread && main_task_runner_.get()) { DCHECK(main_task_runner_->BelongsToCurrentThread()); } return is_main_thread; #else return true; #endif } bool TaskRunnerProvider::IsImplThread() const { #if DCHECK_IS_ON() if (impl_thread_is_overridden_) return true; if (!impl_task_runner_.get()) return false; return impl_task_runner_->BelongsToCurrentThread(); #else return true; #endif } #if DCHECK_IS_ON() void TaskRunnerProvider::SetCurrentThreadIsImplThread(bool is_impl_thread) { impl_thread_is_overridden_ = is_impl_thread; } #endif bool TaskRunnerProvider::IsMainThreadBlocked() const { #if DCHECK_IS_ON() return is_main_thread_blocked_; #else return true; #endif } #if DCHECK_IS_ON() void TaskRunnerProvider::SetMainThreadBlocked(bool is_main_thread_blocked) { is_main_thread_blocked_ = is_main_thread_blocked; } #endif TaskRunnerProvider::TaskRunnerProvider( scoped_refptr main_task_runner, scoped_refptr impl_task_runner) #if !DCHECK_IS_ON() : main_task_runner_(main_task_runner), impl_task_runner_(impl_task_runner), blocking_main_thread_task_runner_( BlockingTaskRunner::Create(main_task_runner)) { #else : main_task_runner_(main_task_runner), impl_task_runner_(impl_task_runner), blocking_main_thread_task_runner_( BlockingTaskRunner::Create(main_task_runner)), main_thread_id_(base::PlatformThread::CurrentId()), impl_thread_is_overridden_(false), is_main_thread_blocked_(false) { #endif } TaskRunnerProvider::~TaskRunnerProvider() { DCHECK(IsMainThread()); } } // namespace cc