| Index: cc/single_thread_proxy.cc | 
| diff --git a/cc/single_thread_proxy.cc b/cc/single_thread_proxy.cc | 
| index 63d70d8f87dba5aae375db422e2e00e8d0c97c5c..27dcb4240ccc1a8ebe8898f3fe8dc87999afca0d 100644 | 
| --- a/cc/single_thread_proxy.cc | 
| +++ b/cc/single_thread_proxy.cc | 
| @@ -51,12 +51,15 @@ bool SingleThreadProxy::compositeAndReadback(void *pixels, const gfx::Rect& rect | 
| if (!commitAndComposite()) | 
| return false; | 
|  | 
| -    m_layerTreeHostImpl->readback(pixels, rect); | 
| +    { | 
| +        DebugScopedSetImplThread impl(this); | 
| +        m_layerTreeHostImpl->readback(pixels, rect); | 
|  | 
| -    if (m_layerTreeHostImpl->isContextLost()) | 
| -        return false; | 
| +        if (m_layerTreeHostImpl->isContextLost()) | 
| +            return false; | 
|  | 
| -    m_layerTreeHostImpl->swapBuffers(); | 
| +        m_layerTreeHostImpl->swapBuffers(); | 
| +    } | 
| didSwapFrame(); | 
|  | 
| return true; | 
| @@ -164,8 +167,9 @@ const RendererCapabilities& SingleThreadProxy::rendererCapabilities() const | 
| void SingleThreadProxy::loseOutputSurface() | 
| { | 
| DCHECK(Proxy::isMainThread()); | 
| -    m_layerTreeHost->didLoseOutputSurface(); | 
| -    m_outputSurfaceLost = true; | 
| + | 
| +    DebugScopedSetImplThread impl(this); | 
| +    m_layerTreeHostImpl->resourceProvider()->loseOutputSurface(); | 
| } | 
|  | 
| void SingleThreadProxy::setNeedsAnimate() | 
| @@ -310,6 +314,12 @@ void SingleThreadProxy::sendManagedMemoryStats() | 
| m_layerTreeHost->contentsTextureManager()->memoryUseBytes()); | 
| } | 
|  | 
| +void SingleThreadProxy::didLoseOutputSurfaceOnImplThread() | 
| +{ | 
| +    // Cause a commit so we can notice the lost context. | 
| +    setNeedsCommitOnImplThread(); | 
| +} | 
| + | 
| // Called by the legacy scheduling path (e.g. where render_widget does the scheduling) | 
| void SingleThreadProxy::compositeImmediately() | 
| { | 
| @@ -379,10 +389,10 @@ bool SingleThreadProxy::doComposite() | 
| m_layerTreeHostImpl->prepareToDraw(frame); | 
| m_layerTreeHostImpl->drawLayers(frame); | 
| m_layerTreeHostImpl->didDrawAllLayers(frame); | 
| +        m_outputSurfaceLost = m_layerTreeHostImpl->isContextLost(); | 
| } | 
|  | 
| -    if (m_layerTreeHostImpl->isContextLost()) { | 
| -        m_outputSurfaceLost = true; | 
| +    if (m_outputSurfaceLost) { | 
| m_layerTreeHost->didLoseOutputSurface(); | 
| return false; | 
| } | 
|  |