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

Unified Diff: cc/layer_tree_host_impl.cc

Issue 11879012: cc: Redraw incomplete frames when new texture uploads finish (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@decouple_draw3b
Patch Set: Add trace events and isImplThread DCHECKS Created 7 years, 11 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: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index e6b9ac99e0d49ae673f001b56a4ce6ad514d74aa..85fa620bfea3bce3215975e30e213a39a03649b5 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -464,9 +464,6 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
// in the future.
bool drawFrame = true;
- // Make sure we have the most recent info regarding which textures have been uploaded.
- checkForCompletedSetPixels();
-
LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList);
for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLayerList); it != end; ++it) {
RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->renderSurface()->renderPassId();
@@ -714,6 +711,12 @@ void LayerTreeHostImpl::ScheduleManageTiles()
m_client->setNeedsManageTilesOnImplThread();
}
+void LayerTreeHostImpl::DidUploadVisibleHighResolutionTile()
+{
+ if (m_client)
+ m_client->setNeedsRedrawOnImplThread();
nduca 2013/01/16 04:09:47 see now i dont get why this one does setNeedsRedra
brianderson 2013/01/16 20:12:22 In this case, we know we have a better frame to dr
+}
+
bool LayerTreeHostImpl::shouldClearRootRenderPass() const
{
return m_settings.shouldClearRootRenderPass;
@@ -837,7 +840,13 @@ bool LayerTreeHostImpl::swapBuffers()
DCHECK(m_renderer);
m_fpsCounter->markEndOfFrame();
- return m_renderer->swapBuffers();
+ bool result = m_renderer->swapBuffers();
+
+ if (!activeTree()->AreVisibleResourcesReady()) {
nduca 2013/01/16 04:09:47 I'm confused, why are we checking this again here?
brianderson 2013/01/16 20:12:22 This checks if the active tree just drawn was inco
+ m_client->setNeedsRedrawOnVisibleTextureUploadOnImplThread();
+ }
+
+ return result;
}
const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const
@@ -906,6 +915,8 @@ void LayerTreeHostImpl::createPendingTree()
m_client->onHasPendingTreeStateChanged(pendingTree());
}
+// This function should not be called from within a draw, as it can trigger
+// as spurious draw if a new visible tile gets upload.
void LayerTreeHostImpl::checkForCompletedSetPixels()
{
if (m_tileManager)
@@ -917,8 +928,6 @@ void LayerTreeHostImpl::activatePendingTreeIfNeeded()
if (!pendingTree())
return;
- checkForCompletedSetPixels();
-
// It's always fine to activate to an empty tree. Otherwise, only
// activate once all visible resources in pending tree are ready.
if (activeTree()->RootLayer() &&

Powered by Google App Engine
This is Rietveld 408576698