| Index: cc/resources/picture_pile.cc
|
| diff --git a/cc/resources/picture_pile.cc b/cc/resources/picture_pile.cc
|
| index 402d1a530a12421f313c471396731ae3ed23adf7..641af5fe0ed4ef4c3e67cc53d9b2261275e68527 100644
|
| --- a/cc/resources/picture_pile.cc
|
| +++ b/cc/resources/picture_pile.cc
|
| @@ -149,7 +149,9 @@ float ClusterTiles(const std::vector<gfx::Rect>& invalid_tiles,
|
|
|
| namespace cc {
|
|
|
| -PicturePile::PicturePile() : is_suitable_for_gpu_rasterization_(true) {
|
| +PicturePile::PicturePile()
|
| + : is_suitable_for_gpu_rasterization_(true),
|
| + pixel_record_distance_(kPixelDistanceToRecord) {
|
| }
|
|
|
| PicturePile::~PicturePile() {
|
| @@ -180,11 +182,7 @@ bool PicturePile::UpdateAndExpandInvalidation(
|
| }
|
|
|
| gfx::Rect interest_rect = visible_layer_rect;
|
| - interest_rect.Inset(
|
| - -kPixelDistanceToRecord,
|
| - -kPixelDistanceToRecord,
|
| - -kPixelDistanceToRecord,
|
| - -kPixelDistanceToRecord);
|
| + interest_rect.Inset(-pixel_record_distance_, -pixel_record_distance_);
|
| recorded_viewport_ = interest_rect;
|
| recorded_viewport_.Intersect(gfx::Rect(tiling_size()));
|
|
|
| @@ -385,23 +383,31 @@ bool PicturePile::UpdateAndExpandInvalidation(
|
| for (auto& it : picture_map_)
|
| updated = it.second.Invalidate(frame_number) || updated;
|
| } else {
|
| - // Expand invalidation that is outside tiles that intersect the interest
|
| - // rect. These tiles are no longer valid and should be considerered fully
|
| - // invalid, so we can know to not keep around raster tiles that intersect
|
| - // with these recording tiles.
|
| + // Expand invalidation that is on tiles that aren't in the interest rect and
|
| + // will not be re-recorded below. These tiles are no longer valid and should
|
| + // be considerered fully invalid, so we can know to not keep around raster
|
| + // tiles that intersect with these recording tiles.
|
| Region invalidation_expanded_to_full_tiles;
|
|
|
| for (Region::Iterator i(*invalidation); i.has_rect(); i.next()) {
|
| gfx::Rect invalid_rect = i.rect();
|
|
|
| - gfx::Rect invalid_rect_outside_interest_rect_tiles = invalid_rect;
|
| + // This rect covers the bounds (excluding borders) of all tiles whose
|
| + // bounds (including borders) touch the |interest_rect|. This matches
|
| + // the iteration of the |invalid_rect| below which includes borders when
|
| + // calling Invalidate() on pictures.
|
| + gfx::Rect invalid_rect_outside_interest_rect_tiles =
|
| + tiling_.ExpandRectToTileBounds(invalid_rect);
|
| + // We subtract the |interest_rect_over_tiles| which represents the bounds
|
| + // of tiles that will be re-recorded below. This matches the iteration of
|
| + // |interest_rect| below which includes borders.
|
| // TODO(danakj): We should have a Rect-subtract-Rect-to-2-rects operator
|
| // instead of using Rect::Subtract which gives you the bounding box of the
|
| // subtraction.
|
| invalid_rect_outside_interest_rect_tiles.Subtract(
|
| interest_rect_over_tiles);
|
| - invalidation_expanded_to_full_tiles.Union(tiling_.ExpandRectToTileBounds(
|
| - invalid_rect_outside_interest_rect_tiles));
|
| + invalidation_expanded_to_full_tiles.Union(
|
| + invalid_rect_outside_interest_rect_tiles);
|
|
|
| // Split this inflated invalidation across tile boundaries and apply it
|
| // to all tiles that it touches.
|
|
|