| 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();
|
| }
|
|
|
|
|