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

Side by Side Diff: cc/playback/display_item_list.cc

Issue 2751833007: cc: Move DisplayItem::Raster up to DisplayItemList (Closed)
Patch Set: virtualraster: . Created 3 years, 9 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/playback/display_item_list.h ('k') | cc/playback/drawing_display_item.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/playback/display_item_list.h" 5 #include "cc/playback/display_item_list.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "base/memory/ptr_util.h"
11 #include "base/numerics/safe_conversions.h" 12 #include "base/numerics/safe_conversions.h"
12 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
13 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
14 #include "base/trace_event/trace_event_argument.h" 15 #include "base/trace_event/trace_event_argument.h"
15 #include "cc/base/math_util.h" 16 #include "cc/base/math_util.h"
16 #include "cc/debug/picture_debug_util.h" 17 #include "cc/debug/picture_debug_util.h"
18 #include "cc/output/render_surface_filters.h"
17 #include "cc/playback/clip_display_item.h" 19 #include "cc/playback/clip_display_item.h"
18 #include "cc/playback/clip_path_display_item.h" 20 #include "cc/playback/clip_path_display_item.h"
19 #include "cc/playback/compositing_display_item.h" 21 #include "cc/playback/compositing_display_item.h"
20 #include "cc/playback/drawing_display_item.h" 22 #include "cc/playback/drawing_display_item.h"
21 #include "cc/playback/filter_display_item.h" 23 #include "cc/playback/filter_display_item.h"
22 #include "cc/playback/float_clip_display_item.h" 24 #include "cc/playback/float_clip_display_item.h"
23 #include "cc/playback/largest_display_item.h" 25 #include "cc/playback/largest_display_item.h"
24 #include "cc/playback/transform_display_item.h" 26 #include "cc/playback/transform_display_item.h"
25 #include "third_party/skia/include/core/SkCanvas.h" 27 #include "third_party/skia/include/core/SkCanvas.h"
28 #include "third_party/skia/include/core/SkImageFilter.h"
29 #include "third_party/skia/include/core/SkPaint.h"
26 #include "third_party/skia/include/core/SkPictureRecorder.h" 30 #include "third_party/skia/include/core/SkPictureRecorder.h"
27 #include "ui/gfx/geometry/rect.h" 31 #include "ui/gfx/geometry/rect.h"
28 #include "ui/gfx/geometry/rect_conversions.h" 32 #include "ui/gfx/geometry/rect_conversions.h"
29 #include "ui/gfx/skia_util.h" 33 #include "ui/gfx/skia_util.h"
30 34
31 namespace cc { 35 namespace cc {
32 36
33 namespace { 37 namespace {
34 38
35 // We don't perform per-layer solid color analysis when there are too many skia 39 // We don't perform per-layer solid color analysis when there are too many skia
36 // operations. 40 // operations.
37 const int kOpCountThatIsOkToAnalyze = 10; 41 const int kOpCountThatIsOkToAnalyze = 10;
38 42
39 bool GetCanvasClipBounds(SkCanvas* canvas, gfx::Rect* clip_bounds) { 43 bool GetCanvasClipBounds(SkCanvas* canvas, gfx::Rect* clip_bounds) {
40 SkRect canvas_clip_bounds; 44 SkRect canvas_clip_bounds;
41 if (!canvas->getLocalClipBounds(&canvas_clip_bounds)) 45 if (!canvas->getLocalClipBounds(&canvas_clip_bounds))
42 return false; 46 return false;
43 *clip_bounds = ToEnclosingRect(gfx::SkRectToRectF(canvas_clip_bounds)); 47 *clip_bounds = ToEnclosingRect(gfx::SkRectToRectF(canvas_clip_bounds));
44 return true; 48 return true;
45 } 49 }
46 50
47 const int kDefaultNumDisplayItemsToReserve = 100; 51 const int kDefaultNumDisplayItemsToReserve = 100;
48 52
53 NOINLINE DISABLE_CFI_PERF void RasterItem(const DisplayItem& base_item,
54 SkCanvas* canvas,
55 SkPicture::AbortCallback* callback) {
56 switch (base_item.type) {
57 case DisplayItem::CLIP: {
58 const auto& item = static_cast<const ClipDisplayItem&>(base_item);
59 canvas->save();
60 canvas->clipRect(gfx::RectToSkRect(item.clip_rect), item.antialias);
61 for (const auto& rrect : item.rounded_clip_rects) {
62 if (rrect.isRect()) {
63 canvas->clipRect(rrect.rect(), item.antialias);
64 } else {
65 canvas->clipRRect(rrect, item.antialias);
66 }
67 }
68 break;
69 }
70 case DisplayItem::END_CLIP:
71 canvas->restore();
72 break;
73 case DisplayItem::CLIP_PATH: {
74 const auto& item = static_cast<const ClipPathDisplayItem&>(base_item);
75 canvas->save();
76 canvas->clipPath(item.clip_path, item.antialias);
77 break;
78 }
79 case DisplayItem::END_CLIP_PATH:
80 canvas->restore();
81 break;
82 case DisplayItem::COMPOSITING: {
83 const auto& item = static_cast<const CompositingDisplayItem&>(base_item);
84 SkPaint paint;
85 paint.setBlendMode(item.xfermode);
86 paint.setAlpha(item.alpha);
87 paint.setColorFilter(item.color_filter);
88 const SkRect* bounds = item.has_bounds ? &item.bounds : nullptr;
89 if (item.lcd_text_requires_opaque_layer)
90 canvas->saveLayer(bounds, &paint);
91 else
92 canvas->saveLayerPreserveLCDTextRequests(bounds, &paint);
93 break;
94 }
95 case DisplayItem::END_COMPOSITING:
96 canvas->restore();
97 break;
98 case DisplayItem::DRAWING: {
99 const auto& item = static_cast<const DrawingDisplayItem&>(base_item);
100 if (canvas->quickReject(item.picture->cullRect()))
101 break;
102
103 // SkPicture always does a wrapping save/restore on the canvas, so it is
104 // not necessary here.
105 if (callback) {
106 item.picture->playback(canvas, callback);
107 } else {
108 // TODO(enne): switch this to playback once PaintRecord is real.
109 canvas->drawPicture(ToSkPicture(item.picture.get()));
110 }
111 break;
112 }
113 case DisplayItem::FLOAT_CLIP: {
114 const auto& item = static_cast<const FloatClipDisplayItem&>(base_item);
115 canvas->save();
116 canvas->clipRect(gfx::RectFToSkRect(item.clip_rect));
117 break;
118 }
119 case DisplayItem::END_FLOAT_CLIP:
120 canvas->restore();
121 break;
122 case DisplayItem::FILTER: {
123 const auto& item = static_cast<const FilterDisplayItem&>(base_item);
124 canvas->save();
125 canvas->translate(item.origin.x(), item.origin.y());
126
127 sk_sp<SkImageFilter> image_filter =
128 RenderSurfaceFilters::BuildImageFilter(item.filters,
129 item.bounds.size());
130 SkRect boundaries = RectFToSkRect(item.bounds);
131 boundaries.offset(-item.origin.x(), -item.origin.y());
132
133 SkPaint paint;
134 paint.setBlendMode(SkBlendMode::kSrcOver);
135 paint.setImageFilter(std::move(image_filter));
136 canvas->saveLayer(&boundaries, &paint);
137
138 canvas->translate(-item.origin.x(), -item.origin.y());
139 break;
140 }
141 case DisplayItem::END_FILTER:
142 canvas->restore();
143 canvas->restore();
144 break;
145 case DisplayItem::TRANSFORM: {
146 const auto& item = static_cast<const TransformDisplayItem&>(base_item);
147 canvas->save();
148 if (!item.transform.IsIdentity())
149 canvas->concat(item.transform.matrix());
150 break;
151 }
152 case DisplayItem::END_TRANSFORM:
153 canvas->restore();
154 break;
155 }
156 }
157
49 } // namespace 158 } // namespace
50 159
51 DisplayItemList::Inputs::Inputs() 160 DisplayItemList::Inputs::Inputs()
52 : items(LargestDisplayItemSize(), 161 : items(LargestDisplayItemSize(),
53 LargestDisplayItemSize() * kDefaultNumDisplayItemsToReserve) {} 162 LargestDisplayItemSize() * kDefaultNumDisplayItemsToReserve) {}
54 163
55 DisplayItemList::Inputs::~Inputs() = default; 164 DisplayItemList::Inputs::~Inputs() = default;
56 165
57 DisplayItemList::DisplayItemList() = default; 166 DisplayItemList::DisplayItemList() = default;
58 167
(...skipping 10 matching lines...) Expand all
69 // instead because it ignores canvas CTM. 178 // instead because it ignores canvas CTM.
70 SkRegion device_clip; 179 SkRegion device_clip;
71 device_clip.setRect(gfx::RectToSkIRect(canvas_target_playback_rect)); 180 device_clip.setRect(gfx::RectToSkIRect(canvas_target_playback_rect));
72 canvas->clipRegion(device_clip); 181 canvas->clipRegion(device_clip);
73 } 182 }
74 canvas->scale(contents_scale, contents_scale); 183 canvas->scale(contents_scale, contents_scale);
75 Raster(canvas, callback); 184 Raster(canvas, callback);
76 canvas->restore(); 185 canvas->restore();
77 } 186 }
78 187
79 DISABLE_CFI_PERF
80 void DisplayItemList::Raster(SkCanvas* canvas, 188 void DisplayItemList::Raster(SkCanvas* canvas,
81 SkPicture::AbortCallback* callback) const { 189 SkPicture::AbortCallback* callback) const {
82 gfx::Rect canvas_playback_rect; 190 gfx::Rect canvas_playback_rect;
83 if (!GetCanvasClipBounds(canvas, &canvas_playback_rect)) 191 if (!GetCanvasClipBounds(canvas, &canvas_playback_rect))
84 return; 192 return;
85 193
86 std::vector<size_t> indices; 194 std::vector<size_t> indices;
87 rtree_.Search(canvas_playback_rect, &indices); 195 rtree_.Search(canvas_playback_rect, &indices);
88 for (size_t index : indices) { 196 for (size_t index : indices) {
89 inputs_.items[index].Raster(canvas, callback); 197 RasterItem(inputs_.items[index], canvas, callback);
198
90 // We use a callback during solid color analysis on the compositor thread to 199 // We use a callback during solid color analysis on the compositor thread to
91 // break out early. Since we're handling a sequence of pictures via rtree 200 // break out early. Since we're handling a sequence of pictures via rtree
92 // query results ourselves, we have to respect the callback and early out. 201 // query results ourselves, we have to respect the callback and early out.
93 if (callback && callback->abort()) 202 if (callback && callback->abort())
94 break; 203 break;
95 } 204 }
96 } 205 }
97 206
98 void DisplayItemList::GrowCurrentBeginItemVisualRect( 207 void DisplayItemList::GrowCurrentBeginItemVisualRect(
99 const gfx::Rect& visual_rect) { 208 const gfx::Rect& visual_rect) {
(...skipping 25 matching lines...) Expand all
125 int DisplayItemList::ApproximateOpCount() const { 234 int DisplayItemList::ApproximateOpCount() const {
126 return approximate_op_count_; 235 return approximate_op_count_;
127 } 236 }
128 237
129 size_t DisplayItemList::ApproximateMemoryUsage() const { 238 size_t DisplayItemList::ApproximateMemoryUsage() const {
130 size_t memory_usage = sizeof(*this); 239 size_t memory_usage = sizeof(*this);
131 240
132 size_t external_memory_usage = 0; 241 size_t external_memory_usage = 0;
133 for (const auto& item : inputs_.items) { 242 for (const auto& item : inputs_.items) {
134 size_t bytes = 0; 243 size_t bytes = 0;
135 switch (item.type()) { 244 switch (item.type) {
136 case DisplayItem::CLIP: 245 case DisplayItem::CLIP:
137 bytes = static_cast<const ClipDisplayItem&>(item).ExternalMemoryUsage(); 246 bytes = static_cast<const ClipDisplayItem&>(item).ExternalMemoryUsage();
138 break; 247 break;
139 case DisplayItem::CLIP_PATH: 248 case DisplayItem::CLIP_PATH:
140 bytes = 249 bytes =
141 static_cast<const ClipPathDisplayItem&>(item).ExternalMemoryUsage(); 250 static_cast<const ClipPathDisplayItem&>(item).ExternalMemoryUsage();
142 break; 251 break;
143 case DisplayItem::COMPOSITING: 252 case DisplayItem::COMPOSITING:
144 bytes = static_cast<const CompositingDisplayItem&>(item) 253 bytes = static_cast<const CompositingDisplayItem&>(item)
145 .ExternalMemoryUsage(); 254 .ExternalMemoryUsage();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 state->BeginArray("items"); 314 state->BeginArray("items");
206 315
207 auto visual_rects_it = inputs_.visual_rects.begin(); 316 auto visual_rects_it = inputs_.visual_rects.begin();
208 for (const DisplayItem& base_item : inputs_.items) { 317 for (const DisplayItem& base_item : inputs_.items) {
209 gfx::Rect visual_rect; 318 gfx::Rect visual_rect;
210 if (visual_rects_it != inputs_.visual_rects.end()) { 319 if (visual_rects_it != inputs_.visual_rects.end()) {
211 visual_rect = *visual_rects_it; 320 visual_rect = *visual_rects_it;
212 ++visual_rects_it; 321 ++visual_rects_it;
213 } 322 }
214 323
215 switch (base_item.type()) { 324 switch (base_item.type) {
216 case DisplayItem::CLIP: { 325 case DisplayItem::CLIP: {
217 const auto& item = static_cast<const ClipDisplayItem&>(base_item); 326 const auto& item = static_cast<const ClipDisplayItem&>(base_item);
218 std::string output = 327 std::string output =
219 base::StringPrintf("ClipDisplayItem rect: [%s] visualRect: [%s]", 328 base::StringPrintf("ClipDisplayItem rect: [%s] visualRect: [%s]",
220 item.clip_rect().ToString().c_str(), 329 item.clip_rect.ToString().c_str(),
221 visual_rect.ToString().c_str()); 330 visual_rect.ToString().c_str());
222 for (const SkRRect& rounded_rect : item.rounded_clip_rects()) { 331 for (const SkRRect& rounded_rect : item.rounded_clip_rects) {
223 base::StringAppendF( 332 base::StringAppendF(
224 &output, " rounded_rect: [rect: [%s]", 333 &output, " rounded_rect: [rect: [%s]",
225 gfx::SkRectToRectF(rounded_rect.rect()).ToString().c_str()); 334 gfx::SkRectToRectF(rounded_rect.rect()).ToString().c_str());
226 base::StringAppendF(&output, " radii: ["); 335 base::StringAppendF(&output, " radii: [");
227 SkVector upper_left_radius = 336 SkVector upper_left_radius =
228 rounded_rect.radii(SkRRect::kUpperLeft_Corner); 337 rounded_rect.radii(SkRRect::kUpperLeft_Corner);
229 base::StringAppendF(&output, "[%f,%f],", upper_left_radius.x(), 338 base::StringAppendF(&output, "[%f,%f],", upper_left_radius.x(),
230 upper_left_radius.y()); 339 upper_left_radius.y());
231 SkVector upper_right_radius = 340 SkVector upper_right_radius =
232 rounded_rect.radii(SkRRect::kUpperRight_Corner); 341 rounded_rect.radii(SkRRect::kUpperRight_Corner);
(...skipping 13 matching lines...) Expand all
246 } 355 }
247 case DisplayItem::END_CLIP: 356 case DisplayItem::END_CLIP:
248 state->AppendString( 357 state->AppendString(
249 base::StringPrintf("EndClipDisplayItem visualRect: [%s]", 358 base::StringPrintf("EndClipDisplayItem visualRect: [%s]",
250 visual_rect.ToString().c_str())); 359 visual_rect.ToString().c_str()));
251 break; 360 break;
252 case DisplayItem::CLIP_PATH: { 361 case DisplayItem::CLIP_PATH: {
253 const auto& item = static_cast<const ClipPathDisplayItem&>(base_item); 362 const auto& item = static_cast<const ClipPathDisplayItem&>(base_item);
254 state->AppendString(base::StringPrintf( 363 state->AppendString(base::StringPrintf(
255 "ClipPathDisplayItem length: %d visualRect: [%s]", 364 "ClipPathDisplayItem length: %d visualRect: [%s]",
256 item.clip_path().countPoints(), visual_rect.ToString().c_str())); 365 item.clip_path.countPoints(), visual_rect.ToString().c_str()));
257 break; 366 break;
258 } 367 }
259 case DisplayItem::END_CLIP_PATH: 368 case DisplayItem::END_CLIP_PATH:
260 state->AppendString( 369 state->AppendString(
261 base::StringPrintf("EndClipPathDisplayItem visualRect: [%s]", 370 base::StringPrintf("EndClipPathDisplayItem visualRect: [%s]",
262 visual_rect.ToString().c_str())); 371 visual_rect.ToString().c_str()));
263 break; 372 break;
264 case DisplayItem::COMPOSITING: { 373 case DisplayItem::COMPOSITING: {
265 const auto& item = 374 const auto& item =
266 static_cast<const CompositingDisplayItem&>(base_item); 375 static_cast<const CompositingDisplayItem&>(base_item);
267 std::string output = base::StringPrintf( 376 std::string output = base::StringPrintf(
268 "CompositingDisplayItem alpha: %d, xfermode: %d, visualRect: " 377 "CompositingDisplayItem alpha: %d, xfermode: %d, visualRect: "
269 "[%s]", 378 "[%s]",
270 item.alpha(), static_cast<int>(item.xfermode()), 379 item.alpha, static_cast<int>(item.xfermode),
271 visual_rect.ToString().c_str()); 380 visual_rect.ToString().c_str());
272 if (item.has_bounds()) { 381 if (item.has_bounds) {
273 base::StringAppendF( 382 base::StringAppendF(
274 &output, ", bounds: [%s]", 383 &output, ", bounds: [%s]",
275 gfx::SkRectToRectF(item.bounds()).ToString().c_str()); 384 gfx::SkRectToRectF(item.bounds).ToString().c_str());
276 } 385 }
277 state->AppendString(output); 386 state->AppendString(output);
278 break; 387 break;
279 } 388 }
280 case DisplayItem::END_COMPOSITING: 389 case DisplayItem::END_COMPOSITING:
281 state->AppendString( 390 state->AppendString(
282 base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", 391 base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]",
283 visual_rect.ToString().c_str())); 392 visual_rect.ToString().c_str()));
284 break; 393 break;
285 case DisplayItem::DRAWING: { 394 case DisplayItem::DRAWING: {
286 const auto& item = static_cast<const DrawingDisplayItem&>(base_item); 395 const auto& item = static_cast<const DrawingDisplayItem&>(base_item);
287 state->BeginDictionary(); 396 state->BeginDictionary();
288 state->SetString("name", "DrawingDisplayItem"); 397 state->SetString("name", "DrawingDisplayItem");
289 398
290 state->BeginArray("visualRect"); 399 state->BeginArray("visualRect");
291 state->AppendInteger(visual_rect.x()); 400 state->AppendInteger(visual_rect.x());
292 state->AppendInteger(visual_rect.y()); 401 state->AppendInteger(visual_rect.y());
293 state->AppendInteger(visual_rect.width()); 402 state->AppendInteger(visual_rect.width());
294 state->AppendInteger(visual_rect.height()); 403 state->AppendInteger(visual_rect.height());
295 state->EndArray(); 404 state->EndArray();
296 405
297 state->BeginArray("cullRect"); 406 state->BeginArray("cullRect");
298 state->AppendInteger(item.picture().cullRect().x()); 407 state->AppendInteger(item.picture->cullRect().x());
299 state->AppendInteger(item.picture().cullRect().y()); 408 state->AppendInteger(item.picture->cullRect().y());
300 state->AppendInteger(item.picture().cullRect().width()); 409 state->AppendInteger(item.picture->cullRect().width());
301 state->AppendInteger(item.picture().cullRect().height()); 410 state->AppendInteger(item.picture->cullRect().height());
302 state->EndArray(); 411 state->EndArray();
303 412
304 std::string b64_picture; 413 std::string b64_picture;
305 PictureDebugUtil::SerializeAsBase64(ToSkPicture(&item.picture()), 414 PictureDebugUtil::SerializeAsBase64(ToSkPicture(item.picture.get()),
306 &b64_picture); 415 &b64_picture);
307 state->SetString("skp64", b64_picture); 416 state->SetString("skp64", b64_picture);
308 state->EndDictionary(); 417 state->EndDictionary();
309 break; 418 break;
310 } 419 }
311 case DisplayItem::FILTER: { 420 case DisplayItem::FILTER: {
312 const auto& item = static_cast<const FilterDisplayItem&>(base_item); 421 const auto& item = static_cast<const FilterDisplayItem&>(base_item);
313 state->AppendString(base::StringPrintf( 422 state->AppendString(base::StringPrintf(
314 "FilterDisplayItem bounds: [%s] visualRect: [%s]", 423 "FilterDisplayItem bounds: [%s] visualRect: [%s]",
315 item.bounds().ToString().c_str(), 424 item.bounds.ToString().c_str(), visual_rect.ToString().c_str()));
316 visual_rect.ToString().c_str()));
317 break; 425 break;
318 } 426 }
319 case DisplayItem::END_FILTER: 427 case DisplayItem::END_FILTER:
320 state->AppendString( 428 state->AppendString(
321 base::StringPrintf("EndFilterDisplayItem visualRect: [%s]", 429 base::StringPrintf("EndFilterDisplayItem visualRect: [%s]",
322 visual_rect.ToString().c_str())); 430 visual_rect.ToString().c_str()));
323 break; 431 break;
324 case DisplayItem::FLOAT_CLIP: { 432 case DisplayItem::FLOAT_CLIP: {
325 const auto& item = 433 const auto& item =
326 static_cast<const FloatClipDisplayItem&>(base_item); 434 static_cast<const FloatClipDisplayItem&>(base_item);
327 state->AppendString(base::StringPrintf( 435 state->AppendString(base::StringPrintf(
328 "FloatClipDisplayItem rect: [%s] visualRect: [%s]", 436 "FloatClipDisplayItem rect: [%s] visualRect: [%s]",
329 item.clip_rect().ToString().c_str(), 437 item.clip_rect.ToString().c_str(),
330 visual_rect.ToString().c_str())); 438 visual_rect.ToString().c_str()));
331 break; 439 break;
332 } 440 }
333 case DisplayItem::END_FLOAT_CLIP: 441 case DisplayItem::END_FLOAT_CLIP:
334 state->AppendString( 442 state->AppendString(
335 base::StringPrintf("EndFloatClipDisplayItem visualRect: [%s]", 443 base::StringPrintf("EndFloatClipDisplayItem visualRect: [%s]",
336 visual_rect.ToString().c_str())); 444 visual_rect.ToString().c_str()));
337 break; 445 break;
338 case DisplayItem::TRANSFORM: { 446 case DisplayItem::TRANSFORM: {
339 const auto& item = 447 const auto& item =
340 static_cast<const TransformDisplayItem&>(base_item); 448 static_cast<const TransformDisplayItem&>(base_item);
341 state->AppendString(base::StringPrintf( 449 state->AppendString(base::StringPrintf(
342 "TransformDisplayItem transform: [%s] visualRect: [%s]", 450 "TransformDisplayItem transform: [%s] visualRect: [%s]",
343 item.transform().ToString().c_str(), 451 item.transform.ToString().c_str(),
344 visual_rect.ToString().c_str())); 452 visual_rect.ToString().c_str()));
345 break; 453 break;
346 } 454 }
347 case DisplayItem::END_TRANSFORM: 455 case DisplayItem::END_TRANSFORM:
348 state->AppendString( 456 state->AppendString(
349 base::StringPrintf("EndTransformDisplayItem visualRect: [%s]", 457 base::StringPrintf("EndTransformDisplayItem visualRect: [%s]",
350 visual_rect.ToString().c_str())); 458 visual_rect.ToString().c_str()));
351 break; 459 break;
352 } 460 }
353 } 461 }
(...skipping 22 matching lines...) Expand all
376 484
377 void DisplayItemList::GenerateDiscardableImagesMetadata() { 485 void DisplayItemList::GenerateDiscardableImagesMetadata() {
378 // This should be only called once. 486 // This should be only called once.
379 DCHECK(image_map_.empty()); 487 DCHECK(image_map_.empty());
380 488
381 gfx::Rect bounds = rtree_.GetBounds(); 489 gfx::Rect bounds = rtree_.GetBounds();
382 DiscardableImageMap::ScopedMetadataGenerator generator( 490 DiscardableImageMap::ScopedMetadataGenerator generator(
383 &image_map_, gfx::Size(bounds.right(), bounds.bottom())); 491 &image_map_, gfx::Size(bounds.right(), bounds.bottom()));
384 auto* canvas = generator.canvas(); 492 auto* canvas = generator.canvas();
385 for (const auto& item : inputs_.items) 493 for (const auto& item : inputs_.items)
386 item.Raster(canvas, nullptr); 494 RasterItem(item, canvas, nullptr);
387 } 495 }
388 496
389 void DisplayItemList::GetDiscardableImagesInRect( 497 void DisplayItemList::GetDiscardableImagesInRect(
390 const gfx::Rect& rect, 498 const gfx::Rect& rect,
391 float contents_scale, 499 float contents_scale,
392 std::vector<DrawImage>* images) { 500 std::vector<DrawImage>* images) {
393 image_map_.GetDiscardableImagesInRect(rect, contents_scale, images); 501 image_map_.GetDiscardableImagesInRect(rect, contents_scale, images);
394 } 502 }
395 503
396 gfx::Rect DisplayItemList::GetRectForImage(ImageId image_id) const { 504 gfx::Rect DisplayItemList::GetRectForImage(ImageId image_id) const {
397 return image_map_.GetRectForImage(image_id); 505 return image_map_.GetRectForImage(image_id);
398 } 506 }
399 507
400 } // namespace cc 508 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/display_item_list.h ('k') | cc/playback/drawing_display_item.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698