Index: cc/resources/picture_layer_tiling.cc |
diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc |
index 3d132e162c7aca32e1b41ff875808962933fab50..3d05ee656cf04751de8a3b5170a912563e15a873 100644 |
--- a/cc/resources/picture_layer_tiling.cc |
+++ b/cc/resources/picture_layer_tiling.cc |
@@ -533,10 +533,14 @@ void PictureLayerTiling::UpdateTilePriorities( |
tile->set_is_occluded(tree, is_occluded); |
} |
- // Assign soon priority to skewport tiles. |
+ // Assign soon priority to skewport tiles. Include borders to also prioritize |
+ // tiles whose borders are in the skewport, and to exclude tiles whose borders |
+ // are in the visible rect, since those are handled above. |
has_skewport_rect_tiles_ = false; |
- for (TilingData::DifferenceIterator iter( |
- &tiling_data_, skewport, visible_rect_in_content_space); |
+ for (TilingData::DifferenceIterator iter(&tiling_data_, |
+ skewport, |
+ visible_rect_in_content_space, |
+ include_borders); |
iter; |
++iter) { |
TileMap::iterator find = tiles_.find(iter.index()); |
@@ -556,10 +560,12 @@ void PictureLayerTiling::UpdateTilePriorities( |
tile->SetPriority(tree, priority); |
} |
- // Assign eventually priority to interest rect tiles. |
+ // Assign eventually priority to interest rect tiles. Include borders to |
+ // also prioritize tiles whose borders are in the eventually rect and exclude |
+ // tiles whose borders are in the skewport, as those are handled above. |
has_eventually_rect_tiles_ = false; |
for (TilingData::DifferenceIterator iter( |
- &tiling_data_, eventually_rect, skewport); |
+ &tiling_data_, eventually_rect, skewport, include_borders); |
iter; |
++iter) { |
TileMap::iterator find = tiles_.find(iter.index()); |
@@ -579,13 +585,15 @@ void PictureLayerTiling::UpdateTilePriorities( |
tile->SetPriority(tree, priority); |
} |
- // Upgrade the priority on border tiles to be SOON. |
+ // Upgrade the priority on border tiles to be SOON. Include borders to include |
+ // tiles whose borders are in the soon_border_rect and exclude those with |
+ // borders in the skewport, as those are handled above. |
gfx::Rect soon_border_rect = visible_rect_in_content_space; |
float border = kSoonBorderDistanceInScreenPixels / content_to_screen_scale; |
soon_border_rect.Inset(-border, -border, -border, -border); |
has_soon_border_rect_tiles_ = false; |
for (TilingData::DifferenceIterator iter( |
- &tiling_data_, soon_border_rect, skewport); |
+ &tiling_data_, soon_border_rect, skewport, include_borders); |
iter; |
++iter) { |
TileMap::iterator find = tiles_.find(iter.index()); |
@@ -616,10 +624,14 @@ void PictureLayerTiling::SetLiveTilesRect( |
if (live_tiles_rect_ == new_live_tiles_rect) |
return; |
- // Iterate to delete all tiles outside of our new live_tiles rect. |
+ // Iterate to delete all tiles outside of our new live_tiles rect. Iterate |
+ // without borders to avoid including tiles that have only border pixels |
+ // outside the new live tiles rect. |
+ bool include_borders = false; |
for (TilingData::DifferenceIterator iter(&tiling_data_, |
live_tiles_rect_, |
- new_live_tiles_rect); |
+ new_live_tiles_rect, |
+ include_borders); |
iter; |
++iter) { |
TileMapKey key(iter.index()); |
@@ -635,9 +647,12 @@ void PictureLayerTiling::SetLiveTilesRect( |
const PictureLayerTiling* twin_tiling = client_->GetTwinTiling(this); |
// Iterate to allocate new tiles for all regions with newly exposed area. |
+ // Do the iteration without borders to avoid adding tiles that already exist |
+ // for tiles whose border pixels are in the new live tiles rect. |
for (TilingData::DifferenceIterator iter(&tiling_data_, |
new_live_tiles_rect, |
- live_tiles_rect_); |
+ live_tiles_rect_, |
+ include_borders); |
iter; |
++iter) { |
TileMapKey key(iter.index()); |