Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

Issue 7274032: Merge 89635 - 2011-06-23 John Bates <jbates@google.com> (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/782/
Patch Set: Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
===================================================================
--- Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (revision 89959)
+++ Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (working copy)
@@ -120,7 +120,6 @@
, m_offscreenFramebufferId(0)
, m_compositeOffscreen(false)
, m_context(context)
- , m_childContextsWereCopied(false)
, m_contextSupportsLatch(false)
, m_animating(false)
, m_defaultRenderSurface(0)
@@ -245,22 +244,19 @@
// thread can execute WebGL calls on the child context at any time,
// potentially clobbering the parent texture that is being renderered
// by the compositor thread.
- if (m_childContextsWereCopied) {
- Extensions3DChromium* parentExt = static_cast<Extensions3DChromium*>(m_context->getExtensions());
- // For each child context:
- // glWaitLatch(Offscreen->Compositor);
- ChildContextMap::iterator i = m_childContexts.begin();
- for (; i != m_childContexts.end(); ++i) {
- Extensions3DChromium* childExt = static_cast<Extensions3DChromium*>(i->first->getExtensions());
- GC3Duint latchId;
- childExt->getChildToParentLatchCHROMIUM(&latchId);
- parentExt->waitLatchCHROMIUM(latchId);
+ Extensions3DChromium* parentExt = static_cast<Extensions3DChromium*>(m_context->getExtensions());
+ // For each child context:
+ // glWaitLatch(Offscreen->Compositor);
+ ChildContextMap::iterator i = m_childContexts.begin();
+ for (; i != m_childContexts.end(); ++i) {
+ Extensions3DChromium* childExt = static_cast<Extensions3DChromium*>(i->first->getExtensions());
+ if (childExt->getGraphicsResetStatusARB() == GraphicsContext3D::NO_ERROR) {
+ GC3Duint childToParentLatchId;
+ childExt->getChildToParentLatchCHROMIUM(&childToParentLatchId);
+ childExt->setLatchCHROMIUM(childToParentLatchId);
+ parentExt->waitLatchCHROMIUM(childToParentLatchId);
}
}
- // Reset to false to indicate that we have consumed the dirty child
- // contexts' parent textures. (This is only useful when the compositor
- // is multithreaded.)
- m_childContextsWereCopied = false;
}
drawLayers(renderSurfaceLayerList);
@@ -275,9 +271,12 @@
ChildContextMap::iterator i = m_childContexts.begin();
for (; i != m_childContexts.end(); ++i) {
Extensions3DChromium* childExt = static_cast<Extensions3DChromium*>(i->first->getExtensions());
- GC3Duint latchId;
- childExt->getParentToChildLatchCHROMIUM(&latchId);
- parentExt->setLatchCHROMIUM(latchId);
+ if (childExt->getGraphicsResetStatusARB() == GraphicsContext3D::NO_ERROR) {
+ GC3Duint parentToChildLatchId;
+ childExt->getParentToChildLatchCHROMIUM(&parentToChildLatchId);
+ parentExt->setLatchCHROMIUM(parentToChildLatchId);
+ childExt->waitLatchCHROMIUM(parentToChildLatchId);
+ }
}
}
@@ -330,50 +329,9 @@
s_inPaintLayerContents = false;
#endif
- // FIXME: Before updateCompositorResources, when the compositor runs in
- // its own thread, and when the copyTexImage2D bug is fixed, insert
- // a glWaitLatch(Compositor->Offscreen) on all child contexts here instead
- // of after updateCompositorResources.
- // Also uncomment the glSetLatch(Compositor->Offscreen) code in addChildContext.
-// if (hardwareCompositing() && m_contextSupportsLatch) {
-// // For each child context:
-// // glWaitLatch(Compositor->Offscreen);
-// ChildContextMap::iterator i = m_childContexts.begin();
-// for (; i != m_childContexts.end(); ++i) {
-// Extensions3DChromium* ext = static_cast<Extensions3DChromium*>(i->first->getExtensions());
-// GC3Duint childToParentLatchId, parentToChildLatchId;
-// ext->getParentToChildLatchCHROMIUM(&parentToChildLatchId);
-// ext->waitLatchCHROMIUM(parentToChildLatchId);
-// }
-// }
-
updateCompositorResources(renderSurfaceLayerList);
// Update compositor resources for root layer.
m_rootLayerContentTiler->updateRect();
-
- // After updateCompositorResources, set/wait latches for all child
- // contexts. This will prevent the compositor from using any of the child
- // parent textures while WebGL commands are executing from javascript *and*
- // while the final parent texture is being blit'd. copyTexImage2D
- // uses the parent texture as a temporary resolve buffer, so that's why the
- // waitLatch is below, to block the compositor from using the parent texture
- // until the next WebGL SwapBuffers (or copyTextureToParentTexture for
- // Canvas2D).
- if (hardwareCompositing() && m_contextSupportsLatch) {
- m_childContextsWereCopied = true;
- // For each child context:
- // glSetLatch(Offscreen->Compositor);
- // glWaitLatch(Compositor->Offscreen);
- ChildContextMap::iterator i = m_childContexts.begin();
- for (; i != m_childContexts.end(); ++i) {
- Extensions3DChromium* ext = static_cast<Extensions3DChromium*>(i->first->getExtensions());
- GC3Duint childToParentLatchId, parentToChildLatchId;
- ext->getParentToChildLatchCHROMIUM(&parentToChildLatchId);
- ext->getChildToParentLatchCHROMIUM(&childToParentLatchId);
- ext->setLatchCHROMIUM(childToParentLatchId);
- ext->waitLatchCHROMIUM(parentToChildLatchId);
- }
- }
}
void LayerRendererChromium::paintLayerContents(const LayerList& renderSurfaceLayerList)
@@ -1185,6 +1143,11 @@
}
}
+bool LayerRendererChromium::isCompositorContextLost()
+{
+ return (m_context.get()->getExtensions()->getGraphicsResetStatusARB() != GraphicsContext3D::NO_ERROR);
+}
+
void LayerRendererChromium::dumpRenderSurfaces(TextStream& ts, int indent, LayerChromium* layer) const
{
if (layer->ccLayerImpl()->renderSurface())

Powered by Google App Engine
This is Rietveld 408576698