Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / cc / trees / proxy.cc
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 #include "cc/trees/blocking_task_runner.h"
10
11 namespace cc {
12
13 base::SingleThreadTaskRunner* Proxy::MainThreadTaskRunner() const {
14   return main_task_runner_.get();
15 }
16
17 bool Proxy::HasImplThread() const { return !!impl_task_runner_.get(); }
18
19 base::SingleThreadTaskRunner* Proxy::ImplThreadTaskRunner() const {
20   return impl_task_runner_.get();
21 }
22
23 bool Proxy::IsMainThread() const {
24 #if DCHECK_IS_ON
25   if (impl_thread_is_overridden_)
26     return false;
27
28   bool is_main_thread = base::PlatformThread::CurrentId() == main_thread_id_;
29   if (is_main_thread && main_task_runner_.get()) {
30     DCHECK(main_task_runner_->BelongsToCurrentThread());
31   }
32   return is_main_thread;
33 #else
34   return true;
35 #endif
36 }
37
38 bool Proxy::IsImplThread() const {
39 #if DCHECK_IS_ON
40   if (impl_thread_is_overridden_)
41     return true;
42   if (!impl_task_runner_.get())
43     return false;
44   return impl_task_runner_->BelongsToCurrentThread();
45 #else
46   return true;
47 #endif
48 }
49
50 #if DCHECK_IS_ON
51 void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread) {
52   impl_thread_is_overridden_ = is_impl_thread;
53 }
54 #endif
55
56 bool Proxy::IsMainThreadBlocked() const {
57 #if DCHECK_IS_ON
58   return is_main_thread_blocked_;
59 #else
60   return true;
61 #endif
62 }
63
64 #if DCHECK_IS_ON
65 void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked) {
66   is_main_thread_blocked_ = is_main_thread_blocked;
67 }
68 #endif
69
70 Proxy::Proxy(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
71              scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
72 #if !DCHECK_IS_ON
73     : main_task_runner_(main_task_runner),
74       impl_task_runner_(impl_task_runner),
75       blocking_main_thread_task_runner_(
76           BlockingTaskRunner::Create(main_task_runner)) {
77 #else
78     : main_task_runner_(main_task_runner),
79       impl_task_runner_(impl_task_runner),
80       blocking_main_thread_task_runner_(
81           BlockingTaskRunner::Create(main_task_runner)),
82       main_thread_id_(base::PlatformThread::CurrentId()),
83       impl_thread_is_overridden_(false),
84       is_main_thread_blocked_(false) {
85 #endif
86 }
87
88 Proxy::~Proxy() {
89   DCHECK(IsMainThread());
90 }
91
92 }  // namespace cc