Index: cc/layers/picture_layer_impl.cc |
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
index 94c3d201639d0dd90a29545ba18ca067f43edd8a..bca9015f96eb15290e2b6b60f2aea89955e03bea 100644 |
--- a/cc/layers/picture_layer_impl.cc |
+++ b/cc/layers/picture_layer_impl.cc |
@@ -56,7 +56,9 @@ PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, int id) |
should_update_tile_priorities_(false), |
should_use_low_res_tiling_(tree_impl->settings().create_low_res_tiling), |
use_gpu_rasterization_(false), |
- layer_needs_to_register_itself_(true) {} |
+ layer_needs_to_register_itself_(true), |
+ required_for_activation_tile_needs_raster_count_(0u) { |
+} |
PictureLayerImpl::~PictureLayerImpl() { |
if (!layer_needs_to_register_itself_) |
@@ -395,6 +397,7 @@ void PictureLayerImpl::UpdateTilePriorities() { |
contents_scale_x(), |
current_frame_time_in_seconds); |
+ required_for_activation_tile_needs_raster_count_ = 0u; |
if (layer_tree_impl()->IsPendingTree()) |
MarkVisibleResourcesAsRequired(); |
@@ -402,6 +405,18 @@ void PictureLayerImpl::UpdateTilePriorities() { |
layer_tree_impl()->DidModifyTilePriorities(); |
} |
+void PictureLayerImpl::NotifyTileInitialized(const Tile* tile) { |
+ if (layer_tree_impl()->IsActiveTree()) { |
+ DCHECK_EQ(0u, required_for_activation_tile_needs_raster_count_); |
+ return; |
+ } |
+ |
+ if (tile->required_for_activation()) { |
+ DCHECK_GT(required_for_activation_tile_needs_raster_count_, 0u); |
+ --required_for_activation_tile_needs_raster_count_; |
+ } |
+} |
+ |
void PictureLayerImpl::DidBecomeActive() { |
LayerImpl::DidBecomeActive(); |
tilings_->DidBecomeActive(); |
@@ -726,7 +741,7 @@ ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const { |
return tile_version.get_resource_id(); |
} |
-void PictureLayerImpl::MarkVisibleResourcesAsRequired() const { |
+void PictureLayerImpl::MarkVisibleResourcesAsRequired() { |
DCHECK(layer_tree_impl()->IsPendingTree()); |
DCHECK(!layer_tree_impl()->needs_update_draw_properties()); |
DCHECK(ideal_contents_scale_); |
@@ -834,7 +849,7 @@ bool PictureLayerImpl::MarkVisibleTilesAsRequired( |
const PictureLayerTiling* optional_twin_tiling, |
float contents_scale, |
const gfx::Rect& rect, |
- const Region& missing_region) const { |
+ const Region& missing_region) { |
bool twin_had_missing_tile = false; |
for (PictureLayerTiling::CoverageIterator iter(tiling, |
contents_scale, |
@@ -861,8 +876,10 @@ bool PictureLayerImpl::MarkVisibleTilesAsRequired( |
continue; |
} |
} |
- |
+ DCHECK(!tile->required_for_activation()); |
tile->MarkRequiredForActivation(); |
+ if (!tile->IsReadyToDraw()) |
+ ++required_for_activation_tile_needs_raster_count_; |
} |
return twin_had_missing_tile; |
} |