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

Unified Diff: cc/layer_tree_host_impl.cc

Issue 11447028: cc: Split out calcDrawEtc from drawLayers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clean up unnecessary test changes 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
Index: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index a3a0f9ad981f777bcd5fabedf08549fa8f2bea95..2962b076ac03a1503700ce0492039c86d1dc85c4 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -221,6 +221,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre
, m_backgroundColor(0)
, m_hasTransparentBackground(false)
, m_needsAnimateLayers(false)
+ , m_needsUpdateDrawProperties(false)
, m_pinchGestureActive(false)
, m_fpsCounter(FrameRateCounter::create(m_proxy->hasImplThread()))
, m_debugRectHistory(DebugRectHistory::create())
@@ -248,6 +249,14 @@ void LayerTreeHostImpl::beginCommit()
void LayerTreeHostImpl::commitComplete()
{
TRACE_EVENT0("cc", "LayerTreeHostImpl::commitComplete");
+
+ // Impl-side painting needs an update immediately post-commit to have the
+ // opportunity to create tilings. Other paths can call updateDrawProperties
+ // more lazily when needed prior to drawing.
+ setNeedsUpdateDrawProperties();
+ if (m_settings.implSidePainting)
+ updateDrawProperties();
+
// Recompute max scroll position; must be after layer content bounds are
// updated.
updateMaxScrollOffset();
@@ -325,6 +334,7 @@ void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
m_pageScaleAnimation->zoomTo(scaledTargetOffset, pageScale, duration.InSecondsF());
}
+ setNeedsUpdateDrawProperties();
m_client->setNeedsRedrawOnImplThread();
m_client->setNeedsCommitOnImplThread();
}
@@ -370,12 +380,25 @@ void LayerTreeHostImpl::updateRootScrollLayerImplTransform()
}
}
+void LayerTreeHostImpl::updateDrawProperties()
+{
+ if (!needsUpdateDrawProperties())
+ return;
+
+ m_renderSurfaceLayerList.clear();
+ m_needsUpdateDrawProperties = false;
+
+ if (!m_rootLayerImpl)
+ return;
+
+ calculateRenderSurfaceLayerList(m_renderSurfaceLayerList);
+}
+
void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurfaceLayerList)
{
DCHECK(renderSurfaceLayerList.empty());
DCHECK(m_rootLayerImpl);
DCHECK(m_renderer); // For maxTextureSize.
-
{
updateRootScrollLayerImplTransform();
@@ -383,7 +406,6 @@ void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface
float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
LayerTreeHostCommon::calculateDrawProperties(m_rootLayerImpl.get(), deviceViewportSize(), m_deviceScaleFactor, pageScaleFactor, &m_layerSorter, rendererCapabilities().maxTextureSize, renderSurfaceLayerList);
- trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList);
}
}
@@ -483,7 +505,7 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
{
DCHECK(frame.renderPasses.empty());
- calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList);
+ trackDamageForAllSurfaces(m_rootLayerImpl.get(), *frame.renderSurfaceLayerList);
TRACE_EVENT1("cc", "LayerTreeHostImpl::calculateRenderPasses", "renderSurfaceLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerList->size()));
@@ -529,6 +551,7 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
if (occlusionTracker.occluded(it->renderTarget(), it->visibleContentRect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect(), &hasOcclusionFromOutsideTargetSurface))
appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclusionFromOutsideTargetSurface;
else {
+ DCHECK(it->layerTreeHostImpl());
danakj 2012/12/06 19:12:10 Should this DCHECK the layerTreeHostImpl() == this
enne (OOO) 2012/12/06 19:25:42 Done.
it->willDraw(m_resourceProvider.get());
frame.willDrawLayers.push_back(*it);
@@ -737,10 +760,10 @@ bool LayerTreeHostImpl::prepareToDraw(FrameData& frame)
TRACE_EVENT0("cc", "LayerTreeHostImpl::prepareToDraw");
DCHECK(canDraw());
+ updateDrawProperties();
danakj 2012/12/06 19:12:10 I'm not clear why this moved out of calcRenderPass
enne (OOO) 2012/12/06 19:25:42 Moved back.
frame.renderSurfaceLayerList = &m_renderSurfaceLayerList;
frame.renderPasses.clear();
frame.renderPassesById.clear();
- frame.renderSurfaceLayerList->clear();
frame.willDrawLayers.clear();
if (!calculateRenderPasses(frame))
@@ -944,8 +967,11 @@ static LayerImpl* findScrollLayerForContentLayer(LayerImpl* layerImpl)
void LayerTreeHostImpl::setRootLayer(scoped_ptr<LayerImpl> layer)
{
m_rootLayerImpl = layer.Pass();
+ if (m_rootLayerImpl)
+ m_rootLayerImpl->setLayerTreeHostImpl(this);
m_rootScrollLayerImpl = findRootScrollLayer(m_rootLayerImpl.get());
m_currentlyScrollingLayerImpl = 0;
+ setNeedsUpdateDrawProperties();
if (m_rootLayerImpl && m_scrollingLayerIdFromPreviousTree != -1)
m_currentlyScrollingLayerImpl = LayerTreeHostCommon::findLayerInSubtree(m_rootLayerImpl.get(), m_scrollingLayerIdFromPreviousTree);
@@ -961,6 +987,7 @@ scoped_ptr<LayerImpl> LayerTreeHostImpl::detachLayerTree()
m_scrollingLayerIdFromPreviousTree = m_currentlyScrollingLayerImpl ? m_currentlyScrollingLayerImpl->id() : -1;
m_currentlyScrollingLayerImpl = 0;
m_renderSurfaceLayerList.clear();
+ setNeedsUpdateDrawProperties();
return m_rootLayerImpl.Pass();
}
@@ -1095,9 +1122,8 @@ void LayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, float
float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.pageScaleFactor();
m_pinchZoomViewport.setPageScaleFactorAndLimits(pageScaleFactor, minPageScaleFactor, maxPageScaleFactor);
- if (!m_settings.pageScalePinchZoomEnabled) {
- if (pageScaleChange != 1)
- adjustScrollsForPageScaleChange(m_rootScrollLayerImpl, pageScaleChange);
+ if (!m_settings.pageScalePinchZoomEnabled && pageScaleChange != 1) {
danakj 2012/12/06 19:12:10 don't need the {} now
+ adjustScrollsForPageScaleChange(m_rootScrollLayerImpl, pageScaleChange);
}
// Clamp delta to limits and refresh display matrix.
@@ -1166,8 +1192,8 @@ bool LayerTreeHostImpl::ensureRenderSurfaceLayerList()
// 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.
- m_renderSurfaceLayerList.clear();
- calculateRenderSurfaceLayerList(m_renderSurfaceLayerList);
+ setNeedsUpdateDrawProperties();
danakj 2012/12/06 19:12:10 why the set here?
enne (OOO) 2012/12/06 19:25:42 LayerTreeHostImplTest.clearRootRenderSurfaceAndScr
danakj 2012/12/06 19:56:22 it's a bug to clear the render surface and not set
enne (OOO) 2012/12/06 20:37:51 It kind of is now. I could change the test to cle
+ updateDrawProperties();
return m_renderSurfaceLayerList.size();
}
@@ -1220,6 +1246,7 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp
// events are already in local layer coordinates so we can just apply them directly.
m_scrollDeltaIsInViewportSpace = (type == Gesture);
m_numImplThreadScrolls++;
+ setNeedsUpdateDrawProperties();
return ScrollStarted;
}
return ScrollIgnored;
@@ -1332,6 +1359,7 @@ bool LayerTreeHostImpl::scrollBy(const gfx::Point& viewportPoint,
if (didScroll) {
m_client->setNeedsCommitOnImplThread();
m_client->setNeedsRedrawOnImplThread();
+ setNeedsUpdateDrawProperties();
}
return didScroll;
}
@@ -1387,6 +1415,7 @@ void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor
m_client->setNeedsCommitOnImplThread();
m_client->setNeedsRedrawOnImplThread();
+ setNeedsUpdateDrawProperties();
}
void LayerTreeHostImpl::pinchGestureEnd()
@@ -1523,6 +1552,7 @@ void LayerTreeHostImpl::animatePageScale(base::TimeTicks time)
nextScroll.Scale(m_pinchZoomViewport.pageScaleFactor());
m_rootScrollLayerImpl->scrollBy(nextScroll - scrollTotal);
m_client->setNeedsRedrawOnImplThread();
+ setNeedsUpdateDrawProperties();
if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) {
m_pageScaleAnimation.reset();
@@ -1545,8 +1575,10 @@ void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time
if (!events->empty())
m_client->postAnimationEventsToMainThreadOnImplThread(events.Pass(), wallClockTime);
- if (didAnimate)
+ if (didAnimate) {
m_client->setNeedsRedrawOnImplThread();
+ setNeedsUpdateDrawProperties();
+ }
setBackgroundTickingEnabled(!m_visible && m_needsAnimateLayers);
}
@@ -1580,6 +1612,7 @@ void LayerTreeHostImpl::clearRenderSurfaces()
{
clearRenderSurfacesOnLayerImplRecursive(m_rootLayerImpl.get());
m_renderSurfaceLayerList.clear();
+ setNeedsUpdateDrawProperties();
}
std::string LayerTreeHostImpl::layerTreeAsText() const

Powered by Google App Engine
This is Rietveld 408576698