Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index d384ea716996f05d7171f3ddb04a0a1f284d1c6a..ccd69d2ea14e53fa16ac3616a0632d1d3ec1c030 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -163,6 +163,7 @@ LayerTreeHostImpl::LayerTreeHostImpl( |
did_lock_scrolling_layer_(false), |
should_bubble_scrolls_(false), |
wheel_scrolling_(false), |
+ manage_tiles_needed_(false), |
root_layer_scroll_offset_delegate_(NULL), |
settings_(settings), |
visible_(true), |
@@ -238,6 +239,8 @@ void LayerTreeHostImpl::CommitComplete() { |
if (settings_.impl_side_painting) { |
pending_tree_->set_needs_update_draw_properties(); |
pending_tree_->UpdateDrawProperties(); |
+ // Start working on newly created tiles immediately if needed. |
+ ManageTiles(); |
} else { |
active_tree_->set_needs_update_draw_properties(); |
} |
@@ -292,7 +295,11 @@ void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time, |
} |
void LayerTreeHostImpl::ManageTiles() { |
- DCHECK(tile_manager_); |
+ if (!tile_manager_) |
+ return; |
+ if (!manage_tiles_needed_) |
+ return; |
+ manage_tiles_needed_ = false; |
tile_manager_->ManageTiles(); |
size_t memory_required_bytes; |
@@ -970,17 +977,13 @@ void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( |
policy.priority_cutoff_when_visible : |
policy.priority_cutoff_when_not_visible); |
tile_manager_->SetGlobalState(new_state); |
+ manage_tiles_needed_ = true; |
} |
bool LayerTreeHostImpl::HasImplThread() const { |
return proxy_->HasImplThread(); |
} |
-void LayerTreeHostImpl::ScheduleManageTiles() { |
- if (client_) |
- client_->SetNeedsManageTilesOnImplThread(); |
-} |
- |
void LayerTreeHostImpl::DidInitializeVisibleTile() { |
// TODO(reveman): Determine tiles that changed and only damage |
// what's necessary. |
@@ -1338,6 +1341,9 @@ bool LayerTreeHostImpl::ActivatePendingTreeIfNeeded() { |
// TODO(enne): This needs to be moved somewhere else (post-animate?) |
pending_tree_->UpdateDrawProperties(); |
+ // Note: This will likely cause ManageTiles to be needed. However, |
+ // it is only out of date as far as the last commit or the last draw. |
+ // For performance reasons, don't call ManageTiles again here. |
TRACE_EVENT_ASYNC_STEP1( |
"cc", |
@@ -2231,6 +2237,7 @@ void LayerTreeHostImpl::SetTreePriority(TreePriority priority) { |
new_state.tree_priority = priority; |
tile_manager_->SetGlobalState(new_state); |
+ manage_tiles_needed_ = true; |
} |
void LayerTreeHostImpl::ResetCurrentFrameTimeForNextFrame() { |