| Index: cc/layers/picture_layer_impl.cc
|
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
|
| index ee0a6c8495917a0e78ad3159bf8b23aab94dbc57..5012061c28551ab22bfccde0fce4d8b88c0867ce 100644
|
| --- a/cc/layers/picture_layer_impl.cc
|
| +++ b/cc/layers/picture_layer_impl.cc
|
| @@ -92,7 +92,7 @@ namespace cc {
|
|
|
| PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl,
|
| int id,
|
| - bool is_mask)
|
| + Layer::LayerMaskType mask_type)
|
| : LayerImpl(tree_impl, id),
|
| twin_layer_(nullptr),
|
| tilings_(CreatePictureLayerTilingSet()),
|
| @@ -107,7 +107,7 @@ PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl,
|
| low_res_raster_contents_scale_(0.f),
|
| was_screen_space_transform_animating_(false),
|
| only_used_low_res_last_append_quads_(false),
|
| - is_mask_(is_mask),
|
| + mask_type_(mask_type),
|
| nearest_neighbor_(false),
|
| is_directly_composited_image_(false) {
|
| layer_tree_impl()->RegisterPictureLayerImpl(this);
|
| @@ -125,12 +125,12 @@ const char* PictureLayerImpl::LayerTypeAsString() const {
|
|
|
| std::unique_ptr<LayerImpl> PictureLayerImpl::CreateLayerImpl(
|
| LayerTreeImpl* tree_impl) {
|
| - return PictureLayerImpl::Create(tree_impl, id(), is_mask_);
|
| + return PictureLayerImpl::Create(tree_impl, id(), mask_type());
|
| }
|
|
|
| void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) {
|
| PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer);
|
| - DCHECK_EQ(layer_impl->is_mask_, is_mask_);
|
| + DCHECK_EQ(layer_impl->mask_type_, mask_type_);
|
|
|
| LayerImpl::PushPropertiesTo(base_layer);
|
|
|
| @@ -694,7 +694,11 @@ std::unique_ptr<Tile> PictureLayerImpl::CreateTile(
|
|
|
| // We don't handle solid color masks, so we shouldn't bother analyzing those.
|
| // Otherwise, always analyze to maximize memory savings.
|
| - if (!is_mask_)
|
| + // TODO(sunxd): the condition should be (mask_type_ ==
|
| + // Layer::LayerMaskType::NOT_MASK
|
| + // || (layer_tree_impl()->settings().enable_mask_tiling && mask_type ==
|
| + // Layer::LayerMaskType::MULTI_TEXTURE_MASK)).
|
| + if (mask_type_ == Layer::LayerMaskType::NOT_MASK)
|
| flags = Tile::USE_PICTURE_ANALYSIS;
|
|
|
| if (contents_opaque())
|
| @@ -736,7 +740,11 @@ gfx::Size PictureLayerImpl::CalculateTileSize(
|
| int max_texture_size =
|
| layer_tree_impl()->resource_provider()->max_texture_size();
|
|
|
| - if (is_mask_) {
|
| + // TODO(sunxd): the condition should be mask_type_ == Layer::LayerMaskType::
|
| + // SINGLE_TEXTURE_MASK || (mask_type_ ==
|
| + // Layer::LayerMaskType::MULTI_TEXTURE_MASK &&
|
| + // !layer_tree_impl()->settings().enable_mask_tiling)
|
| + if (mask_type_ != Layer::LayerMaskType::NOT_MASK) {
|
| // Masks are not tiled, so if we can't cover the whole mask with one tile,
|
| // we shouldn't have such a tiling at all.
|
| DCHECK_LE(content_bounds.width(), max_texture_size);
|
| @@ -1174,9 +1182,14 @@ float PictureLayerImpl::MaximumContentsScale() const {
|
| // max_texture_size since they use a single tile for the entire
|
| // tiling. Other layers can have tilings such that dimension * scale
|
| // does not overflow.
|
| + // TODO(sunxd): the condition should be:
|
| + // mask_type_ == Layer::LayerMaskType::SINGLE_TEXTURE_MASK || (mask_type_ ==
|
| + // Layer::LayerMaskType::MULTI_TEXTURE_MASK && !layer_tree_impl()->settings().
|
| + // enable_mask_tiling)
|
| float max_dimension = static_cast<float>(
|
| - is_mask_ ? layer_tree_impl()->resource_provider()->max_texture_size()
|
| - : std::numeric_limits<int>::max());
|
| + mask_type_ != Layer::LayerMaskType::NOT_MASK
|
| + ? layer_tree_impl()->resource_provider()->max_texture_size()
|
| + : std::numeric_limits<int>::max());
|
| float max_scale_width = max_dimension / bounds().width();
|
| float max_scale_height = max_dimension / bounds().height();
|
| float max_scale = std::min(max_scale_width, max_scale_height);
|
|
|