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.
5 #include "cc/trees/proxy.h"
7 #include "base/message_loop/message_loop_proxy.h"
8 #include "base/single_thread_task_runner.h"
12 base::SingleThreadTaskRunner
* Proxy::MainThreadTaskRunner() const {
13 return main_task_runner_
.get();
16 bool Proxy::HasImplThread() const { return !!impl_task_runner_
.get(); }
18 base::SingleThreadTaskRunner
* Proxy::ImplThreadTaskRunner() const {
19 return impl_task_runner_
.get();
22 bool Proxy::IsMainThread() const {
24 if (impl_thread_is_overridden_
)
27 bool is_main_thread
= base::PlatformThread::CurrentId() == main_thread_id_
;
28 if (is_main_thread
&& main_task_runner_
.get()) {
29 DCHECK(main_task_runner_
->BelongsToCurrentThread());
31 return is_main_thread
;
37 bool Proxy::IsImplThread() const {
39 if (impl_thread_is_overridden_
)
41 if (!impl_task_runner_
.get())
43 return impl_task_runner_
->BelongsToCurrentThread();
50 void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread
) {
51 impl_thread_is_overridden_
= is_impl_thread
;
55 bool Proxy::IsMainThreadBlocked() const {
57 return is_main_thread_blocked_
;
64 void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked
) {
65 is_main_thread_blocked_
= is_main_thread_blocked
;
69 Proxy::Proxy(scoped_refptr
<base::SingleThreadTaskRunner
> impl_task_runner
)
70 : main_task_runner_(base::MessageLoopProxy::current()),
72 impl_task_runner_(impl_task_runner
) {
74 impl_task_runner_(impl_task_runner
),
75 main_thread_id_(base::PlatformThread::CurrentId()),
76 impl_thread_is_overridden_(false),
77 is_main_thread_blocked_(false) {
82 DCHECK(IsMainThread());
85 scoped_ptr
<base::Value
> Proxy::SchedulerAsValueForTesting() {
86 return make_scoped_ptr(base::Value::CreateNullValue());