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