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

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

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