proxy.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/proxy.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/message_loop/message_loop_proxy.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/single_thread_task_runner.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::SingleThreadTaskRunner* Proxy::MainThreadTaskRunner() const { 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return main_task_runner_.get(); 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool Proxy::HasImplThread() const { return !!impl_task_runner_.get(); } 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::SingleThreadTaskRunner* Proxy::ImplThreadTaskRunner() const { 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return impl_task_runner_.get(); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Proxy::IsMainThread() const { 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if DCHECK_IS_ON 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (impl_thread_is_overridden_) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_main_thread = base::PlatformThread::CurrentId() == main_thread_id_; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (is_main_thread && main_task_runner_.get()) { 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(main_task_runner_->BelongsToCurrentThread()); 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return is_main_thread; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Proxy::IsImplThread() const { 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if DCHECK_IS_ON 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (impl_thread_is_overridden_) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!impl_task_runner_.get()) 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return impl_task_runner_->BelongsToCurrentThread(); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if DCHECK_IS_ON 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread) { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_thread_is_overridden_ = is_impl_thread; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Proxy::IsMainThreadBlocked() const { 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if DCHECK_IS_ON 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_main_thread_blocked_; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if DCHECK_IS_ON 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_main_thread_blocked_ = is_main_thread_blocked; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Proxy::Proxy(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if !DCHECK_IS_ON 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : main_task_runner_(main_task_runner), impl_task_runner_(impl_task_runner) { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : main_task_runner_(main_task_runner), 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch impl_task_runner_(impl_task_runner), 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) main_thread_id_(base::PlatformThread::CurrentId()), 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_thread_is_overridden_(false), 7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) is_main_thread_blocked_(false) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Proxy::~Proxy() { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(IsMainThread()); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 87