| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/trees/proxy.h" | 5 #include "cc/trees/proxy.h" |
| 6 | 6 |
| 7 #include "base/single_thread_task_runner.h" | 7 #include "base/single_thread_task_runner.h" |
| 8 #include "cc/trees/blocking_task_runner.h" | 8 #include "cc/trees/blocking_task_runner.h" |
| 9 | 9 |
| 10 namespace cc { | 10 namespace cc { |
| 11 | 11 |
| 12 base::SingleThreadTaskRunner* Proxy::MainThreadTaskRunner() const { | |
| 13 return main_task_runner_.get(); | |
| 14 } | |
| 15 | |
| 16 bool Proxy::HasImplThread() const { return !!impl_task_runner_.get(); } | |
| 17 | |
| 18 base::SingleThreadTaskRunner* Proxy::ImplThreadTaskRunner() const { | |
| 19 return impl_task_runner_.get(); | |
| 20 } | |
| 21 | |
| 22 bool Proxy::IsMainThread() const { | |
| 23 #if DCHECK_IS_ON() | |
| 24 if (impl_thread_is_overridden_) | |
| 25 return false; | |
| 26 | |
| 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()); | |
| 30 } | |
| 31 return is_main_thread; | |
| 32 #else | |
| 33 return true; | |
| 34 #endif | |
| 35 } | |
| 36 | |
| 37 bool Proxy::IsImplThread() const { | |
| 38 #if DCHECK_IS_ON() | |
| 39 if (impl_thread_is_overridden_) | |
| 40 return true; | |
| 41 if (!impl_task_runner_.get()) | |
| 42 return false; | |
| 43 return impl_task_runner_->BelongsToCurrentThread(); | |
| 44 #else | |
| 45 return true; | |
| 46 #endif | |
| 47 } | |
| 48 | |
| 49 #if DCHECK_IS_ON() | |
| 50 void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread) { | |
| 51 impl_thread_is_overridden_ = is_impl_thread; | |
| 52 } | |
| 53 #endif | |
| 54 | |
| 55 bool Proxy::IsMainThreadBlocked() const { | |
| 56 #if DCHECK_IS_ON() | |
| 57 return is_main_thread_blocked_; | |
| 58 #else | |
| 59 return true; | |
| 60 #endif | |
| 61 } | |
| 62 | |
| 63 #if DCHECK_IS_ON() | |
| 64 void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked) { | |
| 65 is_main_thread_blocked_ = is_main_thread_blocked; | |
| 66 } | |
| 67 #endif | |
| 68 | |
| 69 Proxy::Proxy(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 12 Proxy::Proxy(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| 70 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) | 13 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) |
| 71 #if !DCHECK_IS_ON() | 14 : ThreadVerifier(main_task_runner, 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)) { | |
| 76 #else | |
| 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) { | |
| 84 #endif | |
| 85 } | |
| 86 | 15 |
| 87 Proxy::~Proxy() { | 16 Proxy::~Proxy() { |
| 88 DCHECK(IsMainThread()); | 17 DCHECK(IsMainThread()); |
| 89 } | 18 } |
| 90 | 19 |
| 91 } // namespace cc | 20 } // namespace cc |
| OLD | NEW |