diff options
Diffstat (limited to 'cc/proxy.cc')
-rw-r--r-- | cc/proxy.cc | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/cc/proxy.cc b/cc/proxy.cc new file mode 100644 index 0000000..bc5ae69 --- /dev/null +++ b/cc/proxy.cc @@ -0,0 +1,105 @@ +// 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 "CCProxy.h" + +#include "CCThreadTask.h" + +using namespace WTF; + +namespace cc { + +namespace { +#ifndef NDEBUG +bool implThreadIsOverridden = false; +bool s_isMainThreadBlocked = false; +base::PlatformThreadId threadIDOverridenToBeImplThread; +#endif +CCThread* s_mainThread = 0; +CCThread* s_implThread = 0; +} + +void CCProxy::setMainThread(CCThread* thread) +{ + s_mainThread = thread; +} + +CCThread* CCProxy::mainThread() +{ + return s_mainThread; +} + +bool CCProxy::hasImplThread() +{ + return s_implThread; +} + +void CCProxy::setImplThread(CCThread* thread) +{ + s_implThread = thread; +} + +CCThread* CCProxy::implThread() +{ + return s_implThread; +} + +CCThread* CCProxy::currentThread() +{ + base::PlatformThreadId currentThreadIdentifier = base::PlatformThread::CurrentId(); + if (s_mainThread && s_mainThread->threadID() == currentThreadIdentifier) + return s_mainThread; + if (s_implThread && s_implThread->threadID() == currentThreadIdentifier) + return s_implThread; + return 0; +} + +#ifndef NDEBUG +bool CCProxy::isMainThread() +{ + ASSERT(s_mainThread); + if (implThreadIsOverridden && base::PlatformThread::CurrentId() == threadIDOverridenToBeImplThread) + return false; + return base::PlatformThread::CurrentId() == s_mainThread->threadID(); +} + +bool CCProxy::isImplThread() +{ + base::PlatformThreadId implThreadID = s_implThread ? s_implThread->threadID() : 0; + if (implThreadIsOverridden && base::PlatformThread::CurrentId() == threadIDOverridenToBeImplThread) + return true; + return base::PlatformThread::CurrentId() == implThreadID; +} + +void CCProxy::setCurrentThreadIsImplThread(bool isImplThread) +{ + implThreadIsOverridden = isImplThread; + if (isImplThread) + threadIDOverridenToBeImplThread = base::PlatformThread::CurrentId(); +} + +bool CCProxy::isMainThreadBlocked() +{ + return s_isMainThreadBlocked; +} + +void CCProxy::setMainThreadBlocked(bool isMainThreadBlocked) +{ + s_isMainThreadBlocked = isMainThreadBlocked; +} +#endif + +CCProxy::CCProxy() +{ + ASSERT(isMainThread()); +} + +CCProxy::~CCProxy() +{ + ASSERT(isMainThread()); +} + +} |