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/single_thread_task_runner.h"
8 #include "cc/trees/blocking_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
> main_task_runner
,
70 scoped_refptr
<base::SingleThreadTaskRunner
> impl_task_runner
)
72 : main_task_runner_(main_task_runner
),
73 impl_task_runner_(impl_task_runner
),
74 blocking_main_thread_task_runner_(
75 BlockingTaskRunner::Create(main_task_runner
)) {
77 : main_task_runner_(main_task_runner
),
78 impl_task_runner_(impl_task_runner
),
79 blocking_main_thread_task_runner_(
80 BlockingTaskRunner::Create(main_task_runner
)),
81 main_thread_id_(base::PlatformThread::CurrentId()),
82 impl_thread_is_overridden_(false),
83 is_main_thread_blocked_(false) {
88 DCHECK(IsMainThread());