summaryrefslogtreecommitdiffstats
path: root/cc/blink/web_display_item_list_impl.cc
diff options
context:
space:
mode:
authorchrishtr <chrishtr@chromium.org>2015-06-29 18:41:31 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-30 01:42:04 +0000
commit99c6bc2fe6103a9fc9beb53760929474bb5c6c0d (patch)
treee37974c7ae448a9576f5062101a89a71e1adbeba /cc/blink/web_display_item_list_impl.cc
parentd0f6ee5808269613a53b7c556e84c0af052efe02 (diff)
downloadchromium_src-99c6bc2fe6103a9fc9beb53760929474bb5c6c0d.zip
chromium_src-99c6bc2fe6103a9fc9beb53760929474bb5c6c0d.tar.gz
chromium_src-99c6bc2fe6103a9fc9beb53760929474bb5c6c0d.tar.bz2
SP: stop storing display items in a throwaway list container during commit.
We don't need this overhead during phase 1. When re re-add it, we will not have to replay into an SkPicture any more and so will save that time instead. BUG=503705 CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1214183006 Cr-Commit-Position: refs/heads/master@{#336712}
Diffstat (limited to 'cc/blink/web_display_item_list_impl.cc')
-rw-r--r--cc/blink/web_display_item_list_impl.cc123
1 files changed, 97 insertions, 26 deletions
diff --git a/cc/blink/web_display_item_list_impl.cc b/cc/blink/web_display_item_list_impl.cc
index fb37289..4767d5a 100644
--- a/cc/blink/web_display_item_list_impl.cc
+++ b/cc/blink/web_display_item_list_impl.cc
@@ -46,9 +46,15 @@ WebDisplayItemListImpl::WebDisplayItemListImpl(
}
void WebDisplayItemListImpl::appendDrawingItem(const SkPicture* picture) {
- auto* item =
- display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>();
- item->SetNew(skia::SharePtr(const_cast<SkPicture*>(picture)));
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item =
+ display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>();
+ item->SetNew(skia::SharePtr(const_cast<SkPicture*>(picture)));
+ } else {
+ cc::DrawingDisplayItem item;
+ item.SetNew(skia::SharePtr(const_cast<SkPicture*>(picture)));
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendClipItem(
@@ -58,47 +64,88 @@ void WebDisplayItemListImpl::appendClipItem(
for (size_t i = 0; i < rounded_clip_rects.size(); ++i) {
rounded_rects.push_back(rounded_clip_rects[i]);
}
- auto* item = display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>();
- item->SetNew(clip_rect, rounded_rects);
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item = display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>();
+ item->SetNew(clip_rect, rounded_rects);
+ } else {
+ cc::ClipDisplayItem item;
+ item.SetNew(clip_rect, rounded_rects);
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendEndClipItem() {
- display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>();
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>();
+ } else {
+ display_item_list_->RasterIntoCanvas(cc::EndClipDisplayItem());
+ }
}
void WebDisplayItemListImpl::appendClipPathItem(const SkPath& clip_path,
SkRegion::Op clip_op,
bool antialias) {
- auto* item =
- display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>();
- item->SetNew(clip_path, clip_op, antialias);
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item =
+ display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>();
+ item->SetNew(clip_path, clip_op, antialias);
+ } else {
+ cc::ClipPathDisplayItem item;
+ item.SetNew(clip_path, clip_op, antialias);
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendEndClipPathItem() {
- display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>();
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>();
+ } else {
+ display_item_list_->RasterIntoCanvas(cc::EndClipPathDisplayItem());
+ }
}
void WebDisplayItemListImpl::appendFloatClipItem(
const blink::WebFloatRect& clip_rect) {
- auto* item =
- display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>();
- item->SetNew(clip_rect);
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item =
+ display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>();
+ item->SetNew(clip_rect);
+ } else {
+ cc::FloatClipDisplayItem item;
+ item.SetNew(clip_rect);
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendEndFloatClipItem() {
- display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>();
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>();
+ } else {
+ display_item_list_->RasterIntoCanvas(cc::EndFloatClipDisplayItem());
+ }
}
void WebDisplayItemListImpl::appendTransformItem(const SkMatrix44& matrix) {
+ cc::TransformDisplayItem item;
gfx::Transform transform;
transform.matrix() = matrix;
- auto* item =
- display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>();
- item->SetNew(transform);
+
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item =
+ display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>();
+ item->SetNew(transform);
+ } else {
+ item.SetNew(transform);
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendEndTransformItem() {
- display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>();
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>();
+ } else {
+ display_item_list_->RasterIntoCanvas(cc::EndTransformDisplayItem());
+ }
}
void WebDisplayItemListImpl::appendCompositingItem(
@@ -110,27 +157,51 @@ void WebDisplayItemListImpl::appendCompositingItem(
DCHECK_LE(opacity, 1.f);
// TODO(ajuma): This should really be rounding instead of flooring the alpha
// value, but that breaks slimming paint reftests.
- auto* item =
- display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>();
- item->SetNew(static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)), xfermode,
- bounds, skia::SharePtr(color_filter));
+
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item =
+ display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>();
+ item->SetNew(static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)),
+ xfermode, bounds, skia::SharePtr(color_filter));
+ } else {
+ cc::CompositingDisplayItem item;
+ item.SetNew(static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)),
+ xfermode, bounds, skia::SharePtr(color_filter));
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendEndCompositingItem() {
- display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>();
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>();
+ } else {
+ display_item_list_->RasterIntoCanvas(cc::EndCompositingDisplayItem());
+ }
}
void WebDisplayItemListImpl::appendFilterItem(
const blink::WebFilterOperations& filters,
const blink::WebFloatRect& bounds) {
+ cc::FilterDisplayItem item;
const WebFilterOperationsImpl& filters_impl =
static_cast<const WebFilterOperationsImpl&>(filters);
- auto* item = display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>();
- item->SetNew(filters_impl.AsFilterOperations(), bounds);
+
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ auto* item =
+ display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>();
+ item->SetNew(filters_impl.AsFilterOperations(), bounds);
+ } else {
+ item.SetNew(filters_impl.AsFilterOperations(), bounds);
+ display_item_list_->RasterIntoCanvas(item);
+ }
}
void WebDisplayItemListImpl::appendEndFilterItem() {
- display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>();
+ if (display_item_list_->RetainsIndividualDisplayItems()) {
+ display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>();
+ } else {
+ display_item_list_->RasterIntoCanvas(cc::EndFilterDisplayItem());
+ }
}
void WebDisplayItemListImpl::appendScrollItem(