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 04d0c94d6753ceb03f95d985b60a13def01c2094..b5eeffa72e65ca0106a9d1d9acfd4193e0712607 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -229,7 +229,7 @@ LayerTreeHostImpl::LayerTreeHostImpl( |
gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
id_(id), |
requires_high_res_to_draw_(false), |
- required_for_draw_tile_is_top_of_raster_queue_(false) { |
+ is_likely_to_require_a_draw_(false) { |
DCHECK(proxy_->IsImplThread()); |
DidVisibilityChange(this, visible_); |
animation_registrar_->set_supports_scroll_animations( |
@@ -1199,28 +1199,8 @@ scoped_ptr<RasterTilePriorityQueue> LayerTreeHostImpl::BuildRasterQueue( |
TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildRasterQueue"); |
picture_layer_pairs_.clear(); |
GetPictureLayerImplPairs(&picture_layer_pairs_, true); |
- scoped_ptr<RasterTilePriorityQueue> queue(RasterTilePriorityQueue::Create( |
- picture_layer_pairs_, tree_priority, type)); |
- |
- // Only check whether the top tile is required for draw if we're not building |
- // a required for activation queue. |
- // TODO(vmpstr): Remove side-effects from this function. crbug.com/451147 |
- if (type != RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION) { |
- if (!queue->IsEmpty()) { |
- // Only checking the Top() tile here isn't a definite answer that there is |
- // or isn't something required for draw in this raster queue. It's just a |
- // heuristic to let us hit the common case and proactively tell the |
- // scheduler that we expect to draw within each vsync until we get all the |
- // tiles ready to draw. If we happen to miss a required for draw tile |
- // here, then we will miss telling the scheduler each frame that we intend |
- // to draw so it may make worse scheduling decisions. |
- required_for_draw_tile_is_top_of_raster_queue_ = |
- queue->Top()->required_for_draw(); |
- } else { |
- required_for_draw_tile_is_top_of_raster_queue_ = false; |
- } |
- } |
- return queue; |
+ return RasterTilePriorityQueue::Create(picture_layer_pairs_, tree_priority, |
+ type); |
} |
scoped_ptr<EvictionTilePriorityQueue> LayerTreeHostImpl::BuildEvictionQueue( |
@@ -1233,6 +1213,15 @@ scoped_ptr<EvictionTilePriorityQueue> LayerTreeHostImpl::BuildEvictionQueue( |
return queue; |
} |
+void LayerTreeHostImpl::SetIsLikelyToRequireADraw( |
+ bool is_likely_to_require_a_draw) { |
+ // Proactively tell the scheduler that we expect to draw within each vsync |
+ // until we get all the tiles ready to draw. If we happen to miss a required |
+ // for draw tile here, then we will miss telling the scheduler each frame that |
+ // we intend to draw so it may make worse scheduling decisions. |
+ is_likely_to_require_a_draw_ = is_likely_to_require_a_draw; |
+} |
+ |
const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers() |
const { |
return picture_layers_; |
@@ -1246,7 +1235,7 @@ void LayerTreeHostImpl::NotifyReadyToDraw() { |
// Tiles that are ready will cause NotifyTileStateChanged() to be called so we |
// don't need to schedule a draw here. Just stop WillBeginImplFrame() from |
// causing optimistic requests to draw a frame. |
- required_for_draw_tile_is_top_of_raster_queue_ = false; |
+ is_likely_to_require_a_draw_ = false; |
client_->NotifyReadyToDraw(); |
} |
@@ -1616,10 +1605,10 @@ void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { |
// Cache the begin impl frame interval |
begin_impl_frame_interval_ = args.interval; |
- if (required_for_draw_tile_is_top_of_raster_queue_) { |
- // Optimistically schedule a draw, as a tile required for draw is at the top |
- // of the current raster queue. This will let us expect the tile to complete |
- // and draw it within the impl frame we are beginning now. |
+ if (is_likely_to_require_a_draw_) { |
+ // Optimistically schedule a draw. This will let us expect the tile manager |
+ // to complete its work so that we can draw new tiles within the impl frame |
+ // we are beginning now. |
SetNeedsRedraw(); |
} |
} |