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

Unified Diff: cc/layer_tree_host_impl.cc

Issue 11596005: Revert 173406 - Crashes on Win & Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years 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
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layer_tree_host_impl.cc
===================================================================
--- cc/layer_tree_host_impl.cc (revision 173406)
+++ cc/layer_tree_host_impl.cc (working copy)
@@ -383,6 +383,13 @@
}
}
+void LayerTreeHostImpl::updateRootScrollLayerImplTransform()
+{
+ if (rootScrollLayer()) {
+ rootScrollLayer()->setImplTransform(implTransform());
+ }
+}
+
void LayerTreeHostImpl::updateDrawProperties()
{
if (!needsUpdateDrawProperties())
@@ -394,16 +401,20 @@
if (!rootLayer())
return;
- if (!m_renderer) // For maxTextureSize.
- return;
+ calculateRenderSurfaceLayerList(m_renderSurfaceLayerList);
+}
- if (rootScrollLayer())
- rootScrollLayer()->setImplTransform(implTransform());
+void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurfaceLayerList)
+{
+ DCHECK(renderSurfaceLayerList.empty());
+ DCHECK(rootLayer());
+ DCHECK(m_renderer); // For maxTextureSize.
+ {
+ updateRootScrollLayerImplTransform();
- {
TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
- LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewportSize(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureSize, m_settings.canUseLCDText, m_renderSurfaceLayerList);
+ LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewportSize(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureSize, m_settings.canUseLCDText, renderSurfaceLayerList);
}
}
@@ -504,9 +515,6 @@
DCHECK(frame.renderPasses.empty());
updateDrawProperties();
- if (!canDraw())
- return false;
-
trackDamageForAllSurfaces(rootLayer(), *frame.renderSurfaceLayerList);
TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfaceLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList->size()));
@@ -769,6 +777,7 @@
bool LayerTreeHostImpl::prepareToDraw(FrameData& frame)
{
TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw");
+ DCHECK(canDraw());
if (m_tileManager)
m_tileManager->CheckForCompletedSetPixels();
@@ -1197,7 +1206,25 @@
bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
{
+ // TODO(enne): See http://crbug.com/164949. This function should really
+ // just call updateDrawProperties(), but that breaks a number of
+ // impl transform tests that don't expect the tree to be updated.
+ if (!rootLayer())
+ return false;
+ if (!m_renderer)
+ return false;
+
+ // We need both a non-empty render surface layer list and a root render
+ // surface to be able to iterate over the visible layers.
+ if (m_renderSurfaceLayerList.size() && rootLayer()->renderSurface())
+ return true;
+
+ // If we are called after setRootLayer() but before prepareToDraw(), we need
+ // to recalculate the visible layers. This prevents being unable to scroll
+ // during part of a commit.
+ setNeedsUpdateDrawProperties();
updateDrawProperties();
+
return m_renderSurfaceLayerList.size();
}
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698