| Index: cc/single_thread_proxy.cc
 | 
| diff --git a/cc/single_thread_proxy.cc b/cc/single_thread_proxy.cc
 | 
| index 30d88ba74dba5c95835ee18681828fe73b9ec44d..dde8dcd15832ef9cc3fcfa3252c2914d27ea4e18 100644
 | 
| --- a/cc/single_thread_proxy.cc
 | 
| +++ b/cc/single_thread_proxy.cc
 | 
| @@ -22,7 +22,8 @@ scoped_ptr<Proxy> SingleThreadProxy::create(LayerTreeHost* layerTreeHost)
 | 
|  }
 | 
|  
 | 
|  SingleThreadProxy::SingleThreadProxy(LayerTreeHost* layerTreeHost)
 | 
| -    : m_layerTreeHost(layerTreeHost)
 | 
| +    : Proxy(0)
 | 
| +    , m_layerTreeHost(layerTreeHost)
 | 
|      , m_contextLost(false)
 | 
|      , m_rendererInitialized(false)
 | 
|      , m_nextFrameIsNewlyCommittedFrame(false)
 | 
| @@ -34,7 +35,7 @@ SingleThreadProxy::SingleThreadProxy(LayerTreeHost* layerTreeHost)
 | 
|  
 | 
|  void SingleThreadProxy::start()
 | 
|  {
 | 
| -    DebugScopedSetImplThread impl;
 | 
| +    DebugScopedSetImplThread impl(this);
 | 
|      m_layerTreeHostImpl = m_layerTreeHost->createLayerTreeHostImpl(this);
 | 
|  }
 | 
|  
 | 
| @@ -73,7 +74,7 @@ void SingleThreadProxy::finishAllRendering()
 | 
|  {
 | 
|      DCHECK(Proxy::isMainThread());
 | 
|      {
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|          m_layerTreeHostImpl->finishAllRendering();
 | 
|      }
 | 
|  }
 | 
| @@ -101,7 +102,7 @@ void SingleThreadProxy::setSurfaceReady()
 | 
|  
 | 
|  void SingleThreadProxy::setVisible(bool visible)
 | 
|  {
 | 
| -    DebugScopedSetImplThread impl;
 | 
| +    DebugScopedSetImplThread impl(this);
 | 
|      m_layerTreeHostImpl->setVisible(visible);
 | 
|  }
 | 
|  
 | 
| @@ -110,7 +111,7 @@ bool SingleThreadProxy::initializeRenderer()
 | 
|      DCHECK(Proxy::isMainThread());
 | 
|      DCHECK(m_contextBeforeInitialization.get());
 | 
|      {
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|          bool ok = m_layerTreeHostImpl->initializeRenderer(m_contextBeforeInitialization.Pass());
 | 
|          if (ok) {
 | 
|              m_rendererInitialized = true;
 | 
| @@ -133,8 +134,8 @@ bool SingleThreadProxy::recreateContext()
 | 
|  
 | 
|      bool initialized;
 | 
|      {
 | 
| -        DebugScopedSetMainThreadBlocked mainThreadBlocked;
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetMainThreadBlocked mainThreadBlocked(this);
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|          if (!m_layerTreeHostImpl->contentsTexturesPurged())
 | 
|              m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->resourceProvider());
 | 
|          initialized = m_layerTreeHostImpl->initializeRenderer(context.Pass());
 | 
| @@ -181,8 +182,8 @@ void SingleThreadProxy::doCommit(scoped_ptr<TextureUpdateQueue> queue)
 | 
|      DCHECK(Proxy::isMainThread());
 | 
|      // Commit immediately
 | 
|      {
 | 
| -        DebugScopedSetMainThreadBlocked mainThreadBlocked;
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetMainThreadBlocked mainThreadBlocked(this);
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|  
 | 
|          base::TimeTicks startTime = base::TimeTicks::HighResNow();
 | 
|          m_layerTreeHostImpl->beginCommit();
 | 
| @@ -195,7 +196,8 @@ void SingleThreadProxy::doCommit(scoped_ptr<TextureUpdateQueue> queue)
 | 
|                  NULL,
 | 
|                  Proxy::mainThread(),
 | 
|                  queue.Pass(),
 | 
| -                m_layerTreeHostImpl->resourceProvider());
 | 
| +                m_layerTreeHostImpl->resourceProvider(),
 | 
| +                hasImplThread());
 | 
|          updateController->finalize();
 | 
|  
 | 
|          m_layerTreeHost->finishCommitOnImplThread(m_layerTreeHostImpl.get());
 | 
| @@ -250,8 +252,8 @@ void SingleThreadProxy::stop()
 | 
|      TRACE_EVENT0("cc", "SingleThreadProxy::stop");
 | 
|      DCHECK(Proxy::isMainThread());
 | 
|      {
 | 
| -        DebugScopedSetMainThreadBlocked mainThreadBlocked;
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetMainThreadBlocked mainThreadBlocked(this);
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|  
 | 
|          if (!m_layerTreeHostImpl->contentsTexturesPurged())
 | 
|              m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->resourceProvider());
 | 
| @@ -273,7 +275,7 @@ void SingleThreadProxy::setNeedsCommitOnImplThread()
 | 
|  void SingleThreadProxy::postAnimationEventsToMainThreadOnImplThread(scoped_ptr<AnimationEventsVector> events, double wallClockTime)
 | 
|  {
 | 
|      DCHECK(Proxy::isImplThread());
 | 
| -    DebugScopedSetMainThread main;
 | 
| +    DebugScopedSetMainThread main(this);
 | 
|      m_layerTreeHost->setAnimationEvents(events.Pass(), wallClockTime);
 | 
|  }
 | 
|  
 | 
| @@ -298,7 +300,7 @@ void SingleThreadProxy::compositeImmediately()
 | 
|  void SingleThreadProxy::forceSerializeOnSwapBuffers()
 | 
|  {
 | 
|      {
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|          if (m_rendererInitialized)
 | 
|              m_layerTreeHostImpl->renderer()->doNoOp();
 | 
|      }
 | 
| @@ -319,7 +321,7 @@ bool SingleThreadProxy::commitAndComposite()
 | 
|      // Unlink any texture backings that were deleted
 | 
|      PrioritizedTextureManager::BackingList evictedContentsTexturesBackings;
 | 
|      {
 | 
| -        DebugScopedSetImplThread implThread;
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|          m_layerTreeHost->contentsTextureManager()->getEvictedBackings(evictedContentsTexturesBackings);
 | 
|      }
 | 
|      m_layerTreeHost->contentsTextureManager()->unlinkEvictedBackings(evictedContentsTexturesBackings);
 | 
| @@ -341,7 +343,7 @@ bool SingleThreadProxy::doComposite()
 | 
|  {
 | 
|      DCHECK(!m_contextLost);
 | 
|      {
 | 
| -        DebugScopedSetImplThread impl;
 | 
| +        DebugScopedSetImplThread impl(this);
 | 
|  
 | 
|          if (!m_layerTreeHostImpl->visible())
 | 
|              return false;
 | 
| 
 |