proxy.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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 { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NDEBUG 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(main_task_runner_.get()); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (impl_thread_is_overridden_) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return main_task_runner_->BelongsToCurrentThread(); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Proxy::IsImplThread() const { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NDEBUG 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (impl_thread_is_overridden_) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!impl_task_runner_.get()) 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return impl_task_runner_->BelongsToCurrentThread(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NDEBUG 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_thread_is_overridden_ = is_impl_thread; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Proxy::IsMainThreadBlocked() const { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NDEBUG 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_main_thread_blocked_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NDEBUG 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_main_thread_blocked_ = is_main_thread_blocked; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochProxy::Proxy( 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : main_task_runner_(base::MessageLoopProxy::current()), 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef NDEBUG 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch impl_task_runner_(impl_task_runner) {} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch impl_task_runner_(impl_task_runner), 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) impl_thread_is_overridden_(false), 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_main_thread_blocked_(false) {} 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Proxy::~Proxy() { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(IsMainThread()); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)std::string Proxy::SchedulerStateAsStringForTesting() { 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return ""; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 85