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