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

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

Issue 1484163002: Raster display item lists via a visual rect RTree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync to head. Created 5 years 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
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 <vector> 7 #include <vector>
8 8
9 #include "cc/blink/web_filter_operations_impl.h" 9 #include "cc/blink/web_filter_operations_impl.h"
10 #include "cc/playback/clip_display_item.h" 10 #include "cc/playback/clip_display_item.h"
(...skipping 13 matching lines...) Expand all
24 #include "ui/gfx/geometry/safe_integer_conversions.h" 24 #include "ui/gfx/geometry/safe_integer_conversions.h"
25 #include "ui/gfx/transform.h" 25 #include "ui/gfx/transform.h"
26 26
27 namespace cc_blink { 27 namespace cc_blink {
28 28
29 namespace { 29 namespace {
30 30
31 scoped_refptr<cc::DisplayItemList> CreateUncachedDisplayItemListForBlink() { 31 scoped_refptr<cc::DisplayItemList> CreateUncachedDisplayItemListForBlink() {
32 cc::DisplayItemListSettings settings; 32 cc::DisplayItemListSettings settings;
33 settings.use_cached_picture = false; 33 settings.use_cached_picture = false;
34 gfx::Rect layer_rect; 34 return cc::DisplayItemList::Create(settings);
35 return cc::DisplayItemList::Create(layer_rect, settings);
36 } 35 }
37 36
38 } // namespace 37 } // namespace
39 38
40 WebDisplayItemListImpl::WebDisplayItemListImpl() 39 WebDisplayItemListImpl::WebDisplayItemListImpl()
41 : display_item_list_(CreateUncachedDisplayItemListForBlink()) { 40 : display_item_list_(CreateUncachedDisplayItemListForBlink()) {
42 } 41 }
43 42
44 WebDisplayItemListImpl::WebDisplayItemListImpl( 43 WebDisplayItemListImpl::WebDisplayItemListImpl(
45 cc::DisplayItemList* display_list) 44 cc::DisplayItemList* display_list)
46 : display_item_list_(display_list) { 45 : display_item_list_(display_list) {
47 } 46 }
48 47
49 void WebDisplayItemListImpl::appendDrawingItem( 48 void WebDisplayItemListImpl::appendDrawingItem(
50 const blink::WebRect& visual_rect, 49 const blink::WebRect& visual_rect,
51 const SkPicture* picture) { 50 const SkPicture* picture) {
52 if (display_item_list_->RetainsIndividualDisplayItems()) { 51 auto* item = display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>(
53 auto* item = 52 visual_rect);
54 display_item_list_->CreateAndAppendItem<cc::DrawingDisplayItem>( 53 item->SetNew(skia::SharePtr(const_cast<SkPicture*>(picture)));
55 visual_rect);
56 item->SetNew(skia::SharePtr(const_cast<SkPicture*>(picture)));
57 } else {
58 cc::DrawingDisplayItem item;
59 item.SetNew(skia::SharePtr(const_cast<SkPicture*>(picture)));
60 display_item_list_->RasterIntoCanvas(item);
61 }
62 } 54 }
63 55
64 void WebDisplayItemListImpl::appendClipItem( 56 void WebDisplayItemListImpl::appendClipItem(
65 const blink::WebRect& visual_rect, 57 const blink::WebRect& visual_rect,
66 const blink::WebRect& clip_rect, 58 const blink::WebRect& clip_rect,
67 const blink::WebVector<SkRRect>& rounded_clip_rects) { 59 const blink::WebVector<SkRRect>& rounded_clip_rects) {
68 std::vector<SkRRect> rounded_rects; 60 std::vector<SkRRect> rounded_rects;
69 for (size_t i = 0; i < rounded_clip_rects.size(); ++i) { 61 for (size_t i = 0; i < rounded_clip_rects.size(); ++i) {
70 rounded_rects.push_back(rounded_clip_rects[i]); 62 rounded_rects.push_back(rounded_clip_rects[i]);
71 } 63 }
72 if (display_item_list_->RetainsIndividualDisplayItems()) { 64 auto* item =
73 auto* item = display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>( 65 display_item_list_->CreateAndAppendItem<cc::ClipDisplayItem>(visual_rect);
74 visual_rect); 66 item->SetNew(clip_rect, rounded_rects);
75 item->SetNew(clip_rect, rounded_rects);
76 } else {
77 cc::ClipDisplayItem item;
78 item.SetNew(clip_rect, rounded_rects);
79 display_item_list_->RasterIntoCanvas(item);
80 }
81 } 67 }
82 68
83 void WebDisplayItemListImpl::appendEndClipItem( 69 void WebDisplayItemListImpl::appendEndClipItem(
84 const blink::WebRect& visual_rect) { 70 const blink::WebRect& visual_rect) {
85 if (display_item_list_->RetainsIndividualDisplayItems()) { 71 display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>(visual_rect);
86 display_item_list_->CreateAndAppendItem<cc::EndClipDisplayItem>(
87 visual_rect);
88 } else {
89 display_item_list_->RasterIntoCanvas(cc::EndClipDisplayItem());
90 }
91 } 72 }
92 73
93 void WebDisplayItemListImpl::appendClipPathItem( 74 void WebDisplayItemListImpl::appendClipPathItem(
94 const blink::WebRect& visual_rect, 75 const blink::WebRect& visual_rect,
95 const SkPath& clip_path, 76 const SkPath& clip_path,
96 SkRegion::Op clip_op, 77 SkRegion::Op clip_op,
97 bool antialias) { 78 bool antialias) {
98 if (display_item_list_->RetainsIndividualDisplayItems()) { 79 auto* item = display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>(
99 auto* item = 80 visual_rect);
100 display_item_list_->CreateAndAppendItem<cc::ClipPathDisplayItem>( 81 item->SetNew(clip_path, clip_op, antialias);
101 visual_rect);
102 item->SetNew(clip_path, clip_op, antialias);
103 } else {
104 cc::ClipPathDisplayItem item;
105 item.SetNew(clip_path, clip_op, antialias);
106 display_item_list_->RasterIntoCanvas(item);
107 }
108 } 82 }
109 83
110 void WebDisplayItemListImpl::appendEndClipPathItem( 84 void WebDisplayItemListImpl::appendEndClipPathItem(
111 const blink::WebRect& visual_rect) { 85 const blink::WebRect& visual_rect) {
112 if (display_item_list_->RetainsIndividualDisplayItems()) { 86 display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>(
113 display_item_list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>( 87 visual_rect);
114 visual_rect);
115 } else {
116 display_item_list_->RasterIntoCanvas(cc::EndClipPathDisplayItem());
117 }
118 } 88 }
119 89
120 void WebDisplayItemListImpl::appendFloatClipItem( 90 void WebDisplayItemListImpl::appendFloatClipItem(
121 const blink::WebRect& visual_rect, 91 const blink::WebRect& visual_rect,
122 const blink::WebFloatRect& clip_rect) { 92 const blink::WebFloatRect& clip_rect) {
123 if (display_item_list_->RetainsIndividualDisplayItems()) { 93 auto* item =
124 auto* item = 94 display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>(
125 display_item_list_->CreateAndAppendItem<cc::FloatClipDisplayItem>( 95 visual_rect);
126 visual_rect); 96 item->SetNew(clip_rect);
127 item->SetNew(clip_rect);
128 } else {
129 cc::FloatClipDisplayItem item;
130 item.SetNew(clip_rect);
131 display_item_list_->RasterIntoCanvas(item);
132 }
133 } 97 }
134 98
135 void WebDisplayItemListImpl::appendEndFloatClipItem( 99 void WebDisplayItemListImpl::appendEndFloatClipItem(
136 const blink::WebRect& visual_rect) { 100 const blink::WebRect& visual_rect) {
137 if (display_item_list_->RetainsIndividualDisplayItems()) { 101 display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>(
138 display_item_list_->CreateAndAppendItem<cc::EndFloatClipDisplayItem>( 102 visual_rect);
139 visual_rect);
140 } else {
141 display_item_list_->RasterIntoCanvas(cc::EndFloatClipDisplayItem());
142 }
143 } 103 }
144 104
145 void WebDisplayItemListImpl::appendTransformItem( 105 void WebDisplayItemListImpl::appendTransformItem(
146 const blink::WebRect& visual_rect, 106 const blink::WebRect& visual_rect,
147 const SkMatrix44& matrix) { 107 const SkMatrix44& matrix) {
148 gfx::Transform transform(gfx::Transform::kSkipInitialization); 108 gfx::Transform transform(gfx::Transform::kSkipInitialization);
149 transform.matrix() = matrix; 109 transform.matrix() = matrix;
150 110
151 if (display_item_list_->RetainsIndividualDisplayItems()) { 111 auto* item =
152 auto* item = 112 display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>(
153 display_item_list_->CreateAndAppendItem<cc::TransformDisplayItem>( 113 visual_rect);
154 visual_rect); 114 item->SetNew(transform);
155 item->SetNew(transform);
156 } else {
157 cc::TransformDisplayItem item;
158 item.SetNew(transform);
159 display_item_list_->RasterIntoCanvas(item);
160 }
161 } 115 }
162 116
163 void WebDisplayItemListImpl::appendEndTransformItem( 117 void WebDisplayItemListImpl::appendEndTransformItem(
164 const blink::WebRect& visual_rect) { 118 const blink::WebRect& visual_rect) {
165 if (display_item_list_->RetainsIndividualDisplayItems()) { 119 display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>(
166 display_item_list_->CreateAndAppendItem<cc::EndTransformDisplayItem>( 120 visual_rect);
167 visual_rect);
168 } else {
169 display_item_list_->RasterIntoCanvas(cc::EndTransformDisplayItem());
170 }
171 } 121 }
172 122
173 void WebDisplayItemListImpl::appendCompositingItem( 123 void WebDisplayItemListImpl::appendCompositingItem(
174 const blink::WebRect& visual_rect, 124 const blink::WebRect& visual_rect,
175 float opacity, 125 float opacity,
176 SkXfermode::Mode xfermode, 126 SkXfermode::Mode xfermode,
177 SkRect* bounds, 127 SkRect* bounds,
178 SkColorFilter* color_filter) { 128 SkColorFilter* color_filter) {
179 DCHECK_GE(opacity, 0.f); 129 DCHECK_GE(opacity, 0.f);
180 DCHECK_LE(opacity, 1.f); 130 DCHECK_LE(opacity, 1.f);
181 // TODO(ajuma): This should really be rounding instead of flooring the alpha 131 // TODO(ajuma): This should really be rounding instead of flooring the alpha
182 // value, but that breaks slimming paint reftests. 132 // value, but that breaks slimming paint reftests.
183 133
184 if (display_item_list_->RetainsIndividualDisplayItems()) { 134 auto* item =
185 auto* item = 135 display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>(
186 display_item_list_->CreateAndAppendItem<cc::CompositingDisplayItem>( 136 visual_rect);
187 visual_rect); 137 item->SetNew(static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)), xfermode,
188 item->SetNew(static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)), 138 bounds, skia::SharePtr(color_filter));
189 xfermode, bounds, skia::SharePtr(color_filter));
190 } else {
191 cc::CompositingDisplayItem item;
192 item.SetNew(static_cast<uint8_t>(gfx::ToFlooredInt(255 * opacity)),
193 xfermode, bounds, skia::SharePtr(color_filter));
194 display_item_list_->RasterIntoCanvas(item);
195 }
196 } 139 }
197 140
198 void WebDisplayItemListImpl::appendEndCompositingItem( 141 void WebDisplayItemListImpl::appendEndCompositingItem(
199 const blink::WebRect& visual_rect) { 142 const blink::WebRect& visual_rect) {
200 if (display_item_list_->RetainsIndividualDisplayItems()) { 143 display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>(
201 display_item_list_->CreateAndAppendItem<cc::EndCompositingDisplayItem>( 144 visual_rect);
202 visual_rect);
203 } else {
204 display_item_list_->RasterIntoCanvas(cc::EndCompositingDisplayItem());
205 }
206 } 145 }
207 146
208 void WebDisplayItemListImpl::appendFilterItem( 147 void WebDisplayItemListImpl::appendFilterItem(
209 const blink::WebRect& visual_rect, 148 const blink::WebRect& visual_rect,
210 const blink::WebFilterOperations& filters, 149 const blink::WebFilterOperations& filters,
211 const blink::WebFloatRect& bounds) { 150 const blink::WebFloatRect& bounds) {
212 const WebFilterOperationsImpl& filters_impl = 151 const WebFilterOperationsImpl& filters_impl =
213 static_cast<const WebFilterOperationsImpl&>(filters); 152 static_cast<const WebFilterOperationsImpl&>(filters);
214 153
215 if (display_item_list_->RetainsIndividualDisplayItems()) { 154 auto* item = display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>(
216 auto* item = display_item_list_->CreateAndAppendItem<cc::FilterDisplayItem>( 155 visual_rect);
217 visual_rect); 156 item->SetNew(filters_impl.AsFilterOperations(), bounds);
218 item->SetNew(filters_impl.AsFilterOperations(), bounds);
219 } else {
220 cc::FilterDisplayItem item;
221 item.SetNew(filters_impl.AsFilterOperations(), bounds);
222 display_item_list_->RasterIntoCanvas(item);
223 }
224 } 157 }
225 158
226 void WebDisplayItemListImpl::appendEndFilterItem( 159 void WebDisplayItemListImpl::appendEndFilterItem(
227 const blink::WebRect& visual_rect) { 160 const blink::WebRect& visual_rect) {
228 if (display_item_list_->RetainsIndividualDisplayItems()) { 161 display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>(
229 display_item_list_->CreateAndAppendItem<cc::EndFilterDisplayItem>( 162 visual_rect);
230 visual_rect);
231 } else {
232 display_item_list_->RasterIntoCanvas(cc::EndFilterDisplayItem());
233 }
234 } 163 }
235 164
236 void WebDisplayItemListImpl::appendScrollItem( 165 void WebDisplayItemListImpl::appendScrollItem(
237 const blink::WebRect& visual_rect, 166 const blink::WebRect& visual_rect,
238 const blink::WebSize& scroll_offset, 167 const blink::WebSize& scroll_offset,
239 ScrollContainerId) { 168 ScrollContainerId) {
240 SkMatrix44 matrix(SkMatrix44::kUninitialized_Constructor); 169 SkMatrix44 matrix(SkMatrix44::kUninitialized_Constructor);
241 matrix.setTranslate(-scroll_offset.width, -scroll_offset.height, 0); 170 matrix.setTranslate(-scroll_offset.width, -scroll_offset.height, 0);
242 // TODO(wkorman): Should we translate the visual rect as well? 171 // TODO(wkorman): Should we translate the visual rect as well? Create a test
172 // case and investigate.
243 appendTransformItem(visual_rect, matrix); 173 appendTransformItem(visual_rect, matrix);
244 } 174 }
245 175
246 void WebDisplayItemListImpl::appendEndScrollItem( 176 void WebDisplayItemListImpl::appendEndScrollItem(
247 const blink::WebRect& visual_rect) { 177 const blink::WebRect& visual_rect) {
248 appendEndTransformItem(visual_rect); 178 appendEndTransformItem(visual_rect);
249 } 179 }
250 180
251 WebDisplayItemListImpl::~WebDisplayItemListImpl() { 181 WebDisplayItemListImpl::~WebDisplayItemListImpl() {
252 } 182 }
253 183
254 } // namespace cc_blink 184 } // namespace cc_blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698