OLD | NEW |
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 <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 skia::RefPtr<SkCanvas> canvas; | 49 skia::RefPtr<SkCanvas> canvas; |
50 | 50 |
51 SkPaint red_paint; | 51 SkPaint red_paint; |
52 red_paint.setColor(SK_ColorRED); | 52 red_paint.setColor(SK_ColorRED); |
53 | 53 |
54 canvas = skia::SharePtr(recorder.beginRecording(SkRect::MakeXYWH( | 54 canvas = skia::SharePtr(recorder.beginRecording(SkRect::MakeXYWH( |
55 offset.x(), offset.y(), layer_size.width(), layer_size.height()))); | 55 offset.x(), offset.y(), layer_size.width(), layer_size.height()))); |
56 canvas->translate(offset.x(), offset.y()); | 56 canvas->translate(offset.x(), offset.y()); |
57 canvas->drawRectCoords(0.f, 0.f, 4.f, 4.f, red_paint); | 57 canvas->drawRectCoords(0.f, 0.f, 4.f, 4.f, red_paint); |
58 list->CreateAndAppendItem<DrawingDisplayItem>( | 58 list->CreateAndAppendItem<DrawingDisplayItem>( |
59 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 59 kVisualRect, recorder.finishRecordingAsPicture()); |
60 } | 60 } |
61 | 61 |
62 void AppendSecondSerializationTestPicture(scoped_refptr<DisplayItemList> list, | 62 void AppendSecondSerializationTestPicture(scoped_refptr<DisplayItemList> list, |
63 const gfx::Size& layer_size) { | 63 const gfx::Size& layer_size) { |
64 gfx::PointF offset(2.f, 2.f); | 64 gfx::PointF offset(2.f, 2.f); |
65 SkPictureRecorder recorder; | 65 SkPictureRecorder recorder; |
66 skia::RefPtr<SkCanvas> canvas; | 66 skia::RefPtr<SkCanvas> canvas; |
67 | 67 |
68 SkPaint blue_paint; | 68 SkPaint blue_paint; |
69 blue_paint.setColor(SK_ColorBLUE); | 69 blue_paint.setColor(SK_ColorBLUE); |
70 | 70 |
71 canvas = skia::SharePtr(recorder.beginRecording(SkRect::MakeXYWH( | 71 canvas = skia::SharePtr(recorder.beginRecording(SkRect::MakeXYWH( |
72 offset.x(), offset.y(), layer_size.width(), layer_size.height()))); | 72 offset.x(), offset.y(), layer_size.width(), layer_size.height()))); |
73 canvas->translate(offset.x(), offset.y()); | 73 canvas->translate(offset.x(), offset.y()); |
74 canvas->drawRectCoords(3.f, 3.f, 7.f, 7.f, blue_paint); | 74 canvas->drawRectCoords(3.f, 3.f, 7.f, 7.f, blue_paint); |
75 list->CreateAndAppendItem<DrawingDisplayItem>( | 75 list->CreateAndAppendItem<DrawingDisplayItem>( |
76 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 76 kVisualRect, recorder.finishRecordingAsPicture()); |
77 } | 77 } |
78 | 78 |
79 void ValidateDisplayItemListSerialization(const gfx::Size& layer_size, | 79 void ValidateDisplayItemListSerialization(const gfx::Size& layer_size, |
80 scoped_refptr<DisplayItemList> list) { | 80 scoped_refptr<DisplayItemList> list) { |
81 list->Finalize(); | 81 list->Finalize(); |
82 | 82 |
83 scoped_ptr<FakeImageSerializationProcessor> | 83 scoped_ptr<FakeImageSerializationProcessor> |
84 fake_image_serialization_processor = | 84 fake_image_serialization_processor = |
85 make_scoped_ptr(new FakeImageSerializationProcessor); | 85 make_scoped_ptr(new FakeImageSerializationProcessor); |
86 | 86 |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 // Build the EndTransformDisplayItem. | 249 // Build the EndTransformDisplayItem. |
250 list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect); | 250 list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect); |
251 | 251 |
252 ValidateDisplayItemListSerialization(layer_size, list); | 252 ValidateDisplayItemListSerialization(layer_size, list); |
253 } | 253 } |
254 | 254 |
255 TEST(DisplayItemListTest, SingleDrawingItem) { | 255 TEST(DisplayItemListTest, SingleDrawingItem) { |
256 gfx::Rect layer_rect(100, 100); | 256 gfx::Rect layer_rect(100, 100); |
257 SkPictureRecorder recorder; | 257 SkPictureRecorder recorder; |
258 skia::RefPtr<SkCanvas> canvas; | 258 skia::RefPtr<SkCanvas> canvas; |
259 skia::RefPtr<SkPicture> picture; | |
260 SkPaint blue_paint; | 259 SkPaint blue_paint; |
261 blue_paint.setColor(SK_ColorBLUE); | 260 blue_paint.setColor(SK_ColorBLUE); |
262 SkPaint red_paint; | 261 SkPaint red_paint; |
263 red_paint.setColor(SK_ColorRED); | 262 red_paint.setColor(SK_ColorRED); |
264 unsigned char pixels[4 * 100 * 100] = {0}; | 263 unsigned char pixels[4 * 100 * 100] = {0}; |
265 DisplayItemListSettings settings; | 264 DisplayItemListSettings settings; |
266 scoped_refptr<DisplayItemList> list = | 265 scoped_refptr<DisplayItemList> list = |
267 DisplayItemList::Create(layer_rect, settings); | 266 DisplayItemList::Create(layer_rect, settings); |
268 | 267 |
269 gfx::PointF offset(8.f, 9.f); | 268 gfx::PointF offset(8.f, 9.f); |
270 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size())); | 269 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size())); |
271 canvas = skia::SharePtr( | 270 canvas = skia::SharePtr( |
272 recorder.beginRecording(gfx::RectFToSkRect(recording_rect))); | 271 recorder.beginRecording(gfx::RectFToSkRect(recording_rect))); |
273 canvas->translate(offset.x(), offset.y()); | 272 canvas->translate(offset.x(), offset.y()); |
274 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); | 273 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); |
275 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); | 274 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); |
276 picture = skia::AdoptRef(recorder.endRecordingAsPicture()); | 275 list->CreateAndAppendItem<DrawingDisplayItem>( |
277 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, | 276 kVisualRect, recorder.finishRecordingAsPicture()); |
278 std::move(picture)); | |
279 list->Finalize(); | 277 list->Finalize(); |
280 DrawDisplayList(pixels, layer_rect, list); | 278 DrawDisplayList(pixels, layer_rect, list); |
281 | 279 |
282 SkBitmap expected_bitmap; | 280 SkBitmap expected_bitmap; |
283 unsigned char expected_pixels[4 * 100 * 100] = {0}; | 281 unsigned char expected_pixels[4 * 100 * 100] = {0}; |
284 SkImageInfo info = | 282 SkImageInfo info = |
285 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); | 283 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); |
286 expected_bitmap.installPixels(info, expected_pixels, info.minRowBytes()); | 284 expected_bitmap.installPixels(info, expected_pixels, info.minRowBytes()); |
287 SkCanvas expected_canvas(expected_bitmap); | 285 SkCanvas expected_canvas(expected_bitmap); |
288 expected_canvas.clipRect(gfx::RectToSkRect(layer_rect)); | 286 expected_canvas.clipRect(gfx::RectToSkRect(layer_rect)); |
(...skipping 21 matching lines...) Expand all Loading... |
310 scoped_refptr<DisplayItemList> list = | 308 scoped_refptr<DisplayItemList> list = |
311 DisplayItemList::Create(layer_rect, settings); | 309 DisplayItemList::Create(layer_rect, settings); |
312 | 310 |
313 gfx::PointF first_offset(8.f, 9.f); | 311 gfx::PointF first_offset(8.f, 9.f); |
314 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size())); | 312 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size())); |
315 canvas = skia::SharePtr( | 313 canvas = skia::SharePtr( |
316 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect))); | 314 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect))); |
317 canvas->translate(first_offset.x(), first_offset.y()); | 315 canvas->translate(first_offset.x(), first_offset.y()); |
318 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); | 316 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); |
319 list->CreateAndAppendItem<DrawingDisplayItem>( | 317 list->CreateAndAppendItem<DrawingDisplayItem>( |
320 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 318 kVisualRect, recorder.finishRecordingAsPicture()); |
321 | 319 |
322 gfx::Rect clip_rect(60, 60, 10, 10); | 320 gfx::Rect clip_rect(60, 60, 10, 10); |
323 list->CreateAndAppendItem<ClipDisplayItem>(kVisualRect, clip_rect, | 321 list->CreateAndAppendItem<ClipDisplayItem>(kVisualRect, clip_rect, |
324 std::vector<SkRRect>()); | 322 std::vector<SkRRect>()); |
325 | 323 |
326 gfx::PointF second_offset(2.f, 3.f); | 324 gfx::PointF second_offset(2.f, 3.f); |
327 gfx::RectF second_recording_rect(second_offset, | 325 gfx::RectF second_recording_rect(second_offset, |
328 gfx::SizeF(layer_rect.size())); | 326 gfx::SizeF(layer_rect.size())); |
329 canvas = skia::SharePtr( | 327 canvas = skia::SharePtr( |
330 recorder.beginRecording(gfx::RectFToSkRect(second_recording_rect))); | 328 recorder.beginRecording(gfx::RectFToSkRect(second_recording_rect))); |
331 canvas->translate(second_offset.x(), second_offset.y()); | 329 canvas->translate(second_offset.x(), second_offset.y()); |
332 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); | 330 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); |
333 list->CreateAndAppendItem<DrawingDisplayItem>( | 331 list->CreateAndAppendItem<DrawingDisplayItem>( |
334 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 332 kVisualRect, recorder.finishRecordingAsPicture()); |
335 | 333 |
336 list->CreateAndAppendItem<EndClipDisplayItem>(kVisualRect); | 334 list->CreateAndAppendItem<EndClipDisplayItem>(kVisualRect); |
337 list->Finalize(); | 335 list->Finalize(); |
338 | 336 |
339 DrawDisplayList(pixels, layer_rect, list); | 337 DrawDisplayList(pixels, layer_rect, list); |
340 | 338 |
341 SkBitmap expected_bitmap; | 339 SkBitmap expected_bitmap; |
342 unsigned char expected_pixels[4 * 100 * 100] = {0}; | 340 unsigned char expected_pixels[4 * 100 * 100] = {0}; |
343 SkImageInfo info = | 341 SkImageInfo info = |
344 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); | 342 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); |
(...skipping 25 matching lines...) Expand all Loading... |
370 scoped_refptr<DisplayItemList> list = | 368 scoped_refptr<DisplayItemList> list = |
371 DisplayItemList::Create(layer_rect, settings); | 369 DisplayItemList::Create(layer_rect, settings); |
372 | 370 |
373 gfx::PointF first_offset(8.f, 9.f); | 371 gfx::PointF first_offset(8.f, 9.f); |
374 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size())); | 372 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size())); |
375 canvas = skia::SharePtr( | 373 canvas = skia::SharePtr( |
376 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect))); | 374 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect))); |
377 canvas->translate(first_offset.x(), first_offset.y()); | 375 canvas->translate(first_offset.x(), first_offset.y()); |
378 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); | 376 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); |
379 list->CreateAndAppendItem<DrawingDisplayItem>( | 377 list->CreateAndAppendItem<DrawingDisplayItem>( |
380 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 378 kVisualRect, recorder.finishRecordingAsPicture()); |
381 | 379 |
382 gfx::Transform transform; | 380 gfx::Transform transform; |
383 transform.Rotate(45.0); | 381 transform.Rotate(45.0); |
384 list->CreateAndAppendItem<TransformDisplayItem>(kVisualRect, transform); | 382 list->CreateAndAppendItem<TransformDisplayItem>(kVisualRect, transform); |
385 | 383 |
386 gfx::PointF second_offset(2.f, 3.f); | 384 gfx::PointF second_offset(2.f, 3.f); |
387 gfx::RectF second_recording_rect(second_offset, | 385 gfx::RectF second_recording_rect(second_offset, |
388 gfx::SizeF(layer_rect.size())); | 386 gfx::SizeF(layer_rect.size())); |
389 canvas = skia::SharePtr( | 387 canvas = skia::SharePtr( |
390 recorder.beginRecording(gfx::RectFToSkRect(second_recording_rect))); | 388 recorder.beginRecording(gfx::RectFToSkRect(second_recording_rect))); |
391 canvas->translate(second_offset.x(), second_offset.y()); | 389 canvas->translate(second_offset.x(), second_offset.y()); |
392 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); | 390 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); |
393 list->CreateAndAppendItem<DrawingDisplayItem>( | 391 list->CreateAndAppendItem<DrawingDisplayItem>( |
394 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 392 kVisualRect, recorder.finishRecordingAsPicture()); |
395 | 393 |
396 list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect); | 394 list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect); |
397 list->Finalize(); | 395 list->Finalize(); |
398 | 396 |
399 DrawDisplayList(pixels, layer_rect, list); | 397 DrawDisplayList(pixels, layer_rect, list); |
400 | 398 |
401 SkBitmap expected_bitmap; | 399 SkBitmap expected_bitmap; |
402 unsigned char expected_pixels[4 * 100 * 100] = {0}; | 400 unsigned char expected_pixels[4 * 100 * 100] = {0}; |
403 SkImageInfo info = | 401 SkImageInfo info = |
404 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); | 402 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 SkCanvas expected_canvas(expected_bitmap); | 463 SkCanvas expected_canvas(expected_bitmap); |
466 expected_canvas.drawRect(RectFToSkRect(filter_bounds), paint); | 464 expected_canvas.drawRect(RectFToSkRect(filter_bounds), paint); |
467 | 465 |
468 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100)); | 466 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100)); |
469 } | 467 } |
470 | 468 |
471 TEST(DisplayItemListTest, CompactingItems) { | 469 TEST(DisplayItemListTest, CompactingItems) { |
472 gfx::Rect layer_rect(100, 100); | 470 gfx::Rect layer_rect(100, 100); |
473 SkPictureRecorder recorder; | 471 SkPictureRecorder recorder; |
474 skia::RefPtr<SkCanvas> canvas; | 472 skia::RefPtr<SkCanvas> canvas; |
475 skia::RefPtr<SkPicture> picture; | |
476 SkPaint blue_paint; | 473 SkPaint blue_paint; |
477 blue_paint.setColor(SK_ColorBLUE); | 474 blue_paint.setColor(SK_ColorBLUE); |
478 SkPaint red_paint; | 475 SkPaint red_paint; |
479 red_paint.setColor(SK_ColorRED); | 476 red_paint.setColor(SK_ColorRED); |
480 unsigned char pixels[4 * 100 * 100] = {0}; | 477 unsigned char pixels[4 * 100 * 100] = {0}; |
481 | 478 |
482 gfx::PointF offset(8.f, 9.f); | 479 gfx::PointF offset(8.f, 9.f); |
483 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size())); | 480 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size())); |
484 | 481 |
485 DisplayItemListSettings no_caching_settings; | 482 DisplayItemListSettings no_caching_settings; |
486 no_caching_settings.use_cached_picture = false; | 483 no_caching_settings.use_cached_picture = false; |
487 scoped_refptr<DisplayItemList> list_without_caching = | 484 scoped_refptr<DisplayItemList> list_without_caching = |
488 DisplayItemList::Create(layer_rect, no_caching_settings); | 485 DisplayItemList::Create(layer_rect, no_caching_settings); |
489 | 486 |
490 canvas = skia::SharePtr( | 487 canvas = skia::SharePtr( |
491 recorder.beginRecording(gfx::RectFToSkRect(recording_rect))); | 488 recorder.beginRecording(gfx::RectFToSkRect(recording_rect))); |
492 canvas->translate(offset.x(), offset.y()); | 489 canvas->translate(offset.x(), offset.y()); |
493 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); | 490 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); |
494 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); | 491 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); |
495 picture = skia::AdoptRef(recorder.endRecordingAsPicture()); | 492 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
496 list_without_caching->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, | 493 list_without_caching->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, |
497 picture); | 494 picture); |
498 list_without_caching->Finalize(); | 495 list_without_caching->Finalize(); |
499 DrawDisplayList(pixels, layer_rect, list_without_caching); | 496 DrawDisplayList(pixels, layer_rect, list_without_caching); |
500 | 497 |
501 unsigned char expected_pixels[4 * 100 * 100] = {0}; | 498 unsigned char expected_pixels[4 * 100 * 100] = {0}; |
502 DisplayItemListSettings caching_settings; | 499 DisplayItemListSettings caching_settings; |
503 caching_settings.use_cached_picture = true; | 500 caching_settings.use_cached_picture = true; |
504 scoped_refptr<DisplayItemList> list_with_caching = | 501 scoped_refptr<DisplayItemList> list_with_caching = |
505 DisplayItemList::Create(layer_rect, caching_settings); | 502 DisplayItemList::Create(layer_rect, caching_settings); |
(...skipping 22 matching lines...) Expand all Loading... |
528 path.lineTo(0, 100); | 525 path.lineTo(0, 100); |
529 path.lineTo(50, 50); | 526 path.lineTo(50, 50); |
530 path.lineTo(100, 100); | 527 path.lineTo(100, 100); |
531 path.lineTo(100, 0); | 528 path.lineTo(100, 0); |
532 path.close(); | 529 path.close(); |
533 | 530 |
534 SkPaint paint; | 531 SkPaint paint; |
535 paint.setAntiAlias(true); | 532 paint.setAntiAlias(true); |
536 canvas->drawPath(path, paint); | 533 canvas->drawPath(path, paint); |
537 | 534 |
538 skia::RefPtr<SkPicture> suitable_picture = | 535 sk_sp<SkPicture> suitable_picture = recorder.finishRecordingAsPicture(); |
539 skia::AdoptRef(recorder.endRecordingAsPicture()); | |
540 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, suitable_picture); | 536 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, suitable_picture); |
541 list->Finalize(); | 537 list->Finalize(); |
542 | 538 |
543 // A single DrawingDisplayItem with a large AA concave path shouldn't trigger | 539 // A single DrawingDisplayItem with a large AA concave path shouldn't trigger |
544 // a veto. | 540 // a veto. |
545 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); | 541 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); |
546 | 542 |
547 // Now check the RasterIntoCanvas path. | 543 // Now check the RasterIntoCanvas path. |
548 list = DisplayItemList::Create(layer_rect, settings); | 544 list = DisplayItemList::Create(layer_rect, settings); |
549 DrawingDisplayItem suitable_item(suitable_picture); | 545 DrawingDisplayItem suitable_item(suitable_picture); |
550 list->RasterIntoCanvas(suitable_item); | 546 list->RasterIntoCanvas(suitable_item); |
551 list->Finalize(); | 547 list->Finalize(); |
552 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); | 548 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); |
553 | 549 |
554 list = DisplayItemList::Create(layer_rect, settings); | 550 list = DisplayItemList::Create(layer_rect, settings); |
555 canvas = | 551 canvas = |
556 skia::SharePtr(recorder.beginRecording(gfx::RectToSkRect(layer_rect))); | 552 skia::SharePtr(recorder.beginRecording(gfx::RectToSkRect(layer_rect))); |
557 for (int i = 0; i < 10; ++i) | 553 for (int i = 0; i < 10; ++i) |
558 canvas->drawPath(path, paint); | 554 canvas->drawPath(path, paint); |
559 skia::RefPtr<SkPicture> unsuitable_picture = | 555 sk_sp<SkPicture> unsuitable_picture = recorder.finishRecordingAsPicture(); |
560 skia::AdoptRef(recorder.endRecordingAsPicture()); | |
561 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, | 556 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, |
562 unsuitable_picture); | 557 unsuitable_picture); |
563 list->Finalize(); | 558 list->Finalize(); |
564 | 559 |
565 // A single DrawingDisplayItem with several large AA concave paths should | 560 // A single DrawingDisplayItem with several large AA concave paths should |
566 // trigger a veto. | 561 // trigger a veto. |
567 EXPECT_FALSE(list->IsSuitableForGpuRasterization()); | 562 EXPECT_FALSE(list->IsSuitableForGpuRasterization()); |
568 | 563 |
569 // Now check the RasterIntoCanvas path. | 564 // Now check the RasterIntoCanvas path. |
570 list = DisplayItemList::Create(layer_rect, settings); | 565 list = DisplayItemList::Create(layer_rect, settings); |
(...skipping 22 matching lines...) Expand all Loading... |
593 path.lineTo(50, 50); | 588 path.lineTo(50, 50); |
594 path.lineTo(100, 100); | 589 path.lineTo(100, 100); |
595 path.lineTo(100, 0); | 590 path.lineTo(100, 0); |
596 path.close(); | 591 path.close(); |
597 | 592 |
598 SkPaint paint; | 593 SkPaint paint; |
599 paint.setAntiAlias(true); | 594 paint.setAntiAlias(true); |
600 canvas->drawPath(path, paint); | 595 canvas->drawPath(path, paint); |
601 | 596 |
602 list->CreateAndAppendItem<DrawingDisplayItem>( | 597 list->CreateAndAppendItem<DrawingDisplayItem>( |
603 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 598 kVisualRect, recorder.finishRecordingAsPicture()); |
604 list->Finalize(); | 599 list->Finalize(); |
605 | 600 |
606 // A single DrawingDisplayItem with a large AA concave path shouldn't trigger | 601 // A single DrawingDisplayItem with a large AA concave path shouldn't trigger |
607 // a veto. | 602 // a veto. |
608 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); | 603 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); |
609 | 604 |
610 list = DisplayItemList::Create(layer_rect, settings); | 605 list = DisplayItemList::Create(layer_rect, settings); |
611 canvas = | 606 canvas = |
612 skia::SharePtr(recorder.beginRecording(gfx::RectToSkRect(layer_rect))); | 607 skia::SharePtr(recorder.beginRecording(gfx::RectToSkRect(layer_rect))); |
613 for (int i = 0; i < 10; ++i) | 608 for (int i = 0; i < 10; ++i) |
614 canvas->drawPath(path, paint); | 609 canvas->drawPath(path, paint); |
615 list->CreateAndAppendItem<DrawingDisplayItem>( | 610 list->CreateAndAppendItem<DrawingDisplayItem>( |
616 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 611 kVisualRect, recorder.finishRecordingAsPicture()); |
617 list->Finalize(); | 612 list->Finalize(); |
618 | 613 |
619 // A single DrawingDisplayItem with several large AA concave paths should | 614 // A single DrawingDisplayItem with several large AA concave paths should |
620 // trigger a veto. | 615 // trigger a veto. |
621 EXPECT_FALSE(list->IsSuitableForGpuRasterization()); | 616 EXPECT_FALSE(list->IsSuitableForGpuRasterization()); |
622 | 617 |
623 list = DisplayItemList::Create(layer_rect, settings); | 618 list = DisplayItemList::Create(layer_rect, settings); |
624 for (int i = 0; i < 10; ++i) { | 619 for (int i = 0; i < 10; ++i) { |
625 canvas = | 620 canvas = |
626 skia::SharePtr(recorder.beginRecording(gfx::RectToSkRect(layer_rect))); | 621 skia::SharePtr(recorder.beginRecording(gfx::RectToSkRect(layer_rect))); |
627 canvas->drawPath(path, paint); | 622 canvas->drawPath(path, paint); |
628 list->CreateAndAppendItem<DrawingDisplayItem>( | 623 list->CreateAndAppendItem<DrawingDisplayItem>( |
629 kVisualRect, skia::AdoptRef(recorder.endRecordingAsPicture())); | 624 kVisualRect, recorder.finishRecordingAsPicture()); |
630 } | 625 } |
631 list->Finalize(); | 626 list->Finalize(); |
632 | 627 |
633 // Without a cached picture, having several DrawingDisplayItems that each | 628 // Without a cached picture, having several DrawingDisplayItems that each |
634 // contain a single large AA concave will not trigger a veto, since each item | 629 // contain a single large AA concave will not trigger a veto, since each item |
635 // is individually suitable for GPU rasterization. | 630 // is individually suitable for GPU rasterization. |
636 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); | 631 EXPECT_TRUE(list->IsSuitableForGpuRasterization()); |
637 } | 632 } |
638 | 633 |
639 TEST(DisplayItemListTest, ApproximateMemoryUsage) { | 634 TEST(DisplayItemListTest, ApproximateMemoryUsage) { |
640 const int kNumCommandsInTestSkPicture = 1000; | 635 const int kNumCommandsInTestSkPicture = 1000; |
641 scoped_refptr<DisplayItemList> list; | 636 scoped_refptr<DisplayItemList> list; |
642 size_t memory_usage; | 637 size_t memory_usage; |
643 | 638 |
644 // Make an SkPicture whose size is known. | 639 // Make an SkPicture whose size is known. |
645 gfx::Rect layer_rect(100, 100); | 640 gfx::Rect layer_rect(100, 100); |
646 SkPictureRecorder recorder; | 641 SkPictureRecorder recorder; |
647 SkPaint blue_paint; | 642 SkPaint blue_paint; |
648 blue_paint.setColor(SK_ColorBLUE); | 643 blue_paint.setColor(SK_ColorBLUE); |
649 SkCanvas* canvas = recorder.beginRecording(gfx::RectToSkRect(layer_rect)); | 644 SkCanvas* canvas = recorder.beginRecording(gfx::RectToSkRect(layer_rect)); |
650 for (int i = 0; i < kNumCommandsInTestSkPicture; i++) | 645 for (int i = 0; i < kNumCommandsInTestSkPicture; i++) |
651 canvas->drawPaint(blue_paint); | 646 canvas->drawPaint(blue_paint); |
652 skia::RefPtr<SkPicture> picture = | 647 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
653 skia::AdoptRef(recorder.endRecordingAsPicture()); | |
654 size_t picture_size = SkPictureUtils::ApproximateBytesUsed(picture.get()); | 648 size_t picture_size = SkPictureUtils::ApproximateBytesUsed(picture.get()); |
655 ASSERT_GE(picture_size, kNumCommandsInTestSkPicture * sizeof(blue_paint)); | 649 ASSERT_GE(picture_size, kNumCommandsInTestSkPicture * sizeof(blue_paint)); |
656 | 650 |
657 // Using a cached picture, we should get about the right size. | 651 // Using a cached picture, we should get about the right size. |
658 DisplayItemListSettings caching_settings; | 652 DisplayItemListSettings caching_settings; |
659 caching_settings.use_cached_picture = true; | 653 caching_settings.use_cached_picture = true; |
660 list = DisplayItemList::Create(layer_rect, caching_settings); | 654 list = DisplayItemList::Create(layer_rect, caching_settings); |
661 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, picture); | 655 list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, picture); |
662 list->Finalize(); | 656 list->Finalize(); |
663 memory_usage = list->ApproximateMemoryUsage(); | 657 memory_usage = list->ApproximateMemoryUsage(); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 | 753 |
760 value = list->AsValue(false)->ToString(); | 754 value = list->AsValue(false)->ToString(); |
761 EXPECT_EQ(value.find("\"items\":"), std::string::npos); | 755 EXPECT_EQ(value.find("\"items\":"), std::string::npos); |
762 EXPECT_NE(value.find("\"layer_rect\":[0,0,0,0]"), std::string::npos); | 756 EXPECT_NE(value.find("\"layer_rect\":[0,0,0,0]"), std::string::npos); |
763 // There should be no skp64 entry present as the items aren't included and the | 757 // There should be no skp64 entry present as the items aren't included and the |
764 // layer rect is empty. | 758 // layer rect is empty. |
765 EXPECT_EQ(value.find("\"skp64\":"), std::string::npos); | 759 EXPECT_EQ(value.find("\"skp64\":"), std::string::npos); |
766 } | 760 } |
767 | 761 |
768 } // namespace cc | 762 } // namespace cc |
OLD | NEW |