summaryrefslogtreecommitdiffstats
path: root/cc/proxy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/proxy.cc')
-rw-r--r--cc/proxy.cc105
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());
+}
+
+}