diff options
author | pkasting <pkasting@chromium.org> | 2015-12-11 20:27:43 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-12 04:28:29 +0000 |
commit | 03447cc3e0e71bb1b85ce6871794f887fc313fb7 (patch) | |
tree | 17dffdead12b58a725acc18c771dc17e42d81bff /cc/playback | |
parent | 8129793d721f5b14bc53546c519e2e528b835640 (diff) | |
download | chromium_src-03447cc3e0e71bb1b85ce6871794f887fc313fb7.zip chromium_src-03447cc3e0e71bb1b85ce6871794f887fc313fb7.tar.gz chromium_src-03447cc3e0e71bb1b85ce6871794f887fc313fb7.tar.bz2 |
Allow background tab titles to use LCD AA.
This involves plumbing an additional flag through CompositingRecorder and
CompositingDisplayItem to use the new Skia functionality just added for this.
BUG=none
TEST=Titles on background tabs should use LCD antialiasing.
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1506203008
Cr-Commit-Position: refs/heads/master@{#364903}
Diffstat (limited to 'cc/playback')
-rw-r--r-- | cc/playback/compositing_display_item.cc | 31 | ||||
-rw-r--r-- | cc/playback/compositing_display_item.h | 7 | ||||
-rw-r--r-- | cc/playback/display_item_list_unittest.cc | 2 |
3 files changed, 29 insertions, 11 deletions
diff --git a/cc/playback/compositing_display_item.cc b/cc/playback/compositing_display_item.cc index b9cd395..3c6e8b0 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( diff --git a/cc/playback/compositing_display_item.h b/cc/playback/compositing_display_item.h index 9512189..e0dd8701 100644 --- a/cc/playback/compositing_display_item.h +++ b/cc/playback/compositing_display_item.h @@ -23,7 +23,8 @@ class CC_EXPORT CompositingDisplayItem : public DisplayItem { CompositingDisplayItem(uint8_t alpha, SkXfermode::Mode xfermode, SkRect* bounds, - skia::RefPtr<SkColorFilter> color_filter); + skia::RefPtr<SkColorFilter> color_filter, + bool lcd_text_requires_opaque_layer); explicit CompositingDisplayItem(const proto::DisplayItem& proto); ~CompositingDisplayItem() override; @@ -42,13 +43,15 @@ class CC_EXPORT CompositingDisplayItem : public DisplayItem { void SetNew(uint8_t alpha, SkXfermode::Mode xfermode, SkRect* bounds, - skia::RefPtr<SkColorFilter> color_filter); + skia::RefPtr<SkColorFilter> color_filter, + bool lcd_text_requires_opaque_layer); uint8_t alpha_; SkXfermode::Mode xfermode_; bool has_bounds_; SkRect bounds_; skia::RefPtr<SkColorFilter> color_filter_; + bool lcd_text_requires_opaque_layer_; }; class CC_EXPORT EndCompositingDisplayItem : public DisplayItem { diff --git a/cc/playback/display_item_list_unittest.cc b/cc/playback/display_item_list_unittest.cc index b56a79d..e1e2bd2 100644 --- a/cc/playback/display_item_list_unittest.cc +++ b/cc/playback/display_item_list_unittest.cc @@ -185,7 +185,7 @@ TEST(DisplayItemListTest, SerializeCompositingItem) { skia::RefPtr<SkColorFilter> filter = skia::AdoptRef( SkColorFilter::CreateLightingFilter(SK_ColorRED, SK_ColorGREEN)); list->CreateAndAppendItem<CompositingDisplayItem>( - kVisualRect, 150, SkXfermode::Mode::kDst_Mode, nullptr, filter); + kVisualRect, 150, SkXfermode::Mode::kDst_Mode, nullptr, filter, false); // Build the second DrawingDisplayItem. AppendSecondSerializationTestPicture(list, layer_size); |