| Index: cc/tiles/picture_layer_tiling.cc
|
| diff --git a/cc/tiles/picture_layer_tiling.cc b/cc/tiles/picture_layer_tiling.cc
|
| index 94a36cdde51411ad70db1f54187c9c44e042301d..c5d2013f3d7855e24b87a5fbae9bafcb6155c445 100644
|
| --- a/cc/tiles/picture_layer_tiling.cc
|
| +++ b/cc/tiles/picture_layer_tiling.cc
|
| @@ -34,16 +34,21 @@ PictureLayerTiling::PictureLayerTiling(
|
| WhichTree tree,
|
| float contents_scale,
|
| scoped_refptr<RasterSource> raster_source,
|
| - PictureLayerTilingClient* client)
|
| + PictureLayerTilingClient* client,
|
| + float min_preraster_distance,
|
| + float max_preraster_distance)
|
| : contents_scale_(contents_scale),
|
| client_(client),
|
| tree_(tree),
|
| raster_source_(raster_source),
|
| + min_preraster_distance_(min_preraster_distance),
|
| + max_preraster_distance_(max_preraster_distance),
|
| resolution_(NON_IDEAL_RESOLUTION),
|
| may_contain_low_resolution_tiles_(false),
|
| tiling_data_(gfx::Size(), gfx::Size(), kBorderTexels),
|
| can_require_tiles_for_activation_(false),
|
| current_content_to_screen_scale_(0.f),
|
| + max_skewport_extent_in_screen_space_(0.f),
|
| has_visible_rect_tiles_(false),
|
| has_skewport_rect_tiles_(false),
|
| has_soon_border_rect_tiles_(false),
|
| @@ -589,6 +594,18 @@ void PictureLayerTiling::SetTilePriorityRects(
|
| has_soon_border_rect_tiles_ =
|
| tiling_rect.Intersects(current_soon_border_rect_);
|
| has_eventually_rect_tiles_ = tiling_rect.Intersects(current_eventually_rect_);
|
| +
|
| + // Note that we use the largest skewport extent from the viewport as the
|
| + // "skewport extent". Also note that this math can't produce negative numbers,
|
| + // since skewport.Contains(visible_rect) is always true.
|
| + max_skewport_extent_in_screen_space_ =
|
| + current_content_to_screen_scale_ *
|
| + std::max(std::max(current_visible_rect_.x() - current_skewport_rect_.x(),
|
| + current_skewport_rect_.right() -
|
| + current_visible_rect_.right()),
|
| + std::max(current_visible_rect_.y() - current_skewport_rect_.y(),
|
| + current_skewport_rect_.bottom() -
|
| + current_visible_rect_.bottom()));
|
| }
|
|
|
| void PictureLayerTiling::SetLiveTilesRect(
|
| @@ -778,9 +795,17 @@ PrioritizedTile PictureLayerTiling::MakePrioritizedTile(
|
| 1.f / tile->contents_scale())
|
| .ToString();
|
|
|
| - return PrioritizedTile(tile, this,
|
| - ComputePriorityForTile(tile, priority_rect_type),
|
| - IsTileOccluded(tile));
|
| + const auto& tile_priority = ComputePriorityForTile(tile, priority_rect_type);
|
| + // Note that TileManager will consider this flag but may rasterize the tile
|
| + // anyway (if tile is required for activation for example). We should process
|
| + // the tile for images only if it's further than half of the skewport extent.
|
| + bool process_for_images_only =
|
| + tile_priority.distance_to_visible > min_preraster_distance_ &&
|
| + (tile_priority.distance_to_visible > max_preraster_distance_ ||
|
| + tile_priority.distance_to_visible >
|
| + 0.5f * max_skewport_extent_in_screen_space_);
|
| + return PrioritizedTile(tile, this, tile_priority, IsTileOccluded(tile),
|
| + process_for_images_only);
|
| }
|
|
|
| std::map<const Tile*, PrioritizedTile>
|
|
|