summaryrefslogtreecommitdiffstats
path: root/cc/playback
diff options
context:
space:
mode:
authorpkasting <pkasting@chromium.org>2015-12-11 20:27:43 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-12 04:28:29 +0000
commit03447cc3e0e71bb1b85ce6871794f887fc313fb7 (patch)
tree17dffdead12b58a725acc18c771dc17e42d81bff /cc/playback
parent8129793d721f5b14bc53546c519e2e528b835640 (diff)
downloadchromium_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.cc31
-rw-r--r--cc/playback/compositing_display_item.h7
-rw-r--r--cc/playback/display_item_list_unittest.cc2
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);