| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/single_thread_proxy.h" | 5 #include "cc/single_thread_proxy.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "cc/draw_quad.h" | 8 #include "cc/draw_quad.h" |
| 9 #include "cc/layer_tree_host.h" | 9 #include "cc/layer_tree_host.h" |
| 10 #include "cc/output_surface.h" | 10 #include "cc/output_surface.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 } | 44 } |
| 45 | 45 |
| 46 bool SingleThreadProxy::compositeAndReadback(void *pixels, const gfx::Rect& rect
) | 46 bool SingleThreadProxy::compositeAndReadback(void *pixels, const gfx::Rect& rect
) |
| 47 { | 47 { |
| 48 TRACE_EVENT0("cc", "SingleThreadProxy::compositeAndReadback"); | 48 TRACE_EVENT0("cc", "SingleThreadProxy::compositeAndReadback"); |
| 49 DCHECK(Proxy::isMainThread()); | 49 DCHECK(Proxy::isMainThread()); |
| 50 | 50 |
| 51 if (!commitAndComposite()) | 51 if (!commitAndComposite()) |
| 52 return false; | 52 return false; |
| 53 | 53 |
| 54 m_layerTreeHostImpl->readback(pixels, rect); | 54 { |
| 55 DebugScopedSetImplThread impl(this); |
| 56 m_layerTreeHostImpl->readback(pixels, rect); |
| 55 | 57 |
| 56 if (m_layerTreeHostImpl->isContextLost()) | 58 if (m_layerTreeHostImpl->isContextLost()) |
| 57 return false; | 59 return false; |
| 58 | 60 |
| 59 m_layerTreeHostImpl->swapBuffers(); | 61 m_layerTreeHostImpl->swapBuffers(); |
| 62 } |
| 60 didSwapFrame(); | 63 didSwapFrame(); |
| 61 | 64 |
| 62 return true; | 65 return true; |
| 63 } | 66 } |
| 64 | 67 |
| 65 void SingleThreadProxy::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
useAnchor, float scale, base::TimeDelta duration) | 68 void SingleThreadProxy::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
useAnchor, float scale, base::TimeDelta duration) |
| 66 { | 69 { |
| 67 m_layerTreeHostImpl->startPageScaleAnimation(targetOffset, useAnchor, scale,
base::TimeTicks::Now(), duration); | 70 m_layerTreeHostImpl->startPageScaleAnimation(targetOffset, useAnchor, scale,
base::TimeTicks::Now(), duration); |
| 68 } | 71 } |
| 69 | 72 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 const RendererCapabilities& SingleThreadProxy::rendererCapabilities() const | 160 const RendererCapabilities& SingleThreadProxy::rendererCapabilities() const |
| 158 { | 161 { |
| 159 DCHECK(m_rendererInitialized); | 162 DCHECK(m_rendererInitialized); |
| 160 // Note: this gets called during the commit by the "impl" thread | 163 // Note: this gets called during the commit by the "impl" thread |
| 161 return m_RendererCapabilitiesForMainThread; | 164 return m_RendererCapabilitiesForMainThread; |
| 162 } | 165 } |
| 163 | 166 |
| 164 void SingleThreadProxy::loseOutputSurface() | 167 void SingleThreadProxy::loseOutputSurface() |
| 165 { | 168 { |
| 166 DCHECK(Proxy::isMainThread()); | 169 DCHECK(Proxy::isMainThread()); |
| 167 m_layerTreeHost->didLoseOutputSurface(); | 170 |
| 168 m_outputSurfaceLost = true; | 171 DebugScopedSetImplThread impl(this); |
| 172 m_layerTreeHostImpl->resourceProvider()->loseOutputSurface(); |
| 169 } | 173 } |
| 170 | 174 |
| 171 void SingleThreadProxy::setNeedsAnimate() | 175 void SingleThreadProxy::setNeedsAnimate() |
| 172 { | 176 { |
| 173 // Thread-only feature | 177 // Thread-only feature |
| 174 NOTREACHED(); | 178 NOTREACHED(); |
| 175 } | 179 } |
| 176 | 180 |
| 177 void SingleThreadProxy::doCommit(scoped_ptr<ResourceUpdateQueue> queue) | 181 void SingleThreadProxy::doCommit(scoped_ptr<ResourceUpdateQueue> queue) |
| 178 { | 182 { |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 return; | 307 return; |
| 304 if (!m_layerTreeHost->contentsTextureManager()) | 308 if (!m_layerTreeHost->contentsTextureManager()) |
| 305 return; | 309 return; |
| 306 | 310 |
| 307 m_layerTreeHostImpl->sendManagedMemoryStats( | 311 m_layerTreeHostImpl->sendManagedMemoryStats( |
| 308 m_layerTreeHost->contentsTextureManager()->memoryVisibleBytes(), | 312 m_layerTreeHost->contentsTextureManager()->memoryVisibleBytes(), |
| 309 m_layerTreeHost->contentsTextureManager()->memoryVisibleAndNearbyBytes()
, | 313 m_layerTreeHost->contentsTextureManager()->memoryVisibleAndNearbyBytes()
, |
| 310 m_layerTreeHost->contentsTextureManager()->memoryUseBytes()); | 314 m_layerTreeHost->contentsTextureManager()->memoryUseBytes()); |
| 311 } | 315 } |
| 312 | 316 |
| 317 void SingleThreadProxy::didLoseOutputSurfaceOnImplThread() |
| 318 { |
| 319 // Cause a commit so we can notice the lost context. |
| 320 setNeedsCommitOnImplThread(); |
| 321 } |
| 322 |
| 313 // Called by the legacy scheduling path (e.g. where render_widget does the sched
uling) | 323 // Called by the legacy scheduling path (e.g. where render_widget does the sched
uling) |
| 314 void SingleThreadProxy::compositeImmediately() | 324 void SingleThreadProxy::compositeImmediately() |
| 315 { | 325 { |
| 316 if (commitAndComposite()) { | 326 if (commitAndComposite()) { |
| 317 m_layerTreeHostImpl->swapBuffers(); | 327 m_layerTreeHostImpl->swapBuffers(); |
| 318 didSwapFrame(); | 328 didSwapFrame(); |
| 319 } | 329 } |
| 320 } | 330 } |
| 321 | 331 |
| 322 void SingleThreadProxy::forceSerializeOnSwapBuffers() | 332 void SingleThreadProxy::forceSerializeOnSwapBuffers() |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 // We guard prepareToDraw() with canDraw() because it always returns a v
alid frame, so can only | 382 // We guard prepareToDraw() with canDraw() because it always returns a v
alid frame, so can only |
| 373 // be used when such a frame is possible. Since drawLayers() depends on
the result of | 383 // be used when such a frame is possible. Since drawLayers() depends on
the result of |
| 374 // prepareToDraw(), it is guarded on canDraw() as well. | 384 // prepareToDraw(), it is guarded on canDraw() as well. |
| 375 if (!m_layerTreeHostImpl->canDraw()) | 385 if (!m_layerTreeHostImpl->canDraw()) |
| 376 return false; | 386 return false; |
| 377 | 387 |
| 378 LayerTreeHostImpl::FrameData frame; | 388 LayerTreeHostImpl::FrameData frame; |
| 379 m_layerTreeHostImpl->prepareToDraw(frame); | 389 m_layerTreeHostImpl->prepareToDraw(frame); |
| 380 m_layerTreeHostImpl->drawLayers(frame); | 390 m_layerTreeHostImpl->drawLayers(frame); |
| 381 m_layerTreeHostImpl->didDrawAllLayers(frame); | 391 m_layerTreeHostImpl->didDrawAllLayers(frame); |
| 392 m_outputSurfaceLost = m_layerTreeHostImpl->isContextLost(); |
| 382 } | 393 } |
| 383 | 394 |
| 384 if (m_layerTreeHostImpl->isContextLost()) { | 395 if (m_outputSurfaceLost) { |
| 385 m_outputSurfaceLost = true; | |
| 386 m_layerTreeHost->didLoseOutputSurface(); | 396 m_layerTreeHost->didLoseOutputSurface(); |
| 387 return false; | 397 return false; |
| 388 } | 398 } |
| 389 | 399 |
| 390 return true; | 400 return true; |
| 391 } | 401 } |
| 392 | 402 |
| 393 void SingleThreadProxy::didSwapFrame() | 403 void SingleThreadProxy::didSwapFrame() |
| 394 { | 404 { |
| 395 if (m_nextFrameIsNewlyCommittedFrame) { | 405 if (m_nextFrameIsNewlyCommittedFrame) { |
| 396 m_nextFrameIsNewlyCommittedFrame = false; | 406 m_nextFrameIsNewlyCommittedFrame = false; |
| 397 m_layerTreeHost->didCommitAndDrawFrame(); | 407 m_layerTreeHost->didCommitAndDrawFrame(); |
| 398 } | 408 } |
| 399 } | 409 } |
| 400 | 410 |
| 401 bool SingleThreadProxy::commitPendingForTesting() | 411 bool SingleThreadProxy::commitPendingForTesting() |
| 402 { | 412 { |
| 403 return false; | 413 return false; |
| 404 } | 414 } |
| 405 | 415 |
| 406 } // namespace cc | 416 } // namespace cc |
| OLD | NEW |