Index: cc/layers/picture_layer_impl.cc |
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
index aed6dc10cd2f5ea8bac3f09109bcbaa1f5d0d87f..87414c1050798968d1084846bc344f10cb1484ed 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_(0) { |
+} |
PictureLayerImpl::~PictureLayerImpl() { |
if (!layer_needs_to_register_itself_) |
@@ -405,6 +407,7 @@ void PictureLayerImpl::UpdateTilePriorities() { |
contents_scale_x(), |
current_frame_time_in_seconds); |
+ uninitialized_tiles_required_for_activation_count_ = 0; |
if (layer_tree_impl()->IsPendingTree()) |
MarkVisibleResourcesAsRequired(); |
@@ -417,6 +420,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(0, 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_, 0); |
+ --uninitialized_tiles_required_for_activation_count_; |
reveman
2014/05/01 14:17:00
what if 2 different versions of the tile have been
vmpstr
2014/05/01 17:42:13
That's a good point, this count doesn't account fo
|
+ } |
} |
} |
@@ -743,7 +753,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_); |
@@ -851,7 +861,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, |
@@ -878,8 +888,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; |
} |