| Index: cc/layers/picture_layer_impl.cc
|
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
|
| index e7512a561fd2dbbe75dc69e1596051e37923a851..cb8141b66b83d56a7f334ef4cdbaea4717d172f2 100644
|
| --- a/cc/layers/picture_layer_impl.cc
|
| +++ b/cc/layers/picture_layer_impl.cc
|
| @@ -62,7 +62,6 @@ PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, int id)
|
| : LayerImpl(tree_impl, id),
|
| twin_layer_(NULL),
|
| pile_(PicturePileImpl::Create()),
|
| - is_mask_(false),
|
| ideal_page_scale_(0.f),
|
| ideal_device_scale_(0.f),
|
| ideal_source_scale_(0.f),
|
| @@ -114,7 +113,6 @@ void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) {
|
| layer_impl->twin_layer_ = NULL;
|
| twin_layer_ = NULL;
|
|
|
| - layer_impl->SetIsMask(is_mask_);
|
| layer_impl->pile_ = pile_;
|
|
|
| // Tilings would be expensive to push, so we swap.
|
| @@ -590,7 +588,7 @@ scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling,
|
| // memory savings that we can get. Note that we don't handle solid color
|
| // masks, so we shouldn't bother analyzing those.
|
| // Bugs: crbug.com/397198, crbug.com/396908
|
| - if (!is_mask_)
|
| + if (!pile_->is_mask())
|
| flags = Tile::USE_PICTURE_ANALYSIS;
|
|
|
| return layer_tree_impl()->tile_manager()->CreateTile(
|
| @@ -649,16 +647,18 @@ int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const {
|
|
|
| gfx::Size PictureLayerImpl::CalculateTileSize(
|
| const gfx::Size& content_bounds) const {
|
| - if (is_mask_) {
|
| - int max_size = layer_tree_impl()->MaxTextureSize();
|
| - return gfx::Size(
|
| - std::min(max_size, content_bounds.width()),
|
| - std::min(max_size, content_bounds.height()));
|
| - }
|
| -
|
| int max_texture_size =
|
| layer_tree_impl()->resource_provider()->max_texture_size();
|
|
|
| + if (pile_->is_mask()) {
|
| + // Masks are not tiled, so if we can't cover the whole mask with one tile,
|
| + // don't make any tiles at all. Returning an empty size signals this.
|
| + if (content_bounds.width() > max_texture_size ||
|
| + content_bounds.height() > max_texture_size)
|
| + return gfx::Size();
|
| + return content_bounds;
|
| + }
|
| +
|
| gfx::Size default_tile_size = layer_tree_impl()->settings().default_tile_size;
|
| if (layer_tree_impl()->use_gpu_rasterization()) {
|
| // TODO(ernstm) crbug.com/365877: We need a unified way to override the
|
| @@ -760,14 +760,6 @@ void PictureLayerImpl::SyncTiling(
|
| }
|
| }
|
|
|
| -void PictureLayerImpl::SetIsMask(bool is_mask) {
|
| - if (is_mask_ == is_mask)
|
| - return;
|
| - is_mask_ = is_mask;
|
| - if (tilings_)
|
| - tilings_->RemoveAllTiles();
|
| -}
|
| -
|
| ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const {
|
| gfx::Rect content_rect(content_bounds());
|
| float scale = MaximumTilingContentsScale();
|
| @@ -779,8 +771,9 @@ ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const {
|
| return 0;
|
|
|
| // Masks only supported if they fit on exactly one tile.
|
| - if (iter.geometry_rect() != content_rect)
|
| - return 0;
|
| + DCHECK(iter.geometry_rect() == content_rect)
|
| + << "iter rect " << iter.geometry_rect().ToString() << " content rect "
|
| + << content_rect.ToString();
|
|
|
| const ManagedTileState::TileVersion& tile_version =
|
| iter->GetTileVersionForDrawing();
|
| @@ -1196,13 +1189,14 @@ void PictureLayerImpl::RecalculateRasterScales() {
|
| }
|
| }
|
|
|
| - // If this layer would only create one tile at this content scale,
|
| + // If this layer would create zero or one tiles at this content scale,
|
| // don't create a low res tiling.
|
| gfx::Size content_bounds =
|
| gfx::ToCeiledSize(gfx::ScaleSize(bounds(), raster_contents_scale_));
|
| gfx::Size tile_size = CalculateTileSize(content_bounds);
|
| - if (tile_size.width() >= content_bounds.width() &&
|
| - tile_size.height() >= content_bounds.height()) {
|
| + bool tile_covers_bounds = tile_size.width() >= content_bounds.width() &&
|
| + tile_size.height() >= content_bounds.height();
|
| + if (tile_size.IsEmpty() || tile_covers_bounds) {
|
| low_res_raster_contents_scale_ = raster_contents_scale_;
|
| return;
|
| }
|
|
|