1// Copyright 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "cc/trees/proxy.h"
6
7#include "base/message_loop/message_loop_proxy.h"
8#include "base/single_thread_task_runner.h"
9
10namespace cc {
11
12base::SingleThreadTaskRunner* Proxy::MainThreadTaskRunner() const {
13  return main_task_runner_.get();
14}
15
16bool Proxy::HasImplThread() const { return !!impl_task_runner_.get(); }
17
18base::SingleThreadTaskRunner* Proxy::ImplThreadTaskRunner() const {
19  return impl_task_runner_.get();
20}
21
22bool Proxy::IsMainThread() const {
23#ifndef NDEBUG
24  DCHECK(main_task_runner_.get());
25  if (impl_thread_is_overridden_)
26    return false;
27  return main_task_runner_->BelongsToCurrentThread();
28#else
29  return true;
30#endif
31}
32
33bool Proxy::IsImplThread() const {
34#ifndef NDEBUG
35  if (impl_thread_is_overridden_)
36    return true;
37  if (!impl_task_runner_.get())
38    return false;
39  return impl_task_runner_->BelongsToCurrentThread();
40#else
41  return true;
42#endif
43}
44
45#ifndef NDEBUG
46void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread) {
47  impl_thread_is_overridden_ = is_impl_thread;
48}
49#endif
50
51bool Proxy::IsMainThreadBlocked() const {
52#ifndef NDEBUG
53  return is_main_thread_blocked_;
54#else
55  return true;
56#endif
57}
58
59#ifndef NDEBUG
60void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked) {
61  is_main_thread_blocked_ = is_main_thread_blocked;
62}
63#endif
64
65Proxy::Proxy(
66    scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
67    : main_task_runner_(base::MessageLoopProxy::current()),
68#ifdef NDEBUG
69      impl_task_runner_(impl_task_runner) {}
70#else
71      impl_task_runner_(impl_task_runner),
72      impl_thread_is_overridden_(false),
73      is_main_thread_blocked_(false) {}
74#endif
75
76Proxy::~Proxy() {
77  DCHECK(IsMainThread());
78}
79
80scoped_ptr<base::Value> Proxy::SchedulerStateAsValueForTesting() {
81  return make_scoped_ptr(base::Value::CreateNullValue());
82}
83
84}  // namespace cc
85