| Index: cc/playback/compositing_display_item.cc
|
| diff --git a/cc/playback/compositing_display_item.cc b/cc/playback/compositing_display_item.cc
|
| index b9cd395e62fae475ff7e017ef7a37bbf2f1886a1..3c6e8b0ae75fc5f333dc4fb78e356d4a7d0d5ae1 100644
|
| --- a/cc/playback/compositing_display_item.cc
|
| +++ b/cc/playback/compositing_display_item.cc
|
| @@ -19,11 +19,14 @@
|
|
|
| namespace cc {
|
|
|
| -CompositingDisplayItem::CompositingDisplayItem(uint8_t alpha,
|
| - SkXfermode::Mode xfermode,
|
| - SkRect* bounds,
|
| - skia::RefPtr<SkColorFilter> cf) {
|
| - SetNew(alpha, xfermode, bounds, std::move(cf));
|
| +CompositingDisplayItem::CompositingDisplayItem(
|
| + uint8_t alpha,
|
| + SkXfermode::Mode xfermode,
|
| + SkRect* bounds,
|
| + skia::RefPtr<SkColorFilter> cf,
|
| + bool lcd_text_requires_opaque_layer) {
|
| + SetNew(alpha, xfermode, bounds, std::move(cf),
|
| + lcd_text_requires_opaque_layer);
|
| }
|
|
|
| CompositingDisplayItem::CompositingDisplayItem(
|
| @@ -47,7 +50,11 @@ CompositingDisplayItem::CompositingDisplayItem(
|
| filter = skia::AdoptRef(static_cast<SkColorFilter*>(flattenable));
|
| }
|
|
|
| - SetNew(alpha, xfermode, bounds.get(), std::move(filter));
|
| + bool lcd_text_requires_opaque_layer =
|
| + details.lcd_text_requires_opaque_layer();
|
| +
|
| + SetNew(alpha, xfermode, bounds.get(), std::move(filter),
|
| + lcd_text_requires_opaque_layer);
|
| }
|
|
|
| CompositingDisplayItem::~CompositingDisplayItem() {
|
| @@ -56,13 +63,15 @@ CompositingDisplayItem::~CompositingDisplayItem() {
|
| void CompositingDisplayItem::SetNew(uint8_t alpha,
|
| SkXfermode::Mode xfermode,
|
| SkRect* bounds,
|
| - skia::RefPtr<SkColorFilter> cf) {
|
| + skia::RefPtr<SkColorFilter> cf,
|
| + bool lcd_text_requires_opaque_layer) {
|
| alpha_ = alpha;
|
| xfermode_ = xfermode;
|
| has_bounds_ = !!bounds;
|
| if (bounds)
|
| bounds_ = SkRect(*bounds);
|
| color_filter_ = std::move(cf);
|
| + lcd_text_requires_opaque_layer_ = lcd_text_requires_opaque_layer;
|
| }
|
|
|
| void CompositingDisplayItem::ToProtobuf(proto::DisplayItem* proto) const {
|
| @@ -80,6 +89,8 @@ void CompositingDisplayItem::ToProtobuf(proto::DisplayItem* proto) const {
|
| if (data->size() > 0)
|
| details->set_color_filter(data->data(), data->size());
|
| }
|
| +
|
| + details->set_lcd_text_requires_opaque_layer(lcd_text_requires_opaque_layer_);
|
| }
|
|
|
| void CompositingDisplayItem::Raster(
|
| @@ -90,7 +101,11 @@ void CompositingDisplayItem::Raster(
|
| paint.setXfermodeMode(xfermode_);
|
| paint.setAlpha(alpha_);
|
| paint.setColorFilter(color_filter_.get());
|
| - canvas->saveLayer(has_bounds_ ? &bounds_ : nullptr, &paint);
|
| + const SkRect* bounds = has_bounds_ ? &bounds_ : nullptr;
|
| + if (lcd_text_requires_opaque_layer_)
|
| + canvas->saveLayer(bounds, &paint);
|
| + else
|
| + canvas->saveLayerPreserveLCDTextRequests(bounds, &paint);
|
| }
|
|
|
| void CompositingDisplayItem::AsValueInto(
|
|
|