// Copyright 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "config.h" #include "cc/proxy.h" #include "cc/thread.h" namespace cc { namespace { #ifndef NDEBUG bool implThreadIsOverridden = false; bool s_isMainThreadBlocked = false; #endif Thread* s_mainThread = 0; Thread* s_implThread = 0; } void Proxy::setMainThread(Thread* thread) { s_mainThread = thread; } Thread* Proxy::mainThread() { return s_mainThread; } bool Proxy::hasImplThread() { return s_implThread; } void Proxy::setImplThread(Thread* thread) { s_implThread = thread; } Thread* Proxy::implThread() { return s_implThread; } Thread* Proxy::currentThread() { if (s_mainThread && s_mainThread->belongsToCurrentThread()) return s_mainThread; if (s_implThread && s_implThread->belongsToCurrentThread()) return s_implThread; return 0; } bool Proxy::isMainThread() { #ifndef NDEBUG DCHECK(s_mainThread); if (implThreadIsOverridden) return false; return s_mainThread->belongsToCurrentThread(); #else return true; #endif } bool Proxy::isImplThread() { #ifndef NDEBUG if (implThreadIsOverridden) return true; return s_implThread && s_implThread->belongsToCurrentThread(); #else return true; #endif } #ifndef NDEBUG void Proxy::setCurrentThreadIsImplThread(bool isImplThread) { implThreadIsOverridden = isImplThread; } #endif bool Proxy::isMainThreadBlocked() { #ifndef NDEBUG return s_isMainThreadBlocked; #else return true; #endif } #ifndef NDEBUG void Proxy::setMainThreadBlocked(bool isMainThreadBlocked) { s_isMainThreadBlocked = isMainThreadBlocked; } #endif Proxy::Proxy() { DCHECK(isMainThread()); } Proxy::~Proxy() { DCHECK(isMainThread()); } } // namespace cc