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

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

Issue 1819683002: Use sk_sp-based picture recording APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: skspify GetPicture/GetFlattenedPicture Created 4 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.cc ('k') | cc/playback/display_list_raster_source.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 <vector> 9 #include <vector>
10 10
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/playback/display_item_list.cc ('k') | cc/playback/display_list_raster_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698