Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(906)

Unified Diff: cc/resources/picture_layer_tiling.cc

Issue 505913003: cc: Remove and Create the correct tiles when resizing live tiles rect (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: livetiles: . Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698