| Index: cc/blink/web_display_item_list_impl.cc
|
| diff --git a/cc/blink/web_display_item_list_impl.cc b/cc/blink/web_display_item_list_impl.cc
|
| index 7685a4f6a9a1c82176e153be2ccf26b8f113416f..c524008ceb95ffda48950421a391c591233c95c5 100644
|
| --- a/cc/blink/web_display_item_list_impl.cc
|
| +++ b/cc/blink/web_display_item_list_impl.cc
|
| @@ -32,7 +32,8 @@ namespace {
|
| scoped_refptr<cc::DisplayItemList> CreateUncachedDisplayItemListForBlink() {
|
| cc::DisplayItemListSettings settings;
|
| settings.use_cached_picture = false;
|
| - return cc::DisplayItemList::Create(settings);
|
| + gfx::Rect layer_rect;
|
| + return cc::DisplayItemList::Create(layer_rect, settings);
|
| }
|
|
|
| } // namespace
|
| @@ -49,8 +50,13 @@ WebDisplayItemListImpl::WebDisplayItemListImpl(
|
| void WebDisplayItemListImpl::appendDrawingItem(
|
| const blink::WebRect& visual_rect,
|
| sk_sp<const SkPicture> picture) {
|
| - display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>(
|
| - visual_rect, std::move(picture));
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>(
|
| + visual_rect, std::move(picture));
|
| + } else {
|
| + cc::DrawingDisplayItem item(std::move(picture));
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendClipItem(
|
| @@ -62,13 +68,23 @@ void WebDisplayItemListImpl::appendClipItem(
|
| rounded_rects.push_back(rounded_clip_rects[i]);
|
| }
|
| bool antialias = true;
|
| - display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>(
|
| - visual_rect, clip_rect, rounded_rects, antialias);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>(
|
| + visual_rect, clip_rect, rounded_rects, antialias);
|
| + } else {
|
| + cc::ClipDisplayItem item(clip_rect, rounded_rects, antialias);
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendEndClipItem(
|
| const blink::WebRect& visual_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>(visual_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>(
|
| + visual_rect);
|
| + } else {
|
| + display_item_list_->RasterIntoCanvas(cc::EndClipDisplayItem());
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendClipPathItem(
|
| @@ -76,27 +92,45 @@ void WebDisplayItemListImpl::appendClipPathItem(
|
| const SkPath& clip_path,
|
| SkRegion::Op clip_op,
|
| bool antialias) {
|
| - display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>(
|
| - visual_rect, clip_path, clip_op, antialias);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>(
|
| + visual_rect, clip_path, clip_op, antialias);
|
| + } else {
|
| + cc::ClipPathDisplayItem item(clip_path, clip_op, antialias);
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendEndClipPathItem(
|
| const blink::WebRect& visual_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>(
|
| - visual_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>(
|
| + visual_rect);
|
| + } else {
|
| + display_item_list_->RasterIntoCanvas(cc::EndClipPathDisplayItem());
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendFloatClipItem(
|
| const blink::WebRect& visual_rect,
|
| const blink::WebFloatRect& clip_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>(visual_rect,
|
| - clip_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>(
|
| + visual_rect, clip_rect);
|
| + } else {
|
| + cc::FloatClipDisplayItem item(clip_rect);
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendEndFloatClipItem(
|
| const blink::WebRect& visual_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>(
|
| - visual_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>(
|
| + visual_rect);
|
| + } else {
|
| + display_item_list_->RasterIntoCanvas(cc::EndFloatClipDisplayItem());
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendTransformItem(
|
| @@ -105,14 +139,23 @@ void WebDisplayItemListImpl::appendTransformItem(
|
| gfx::Transform transform(gfx::Transform::kSkipInitialization);
|
| transform.matrix() = matrix;
|
|
|
| - display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>(visual_rect,
|
| - transform);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>(
|
| + visual_rect, transform);
|
| + } else {
|
| + cc::TransformDisplayItem item(transform);
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendEndTransformItem(
|
| const blink::WebRect& visual_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>(
|
| - visual_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>(
|
| + visual_rect);
|
| + } else {
|
| + display_item_list_->RasterIntoCanvas(cc::EndTransformDisplayItem());
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendCompositingItem(
|
| @@ -127,29 +170,49 @@ void WebDisplayItemListImpl::appendCompositingItem(
|
| // value, but that breaks slimming paint reftests.
|
|
|
| const bool kLcdTextRequiresOpaqueLayer = true;
|
| - display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>(
|
| - visual_rect, static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)),
|
| - xfermode, bounds, sk_ref_sp(color_filter), kLcdTextRequiresOpaqueLayer);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>(
|
| + visual_rect, static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)),
|
| + xfermode, bounds, sk_ref_sp(color_filter), kLcdTextRequiresOpaqueLayer);
|
| + } else {
|
| + cc::CompositingDisplayItem item(
|
| + static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)), xfermode,
|
| + bounds, sk_ref_sp(color_filter), kLcdTextRequiresOpaqueLayer);
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendEndCompositingItem(
|
| const blink::WebRect& visual_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>(
|
| - visual_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>(
|
| + visual_rect);
|
| + } else {
|
| + display_item_list_->RasterIntoCanvas(cc::EndCompositingDisplayItem());
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendFilterItem(
|
| const blink::WebRect& visual_rect,
|
| const cc::FilterOperations& filters,
|
| const blink::WebFloatRect& bounds) {
|
| - display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>(
|
| - visual_rect, filters, bounds);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>(
|
| + visual_rect, filters, bounds);
|
| + } else {
|
| + cc::FilterDisplayItem item(filters, bounds);
|
| + display_item_list_->RasterIntoCanvas(item);
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendEndFilterItem(
|
| const blink::WebRect& visual_rect) {
|
| - display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>(
|
| - visual_rect);
|
| + if (display_item_list_->RetainsIndividualDisplayItems()) {
|
| + display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>(
|
| + visual_rect);
|
| + } else {
|
| + display_item_list_->RasterIntoCanvas(cc::EndFilterDisplayItem());
|
| + }
|
| }
|
|
|
| void WebDisplayItemListImpl::appendScrollItem(
|
| @@ -158,8 +221,7 @@ void WebDisplayItemListImpl::appendScrollItem(
|
| ScrollContainerId) {
|
| SkMatrix44 matrix(SkMatrix44::kUninitialized_Constructor);
|
| matrix.setTranslate(-scroll_offset.width, -scroll_offset.height, 0);
|
| - // TODO(wkorman): http://crbug.com/633636 Should we translate the visual rect
|
| - // as well? Create a test case and investigate.
|
| + // TODO(wkorman): Should we translate the visual rect as well?
|
| appendTransformItem(visual_rect, matrix);
|
| }
|
|
|
|
|