Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: cc/blink/web_display_item_list_impl.cc

Issue 2217263003: Revert "Raster display item lists via a visual rect RTree." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restore NeedsRebaseline entries. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/blink/web_content_layer_impl.cc ('k') | cc/debug/rasterize_and_record_benchmark.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/blink/web_display_item_list_impl.h" 5 #include "cc/blink/web_display_item_list_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <vector> 10 #include <vector>
(...skipping 14 matching lines...) Expand all
25 #include "ui/gfx/geometry/safe_integer_conversions.h" 25 #include "ui/gfx/geometry/safe_integer_conversions.h"
26 #include "ui/gfx/transform.h" 26 #include "ui/gfx/transform.h"
27 27
28 namespace cc_blink { 28 namespace cc_blink {
29 29
30 namespace { 30 namespace {
31 31
32 scoped_refptr<cc::DisplayItemList> CreateUncachedDisplayItemListForBlink() { 32 scoped_refptr<cc::DisplayItemList> CreateUncachedDisplayItemListForBlink() {
33 cc::DisplayItemListSettings settings; 33 cc::DisplayItemListSettings settings;
34 settings.use_cached_picture = false; 34 settings.use_cached_picture = false;
35 return cc::DisplayItemList::Create(settings); 35 gfx::Rect layer_rect;
36 return cc::DisplayItemList::Create(layer_rect, settings);
36 } 37 }
37 38
38 } // namespace 39 } // namespace
39 40
40 WebDisplayItemListImpl::WebDisplayItemListImpl() 41 WebDisplayItemListImpl::WebDisplayItemListImpl()
41 : display_item_list_(CreateUncachedDisplayItemListForBlink()) { 42 : display_item_list_(CreateUncachedDisplayItemListForBlink()) {
42 } 43 }
43 44
44 WebDisplayItemListImpl::WebDisplayItemListImpl( 45 WebDisplayItemListImpl::WebDisplayItemListImpl(
45 cc::DisplayItemList* display_list) 46 cc::DisplayItemList* display_list)
46 : display_item_list_(display_list) { 47 : display_item_list_(display_list) {
47 } 48 }
48 49
49 void WebDisplayItemListImpl::appendDrawingItem( 50 void WebDisplayItemListImpl::appendDrawingItem(
50 const blink::WebRect& visual_rect, 51 const blink::WebRect& visual_rect,
51 sk_sp<const SkPicture> picture) { 52 sk_sp<const SkPicture> picture) {
52 display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>( 53 if (display_item_list_->RetainsIndividualDisplayItems()) {
53 visual_rect, std::move(picture)); 54 display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>(
55 visual_rect, std::move(picture));
56 } else {
57 cc::DrawingDisplayItem item(std::move(picture));
58 display_item_list_->RasterIntoCanvas(item);
59 }
54 } 60 }
55 61
56 void WebDisplayItemListImpl::appendClipItem( 62 void WebDisplayItemListImpl::appendClipItem(
57 const blink::WebRect& visual_rect, 63 const blink::WebRect& visual_rect,
58 const blink::WebRect& clip_rect, 64 const blink::WebRect& clip_rect,
59 const blink::WebVector<SkRRect>& rounded_clip_rects) { 65 const blink::WebVector<SkRRect>& rounded_clip_rects) {
60 std::vector<SkRRect> rounded_rects; 66 std::vector<SkRRect> rounded_rects;
61 for (size_t i = 0; i < rounded_clip_rects.size(); ++i) { 67 for (size_t i = 0; i < rounded_clip_rects.size(); ++i) {
62 rounded_rects.push_back(rounded_clip_rects[i]); 68 rounded_rects.push_back(rounded_clip_rects[i]);
63 } 69 }
64 bool antialias = true; 70 bool antialias = true;
65 display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>( 71 if (display_item_list_->RetainsIndividualDisplayItems()) {
66 visual_rect, clip_rect, rounded_rects, antialias); 72 display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>(
73 visual_rect, clip_rect, rounded_rects, antialias);
74 } else {
75 cc::ClipDisplayItem item(clip_rect, rounded_rects, antialias);
76 display_item_list_->RasterIntoCanvas(item);
77 }
67 } 78 }
68 79
69 void WebDisplayItemListImpl::appendEndClipItem( 80 void WebDisplayItemListImpl::appendEndClipItem(
70 const blink::WebRect& visual_rect) { 81 const blink::WebRect& visual_rect) {
71 display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>(visual_rect); 82 if (display_item_list_->RetainsIndividualDisplayItems()) {
83 display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>(
84 visual_rect);
85 } else {
86 display_item_list_->RasterIntoCanvas(cc::EndClipDisplayItem());
87 }
72 } 88 }
73 89
74 void WebDisplayItemListImpl::appendClipPathItem( 90 void WebDisplayItemListImpl::appendClipPathItem(
75 const blink::WebRect& visual_rect, 91 const blink::WebRect& visual_rect,
76 const SkPath& clip_path, 92 const SkPath& clip_path,
77 SkRegion::Op clip_op, 93 SkRegion::Op clip_op,
78 bool antialias) { 94 bool antialias) {
79 display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>( 95 if (display_item_list_->RetainsIndividualDisplayItems()) {
80 visual_rect, clip_path, clip_op, antialias); 96 display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>(
97 visual_rect, clip_path, clip_op, antialias);
98 } else {
99 cc::ClipPathDisplayItem item(clip_path, clip_op, antialias);
100 display_item_list_->RasterIntoCanvas(item);
101 }
81 } 102 }
82 103
83 void WebDisplayItemListImpl::appendEndClipPathItem( 104 void WebDisplayItemListImpl::appendEndClipPathItem(
84 const blink::WebRect& visual_rect) { 105 const blink::WebRect& visual_rect) {
85 display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>( 106 if (display_item_list_->RetainsIndividualDisplayItems()) {
86 visual_rect); 107 display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>(
108 visual_rect);
109 } else {
110 display_item_list_->RasterIntoCanvas(cc::EndClipPathDisplayItem());
111 }
87 } 112 }
88 113
89 void WebDisplayItemListImpl::appendFloatClipItem( 114 void WebDisplayItemListImpl::appendFloatClipItem(
90 const blink::WebRect& visual_rect, 115 const blink::WebRect& visual_rect,
91 const blink::WebFloatRect& clip_rect) { 116 const blink::WebFloatRect& clip_rect) {
92 display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>(visual_rect, 117 if (display_item_list_->RetainsIndividualDisplayItems()) {
93 clip_rect); 118 display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>(
119 visual_rect, clip_rect);
120 } else {
121 cc::FloatClipDisplayItem item(clip_rect);
122 display_item_list_->RasterIntoCanvas(item);
123 }
94 } 124 }
95 125
96 void WebDisplayItemListImpl::appendEndFloatClipItem( 126 void WebDisplayItemListImpl::appendEndFloatClipItem(
97 const blink::WebRect& visual_rect) { 127 const blink::WebRect& visual_rect) {
98 display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>( 128 if (display_item_list_->RetainsIndividualDisplayItems()) {
99 visual_rect); 129 display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>(
130 visual_rect);
131 } else {
132 display_item_list_->RasterIntoCanvas(cc::EndFloatClipDisplayItem());
133 }
100 } 134 }
101 135
102 void WebDisplayItemListImpl::appendTransformItem( 136 void WebDisplayItemListImpl::appendTransformItem(
103 const blink::WebRect& visual_rect, 137 const blink::WebRect& visual_rect,
104 const SkMatrix44& matrix) { 138 const SkMatrix44& matrix) {
105 gfx::Transform transform(gfx::Transform::kSkipInitialization); 139 gfx::Transform transform(gfx::Transform::kSkipInitialization);
106 transform.matrix() = matrix; 140 transform.matrix() = matrix;
107 141
108 display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>(visual_rect, 142 if (display_item_list_->RetainsIndividualDisplayItems()) {
109 transform); 143 display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>(
144 visual_rect, transform);
145 } else {
146 cc::TransformDisplayItem item(transform);
147 display_item_list_->RasterIntoCanvas(item);
148 }
110 } 149 }
111 150
112 void WebDisplayItemListImpl::appendEndTransformItem( 151 void WebDisplayItemListImpl::appendEndTransformItem(
113 const blink::WebRect& visual_rect) { 152 const blink::WebRect& visual_rect) {
114 display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>( 153 if (display_item_list_->RetainsIndividualDisplayItems()) {
115 visual_rect); 154 display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>(
155 visual_rect);
156 } else {
157 display_item_list_->RasterIntoCanvas(cc::EndTransformDisplayItem());
158 }
116 } 159 }
117 160
118 void WebDisplayItemListImpl::appendCompositingItem( 161 void WebDisplayItemListImpl::appendCompositingItem(
119 const blink::WebRect& visual_rect, 162 const blink::WebRect& visual_rect,
120 float opacity, 163 float opacity,
121 SkXfermode::Mode xfermode, 164 SkXfermode::Mode xfermode,
122 SkRect* bounds, 165 SkRect* bounds,
123 SkColorFilter* color_filter) { 166 SkColorFilter* color_filter) {
124 DCHECK_GE(opacity, 0.f); 167 DCHECK_GE(opacity, 0.f);
125 DCHECK_LE(opacity, 1.f); 168 DCHECK_LE(opacity, 1.f);
126 // TODO(ajuma): This should really be rounding instead of flooring the alpha 169 // TODO(ajuma): This should really be rounding instead of flooring the alpha
127 // value, but that breaks slimming paint reftests. 170 // value, but that breaks slimming paint reftests.
128 171
129 const bool kLcdTextRequiresOpaqueLayer = true; 172 const bool kLcdTextRequiresOpaqueLayer = true;
130 display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>( 173 if (display_item_list_->RetainsIndividualDisplayItems()) {
131 visual_rect, static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)), 174 display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>(
132 xfermode, bounds, sk_ref_sp(color_filter), kLcdTextRequiresOpaqueLayer); 175 visual_rect, static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)),
176 xfermode, bounds, sk_ref_sp(color_filter), kLcdTextRequiresOpaqueLayer);
177 } else {
178 cc::CompositingDisplayItem item(
179 static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)), xfermode,
180 bounds, sk_ref_sp(color_filter), kLcdTextRequiresOpaqueLayer);
181 display_item_list_->RasterIntoCanvas(item);
182 }
133 } 183 }
134 184
135 void WebDisplayItemListImpl::appendEndCompositingItem( 185 void WebDisplayItemListImpl::appendEndCompositingItem(
136 const blink::WebRect& visual_rect) { 186 const blink::WebRect& visual_rect) {
137 display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>( 187 if (display_item_list_->RetainsIndividualDisplayItems()) {
138 visual_rect); 188 display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>(
189 visual_rect);
190 } else {
191 display_item_list_->RasterIntoCanvas(cc::EndCompositingDisplayItem());
192 }
139 } 193 }
140 194
141 void WebDisplayItemListImpl::appendFilterItem( 195 void WebDisplayItemListImpl::appendFilterItem(
142 const blink::WebRect& visual_rect, 196 const blink::WebRect& visual_rect,
143 const cc::FilterOperations& filters, 197 const cc::FilterOperations& filters,
144 const blink::WebFloatRect& bounds) { 198 const blink::WebFloatRect& bounds) {
145 display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>( 199 if (display_item_list_->RetainsIndividualDisplayItems()) {
146 visual_rect, filters, bounds); 200 display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>(
201 visual_rect, filters, bounds);
202 } else {
203 cc::FilterDisplayItem item(filters, bounds);
204 display_item_list_->RasterIntoCanvas(item);
205 }
147 } 206 }
148 207
149 void WebDisplayItemListImpl::appendEndFilterItem( 208 void WebDisplayItemListImpl::appendEndFilterItem(
150 const blink::WebRect& visual_rect) { 209 const blink::WebRect& visual_rect) {
151 display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>( 210 if (display_item_list_->RetainsIndividualDisplayItems()) {
152 visual_rect); 211 display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>(
212 visual_rect);
213 } else {
214 display_item_list_->RasterIntoCanvas(cc::EndFilterDisplayItem());
215 }
153 } 216 }
154 217
155 void WebDisplayItemListImpl::appendScrollItem( 218 void WebDisplayItemListImpl::appendScrollItem(
156 const blink::WebRect& visual_rect, 219 const blink::WebRect& visual_rect,
157 const blink::WebSize& scroll_offset, 220 const blink::WebSize& scroll_offset,
158 ScrollContainerId) { 221 ScrollContainerId) {
159 SkMatrix44 matrix(SkMatrix44::kUninitialized_Constructor); 222 SkMatrix44 matrix(SkMatrix44::kUninitialized_Constructor);
160 matrix.setTranslate(-scroll_offset.width, -scroll_offset.height, 0); 223 matrix.setTranslate(-scroll_offset.width, -scroll_offset.height, 0);
161 // TODO(wkorman): http://crbug.com/633636 Should we translate the visual rect 224 // TODO(wkorman): Should we translate the visual rect as well?
162 // as well? Create a test case and investigate.
163 appendTransformItem(visual_rect, matrix); 225 appendTransformItem(visual_rect, matrix);
164 } 226 }
165 227
166 void WebDisplayItemListImpl::appendEndScrollItem( 228 void WebDisplayItemListImpl::appendEndScrollItem(
167 const blink::WebRect& visual_rect) { 229 const blink::WebRect& visual_rect) {
168 appendEndTransformItem(visual_rect); 230 appendEndTransformItem(visual_rect);
169 } 231 }
170 232
171 void WebDisplayItemListImpl::setIsSuitableForGpuRasterization(bool isSuitable) { 233 void WebDisplayItemListImpl::setIsSuitableForGpuRasterization(bool isSuitable) {
172 display_item_list_->SetIsSuitableForGpuRasterization(isSuitable); 234 display_item_list_->SetIsSuitableForGpuRasterization(isSuitable);
173 } 235 }
174 236
175 WebDisplayItemListImpl::~WebDisplayItemListImpl() { 237 WebDisplayItemListImpl::~WebDisplayItemListImpl() {
176 } 238 }
177 239
178 } // namespace cc_blink 240 } // namespace cc_blink
OLDNEW
« no previous file with comments | « cc/blink/web_content_layer_impl.cc ('k') | cc/debug/rasterize_and_record_benchmark.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698