diff options
-rw-r--r-- | cc/blink/web_display_item_list_impl.cc | 11 | ||||
-rw-r--r-- | cc/blink/web_display_item_list_impl.h | 5 | ||||
-rw-r--r-- | cc/resources/compositing_display_item.cc | 18 | ||||
-rw-r--r-- | cc/resources/compositing_display_item.h | 7 |
4 files changed, 36 insertions, 5 deletions
diff --git a/cc/blink/web_display_item_list_impl.cc b/cc/blink/web_display_item_list_impl.cc index 5cbac73..b1f1211 100644 --- a/cc/blink/web_display_item_list_impl.cc +++ b/cc/blink/web_display_item_list_impl.cc @@ -98,12 +98,21 @@ void WebDisplayItemListImpl::appendEndTransparencyItem() { display_item_list_->AppendItem(cc::EndTransparencyDisplayItem::Create()); } +// TODO(pdr): Remove this once the blink-side callers have been removed. void WebDisplayItemListImpl::appendCompositingItem( float opacity, SkXfermode::Mode xfermode, SkColorFilter* color_filter) { + appendCompositingItem(opacity, xfermode, nullptr, color_filter); +} + +void WebDisplayItemListImpl::appendCompositingItem( + float opacity, + SkXfermode::Mode xfermode, + SkRect* bounds, + SkColorFilter* color_filter) { display_item_list_->AppendItem(cc::CompositingDisplayItem::Create( - opacity, xfermode, skia::SharePtr(color_filter))); + opacity, xfermode, bounds, skia::SharePtr(color_filter))); } void WebDisplayItemListImpl::appendEndCompositingItem() { diff --git a/cc/blink/web_display_item_list_impl.h b/cc/blink/web_display_item_list_impl.h index b287704..33b37e0 100644 --- a/cc/blink/web_display_item_list_impl.h +++ b/cc/blink/web_display_item_list_impl.h @@ -50,9 +50,14 @@ class WebDisplayItemListImpl : public blink::WebDisplayItemList { virtual void appendTransparencyItem(float opacity, blink::WebBlendMode blend_mode); virtual void appendEndTransparencyItem(); + // TODO(pdr): Remove this once the blink-side callers have been removed. virtual void appendCompositingItem(float opacity, SkXfermode::Mode, SkColorFilter*); + virtual void appendCompositingItem(float opacity, + SkXfermode::Mode, + SkRect* bounds, + SkColorFilter*); virtual void appendEndCompositingItem(); virtual void appendFilterItem(const blink::WebFilterOperations& filters, const blink::WebFloatRect& bounds); diff --git a/cc/resources/compositing_display_item.cc b/cc/resources/compositing_display_item.cc index ed9cbc1..c33d4ca 100644 --- a/cc/resources/compositing_display_item.cc +++ b/cc/resources/compositing_display_item.cc @@ -15,8 +15,14 @@ namespace cc { CompositingDisplayItem::CompositingDisplayItem(float opacity, SkXfermode::Mode xfermode, + SkRect* bounds, skia::RefPtr<SkColorFilter> cf) - : opacity_(opacity), xfermode_(xfermode), color_filter_(cf) { + : opacity_(opacity), + xfermode_(xfermode), + has_bounds_(!!bounds), + color_filter_(cf) { + if (bounds) + bounds_ = SkRect(*bounds); } CompositingDisplayItem::~CompositingDisplayItem() { @@ -28,7 +34,7 @@ void CompositingDisplayItem::Raster(SkCanvas* canvas, paint.setXfermodeMode(xfermode_); paint.setAlpha(opacity_ * 255); paint.setColorFilter(color_filter_.get()); - canvas->saveLayer(NULL, &paint); + canvas->saveLayer(has_bounds_ ? &bounds_ : nullptr, &paint); } bool CompositingDisplayItem::IsSuitableForGpuRasterization() const { @@ -41,13 +47,19 @@ int CompositingDisplayItem::ApproximateOpCount() const { size_t CompositingDisplayItem::PictureMemoryUsage() const { // TODO(pdr): Include color_filter's memory here. - return sizeof(float) + sizeof(SkXfermode::Mode); + return sizeof(float) + sizeof(bool) + sizeof(SkRect) + + sizeof(SkXfermode::Mode); } void CompositingDisplayItem::AsValueInto( base::trace_event::TracedValue* array) const { array->AppendString(base::StringPrintf( "CompositingDisplayItem opacity: %f, xfermode: %d", opacity_, xfermode_)); + if (has_bounds_) + array->AppendString(base::StringPrintf( + ", bounds: [%f, %f, %f, %f]", static_cast<float>(bounds_.x()), + static_cast<float>(bounds_.y()), static_cast<float>(bounds_.width()), + static_cast<float>(bounds_.height()))); } EndCompositingDisplayItem::EndCompositingDisplayItem() { diff --git a/cc/resources/compositing_display_item.h b/cc/resources/compositing_display_item.h index 5e485bc..fd42a37 100644 --- a/cc/resources/compositing_display_item.h +++ b/cc/resources/compositing_display_item.h @@ -10,6 +10,7 @@ #include "cc/resources/display_item.h" #include "skia/ext/refptr.h" #include "third_party/skia/include/core/SkColorFilter.h" +#include "third_party/skia/include/core/SkRect.h" #include "third_party/skia/include/core/SkXfermode.h" #include "ui/gfx/geometry/rect_f.h" @@ -25,9 +26,10 @@ class CC_EXPORT CompositingDisplayItem : public DisplayItem { static scoped_ptr<CompositingDisplayItem> Create( float opacity, SkXfermode::Mode xfermode, + SkRect* bounds, skia::RefPtr<SkColorFilter> color_filter) { return make_scoped_ptr( - new CompositingDisplayItem(opacity, xfermode, color_filter)); + new CompositingDisplayItem(opacity, xfermode, bounds, color_filter)); } void Raster(SkCanvas* canvas, SkDrawPictureCallback* callback) const override; @@ -40,11 +42,14 @@ class CC_EXPORT CompositingDisplayItem : public DisplayItem { protected: CompositingDisplayItem(float opacity, SkXfermode::Mode, + SkRect* bounds, skia::RefPtr<SkColorFilter>); private: float opacity_; SkXfermode::Mode xfermode_; + bool has_bounds_; + SkRect bounds_; skia::RefPtr<SkColorFilter> color_filter_; }; |