// 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/scoped_thread_proxy.h" #include "base/bind.h" namespace cc { ScopedThreadProxy::ScopedThreadProxy(cc::Thread* targetThread) : m_targetThread(targetThread) , m_shutdown(false) { } ScopedThreadProxy::~ScopedThreadProxy() { } void ScopedThreadProxy::postTask(const tracked_objects::Location& location, base::Closure cb) { m_targetThread->postTask(base::Bind(&ScopedThreadProxy::runTaskIfNotShutdown, this, cb)); } void ScopedThreadProxy::shutdown() { DCHECK(m_targetThread->belongsToCurrentThread()); DCHECK(!m_shutdown); m_shutdown = true; } void ScopedThreadProxy::runTaskIfNotShutdown(base::Closure cb) { // If our shutdown flag is set, it's possible that m_targetThread has already been destroyed so don't // touch it. if (m_shutdown) { return; } DCHECK(m_targetThread->belongsToCurrentThread()); cb.Run(); } } // namespace cc