diff --git a/cc/trees/proxy.cc b/cc/trees/proxy.cc
new file mode 100644
index 0000000..e981a72
--- /dev/null
+++ b/cc/trees/proxy.cc
@@ -0,0 +1,92 @@
+// 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 "cc/trees/proxy.h"
+
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/single_thread_task_runner.h"
+#include "cc/trees/blocking_task_runner.h"
+
+namespace cc {
+
+base::SingleThreadTaskRunner* Proxy::MainThreadTaskRunner() const {
+  return main_task_runner_.get();
+}
+
+bool Proxy::HasImplThread() const { return !!impl_task_runner_.get(); }
+
+base::SingleThreadTaskRunner* Proxy::ImplThreadTaskRunner() const {
+  return impl_task_runner_.get();
+}
+
+bool Proxy::IsMainThread() const {
+#if DCHECK_IS_ON
+  if (impl_thread_is_overridden_)
+    return false;
+
+  bool is_main_thread = base::PlatformThread::CurrentId() == main_thread_id_;
+  if (is_main_thread && main_task_runner_.get()) {
+    DCHECK(main_task_runner_->BelongsToCurrentThread());
+  }
+  return is_main_thread;
+#else
+  return true;
+#endif
+}
+
+bool Proxy::IsImplThread() const {
+#if DCHECK_IS_ON
+  if (impl_thread_is_overridden_)
+    return true;
+  if (!impl_task_runner_.get())
+    return false;
+  return impl_task_runner_->BelongsToCurrentThread();
+#else
+  return true;
+#endif
+}
+
+#if DCHECK_IS_ON
+void Proxy::SetCurrentThreadIsImplThread(bool is_impl_thread) {
+  impl_thread_is_overridden_ = is_impl_thread;
+}
+#endif
+
+bool Proxy::IsMainThreadBlocked() const {
+#if DCHECK_IS_ON
+  return is_main_thread_blocked_;
+#else
+  return true;
+#endif
+}
+
+#if DCHECK_IS_ON
+void Proxy::SetMainThreadBlocked(bool is_main_thread_blocked) {
+  is_main_thread_blocked_ = is_main_thread_blocked;
+}
+#endif
+
+Proxy::Proxy(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+             scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
+#if !DCHECK_IS_ON
+    : main_task_runner_(main_task_runner),
+      impl_task_runner_(impl_task_runner),
+      blocking_main_thread_task_runner_(
+          BlockingTaskRunner::Create(main_task_runner)) {
+#else
+    : main_task_runner_(main_task_runner),
+      impl_task_runner_(impl_task_runner),
+      blocking_main_thread_task_runner_(
+          BlockingTaskRunner::Create(main_task_runner)),
+      main_thread_id_(base::PlatformThread::CurrentId()),
+      impl_thread_is_overridden_(false),
+      is_main_thread_blocked_(false) {
+#endif
+}
+
+Proxy::~Proxy() {
+  DCHECK(IsMainThread());
+}
+
+}  // namespace cc
