summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/blink/web_display_item_list_impl.cc11
-rw-r--r--cc/blink/web_display_item_list_impl.h5
-rw-r--r--cc/resources/compositing_display_item.cc18
-rw-r--r--cc/resources/compositing_display_item.h7
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_;
};