| 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 |