diff options
author | chrishtr <chrishtr@chromium.org> | 2015-06-29 18:41:31 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-30 01:42:04 +0000 |
commit | 99c6bc2fe6103a9fc9beb53760929474bb5c6c0d (patch) | |
tree | e37974c7ae448a9576f5062101a89a71e1adbeba /cc/blink/web_display_item_list_impl.cc | |
parent | d0f6ee5808269613a53b7c556e84c0af052efe02 (diff) | |
download | chromium_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.cc | 123 |
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( |