Index: cc/layers/picture_layer_impl.cc |
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
index a61ed129884335c57cf8ad137a3b2394e3f86181..1af16cfe4890e826a48fac13f687d46c5febec1f 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), |
+ uninitialized_tiles_required_for_activation_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); |
+ uninitialized_tiles_required_for_activation_count_ = 0u; |
if (layer_tree_impl()->IsPendingTree()) |
MarkVisibleResourcesAsRequired(); |
@@ -407,6 +410,13 @@ void PictureLayerImpl::NotifyTileInitialized(const Tile* tile) { |
gfx::RectF layer_damage_rect = |
gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale()); |
AddDamageRect(layer_damage_rect); |
+ |
+ DCHECK_EQ(0u, uninitialized_tiles_required_for_activation_count_); |
+ } else if (layer_tree_impl()->IsPendingTree()) { |
+ if (tile->required_for_activation()) { |
+ DCHECK_GT(uninitialized_tiles_required_for_activation_count_, 0u); |
+ --uninitialized_tiles_required_for_activation_count_; |
+ } |
} |
} |
@@ -733,7 +743,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_); |
@@ -841,7 +851,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, |
@@ -868,8 +878,10 @@ bool PictureLayerImpl::MarkVisibleTilesAsRequired( |
continue; |
} |
} |
- |
+ DCHECK(!tile->required_for_activation()); |
tile->MarkRequiredForActivation(); |
+ if (!tile->IsReadyToDraw()) |
+ ++uninitialized_tiles_required_for_activation_count_; |
} |
return twin_had_missing_tile; |
} |