| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/tiles/software_image_decode_controller.h" | 5 #include "cc/tiles/software_image_decode_controller.h" |
| 6 | 6 |
| 7 #include "cc/playback/draw_image.h" | 7 #include "cc/playback/draw_image.h" |
| 8 #include "cc/raster/tile_task.h" | 8 #include "cc/raster/tile_task.h" |
| 9 #include "cc/resources/resource_format.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "third_party/skia/include/core/SkRefCnt.h" | 11 #include "third_party/skia/include/core/SkRefCnt.h" |
| 11 | 12 |
| 12 namespace cc { | 13 namespace cc { |
| 13 namespace { | 14 namespace { |
| 14 | 15 |
| 16 size_t kLockedMemoryLimitBytes = 128 * 1024 * 1024; |
| 17 class TestSoftwareImageDecodeController : public SoftwareImageDecodeController { |
| 18 public: |
| 19 TestSoftwareImageDecodeController() |
| 20 : SoftwareImageDecodeController(ResourceFormat::RGBA_8888, |
| 21 kLockedMemoryLimitBytes) {} |
| 22 }; |
| 23 |
| 15 sk_sp<SkImage> CreateImage(int width, int height) { | 24 sk_sp<SkImage> CreateImage(int width, int height) { |
| 16 SkBitmap bitmap; | 25 SkBitmap bitmap; |
| 17 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height)); | 26 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height)); |
| 18 return SkImage::MakeFromBitmap(bitmap); | 27 return SkImage::MakeFromBitmap(bitmap); |
| 19 } | 28 } |
| 20 | 29 |
| 21 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { | 30 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { |
| 22 SkMatrix matrix; | 31 SkMatrix matrix; |
| 23 matrix.setScale(scale.width(), scale.height()); | 32 matrix.setScale(scale.width(), scale.height()); |
| 24 | 33 |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 479 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 471 EXPECT_EQ(image->uniqueID(), key.image_id()); | 480 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 472 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); | 481 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); |
| 473 EXPECT_EQ(40, key.target_size().width()); | 482 EXPECT_EQ(40, key.target_size().width()); |
| 474 EXPECT_EQ(35, key.target_size().height()); | 483 EXPECT_EQ(35, key.target_size().height()); |
| 475 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); | 484 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); |
| 476 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); | 485 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); |
| 477 } | 486 } |
| 478 | 487 |
| 479 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { | 488 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { |
| 480 SoftwareImageDecodeController controller; | 489 TestSoftwareImageDecodeController controller; |
| 481 sk_sp<SkImage> image = CreateImage(100, 100); | 490 sk_sp<SkImage> image = CreateImage(100, 100); |
| 482 bool is_decomposable = true; | 491 bool is_decomposable = true; |
| 483 SkFilterQuality quality = kHigh_SkFilterQuality; | 492 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 484 | 493 |
| 485 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 494 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 486 quality, | 495 quality, |
| 487 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 496 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 488 scoped_refptr<TileTask> task; | 497 scoped_refptr<TileTask> task; |
| 489 bool need_unref = controller.GetTaskForImageAndRef( | 498 bool need_unref = controller.GetTaskForImageAndRef( |
| 490 draw_image, ImageDecodeController::TracingInfo(), &task); | 499 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 491 EXPECT_TRUE(need_unref); | 500 EXPECT_TRUE(need_unref); |
| 492 EXPECT_TRUE(task); | 501 EXPECT_TRUE(task); |
| 493 | 502 |
| 494 DrawImage another_draw_image( | 503 DrawImage another_draw_image( |
| 495 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 504 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 496 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 505 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 497 scoped_refptr<TileTask> another_task; | 506 scoped_refptr<TileTask> another_task; |
| 498 need_unref = controller.GetTaskForImageAndRef( | 507 need_unref = controller.GetTaskForImageAndRef( |
| 499 another_draw_image, ImageDecodeController::TracingInfo(), &another_task); | 508 another_draw_image, ImageDecodeController::TracingInfo(), &another_task); |
| 500 EXPECT_TRUE(need_unref); | 509 EXPECT_TRUE(need_unref); |
| 501 EXPECT_TRUE(task.get() == another_task.get()); | 510 EXPECT_TRUE(task.get() == another_task.get()); |
| 502 | 511 |
| 503 controller.UnrefImage(draw_image); | 512 controller.UnrefImage(draw_image); |
| 504 controller.UnrefImage(draw_image); | 513 controller.UnrefImage(draw_image); |
| 505 } | 514 } |
| 506 | 515 |
| 507 TEST(SoftwareImageDecodeControllerTest, | 516 TEST(SoftwareImageDecodeControllerTest, |
| 508 GetTaskForImageSameImageDifferentQuality) { | 517 GetTaskForImageSameImageDifferentQuality) { |
| 509 SoftwareImageDecodeController controller; | 518 TestSoftwareImageDecodeController controller; |
| 510 sk_sp<SkImage> image = CreateImage(100, 100); | 519 sk_sp<SkImage> image = CreateImage(100, 100); |
| 511 bool is_decomposable = true; | 520 bool is_decomposable = true; |
| 512 | 521 |
| 513 DrawImage high_quality_draw_image( | 522 DrawImage high_quality_draw_image( |
| 514 image, SkIRect::MakeWH(image->width(), image->height()), | 523 image, SkIRect::MakeWH(image->width(), image->height()), |
| 515 kHigh_SkFilterQuality, | 524 kHigh_SkFilterQuality, |
| 516 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 525 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 517 scoped_refptr<TileTask> high_quality_task; | 526 scoped_refptr<TileTask> high_quality_task; |
| 518 bool need_unref = controller.GetTaskForImageAndRef( | 527 bool need_unref = controller.GetTaskForImageAndRef( |
| 519 high_quality_draw_image, ImageDecodeController::TracingInfo(), | 528 high_quality_draw_image, ImageDecodeController::TracingInfo(), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 545 EXPECT_TRUE(low_quality_task); | 554 EXPECT_TRUE(low_quality_task); |
| 546 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); | 555 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); |
| 547 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); | 556 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); |
| 548 | 557 |
| 549 controller.UnrefImage(high_quality_draw_image); | 558 controller.UnrefImage(high_quality_draw_image); |
| 550 controller.UnrefImage(medium_quality_draw_image); | 559 controller.UnrefImage(medium_quality_draw_image); |
| 551 controller.UnrefImage(low_quality_draw_image); | 560 controller.UnrefImage(low_quality_draw_image); |
| 552 } | 561 } |
| 553 | 562 |
| 554 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { | 563 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { |
| 555 SoftwareImageDecodeController controller; | 564 TestSoftwareImageDecodeController controller; |
| 556 sk_sp<SkImage> image = CreateImage(100, 100); | 565 sk_sp<SkImage> image = CreateImage(100, 100); |
| 557 bool is_decomposable = true; | 566 bool is_decomposable = true; |
| 558 SkFilterQuality quality = kHigh_SkFilterQuality; | 567 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 559 | 568 |
| 560 DrawImage half_size_draw_image( | 569 DrawImage half_size_draw_image( |
| 561 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 570 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 562 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 571 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 563 scoped_refptr<TileTask> half_size_task; | 572 scoped_refptr<TileTask> half_size_task; |
| 564 bool need_unref = controller.GetTaskForImageAndRef( | 573 bool need_unref = controller.GetTaskForImageAndRef( |
| 565 half_size_draw_image, ImageDecodeController::TracingInfo(), | 574 half_size_draw_image, ImageDecodeController::TracingInfo(), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 576 &quarter_size_task); | 585 &quarter_size_task); |
| 577 EXPECT_TRUE(need_unref); | 586 EXPECT_TRUE(need_unref); |
| 578 EXPECT_TRUE(quarter_size_task); | 587 EXPECT_TRUE(quarter_size_task); |
| 579 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get()); | 588 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get()); |
| 580 | 589 |
| 581 controller.UnrefImage(half_size_draw_image); | 590 controller.UnrefImage(half_size_draw_image); |
| 582 controller.UnrefImage(quarter_size_draw_image); | 591 controller.UnrefImage(quarter_size_draw_image); |
| 583 } | 592 } |
| 584 | 593 |
| 585 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { | 594 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { |
| 586 SoftwareImageDecodeController controller; | 595 TestSoftwareImageDecodeController controller; |
| 587 bool is_decomposable = true; | 596 bool is_decomposable = true; |
| 588 SkFilterQuality quality = kHigh_SkFilterQuality; | 597 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 589 | 598 |
| 590 sk_sp<SkImage> first_image = CreateImage(100, 100); | 599 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 591 DrawImage first_draw_image( | 600 DrawImage first_draw_image( |
| 592 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 601 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 593 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 602 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 594 scoped_refptr<TileTask> first_task; | 603 scoped_refptr<TileTask> first_task; |
| 595 bool need_unref = controller.GetTaskForImageAndRef( | 604 bool need_unref = controller.GetTaskForImageAndRef( |
| 596 first_draw_image, ImageDecodeController::TracingInfo(), &first_task); | 605 first_draw_image, ImageDecodeController::TracingInfo(), &first_task); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 607 second_draw_image, ImageDecodeController::TracingInfo(), &second_task); | 616 second_draw_image, ImageDecodeController::TracingInfo(), &second_task); |
| 608 EXPECT_TRUE(need_unref); | 617 EXPECT_TRUE(need_unref); |
| 609 EXPECT_TRUE(second_task); | 618 EXPECT_TRUE(second_task); |
| 610 EXPECT_TRUE(first_task.get() != second_task.get()); | 619 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 611 | 620 |
| 612 controller.UnrefImage(first_draw_image); | 621 controller.UnrefImage(first_draw_image); |
| 613 controller.UnrefImage(second_draw_image); | 622 controller.UnrefImage(second_draw_image); |
| 614 } | 623 } |
| 615 | 624 |
| 616 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { | 625 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { |
| 617 SoftwareImageDecodeController controller; | 626 TestSoftwareImageDecodeController controller; |
| 618 bool is_decomposable = true; | 627 bool is_decomposable = true; |
| 619 SkFilterQuality quality = kHigh_SkFilterQuality; | 628 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 620 | 629 |
| 621 sk_sp<SkImage> image = CreateImage(100, 100); | 630 sk_sp<SkImage> image = CreateImage(100, 100); |
| 622 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 631 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 623 quality, | 632 quality, |
| 624 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 633 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 625 scoped_refptr<TileTask> task; | 634 scoped_refptr<TileTask> task; |
| 626 bool need_unref = controller.GetTaskForImageAndRef( | 635 bool need_unref = controller.GetTaskForImageAndRef( |
| 627 draw_image, ImageDecodeController::TracingInfo(), &task); | 636 draw_image, ImageDecodeController::TracingInfo(), &task); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 641 | 650 |
| 642 task->WillComplete(); | 651 task->WillComplete(); |
| 643 task->CompleteOnOriginThread(nullptr); | 652 task->CompleteOnOriginThread(nullptr); |
| 644 task->DidComplete(); | 653 task->DidComplete(); |
| 645 | 654 |
| 646 controller.UnrefImage(draw_image); | 655 controller.UnrefImage(draw_image); |
| 647 controller.UnrefImage(draw_image); | 656 controller.UnrefImage(draw_image); |
| 648 } | 657 } |
| 649 | 658 |
| 650 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { | 659 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { |
| 651 SoftwareImageDecodeController controller; | 660 TestSoftwareImageDecodeController controller; |
| 652 bool is_decomposable = true; | 661 bool is_decomposable = true; |
| 653 SkFilterQuality quality = kLow_SkFilterQuality; | 662 SkFilterQuality quality = kLow_SkFilterQuality; |
| 654 | 663 |
| 655 sk_sp<SkImage> image = CreateImage(100, 100); | 664 sk_sp<SkImage> image = CreateImage(100, 100); |
| 656 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 665 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 657 quality, | 666 quality, |
| 658 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 667 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 659 scoped_refptr<TileTask> task; | 668 scoped_refptr<TileTask> task; |
| 660 bool need_unref = controller.GetTaskForImageAndRef( | 669 bool need_unref = controller.GetTaskForImageAndRef( |
| 661 draw_image, ImageDecodeController::TracingInfo(), &task); | 670 draw_image, ImageDecodeController::TracingInfo(), &task); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 682 draw_image, ImageDecodeController::TracingInfo(), &third_task); | 691 draw_image, ImageDecodeController::TracingInfo(), &third_task); |
| 683 EXPECT_TRUE(need_unref); | 692 EXPECT_TRUE(need_unref); |
| 684 EXPECT_FALSE(third_task); | 693 EXPECT_FALSE(third_task); |
| 685 | 694 |
| 686 controller.UnrefImage(draw_image); | 695 controller.UnrefImage(draw_image); |
| 687 controller.UnrefImage(draw_image); | 696 controller.UnrefImage(draw_image); |
| 688 controller.UnrefImage(draw_image); | 697 controller.UnrefImage(draw_image); |
| 689 } | 698 } |
| 690 | 699 |
| 691 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { | 700 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { |
| 692 SoftwareImageDecodeController controller; | 701 TestSoftwareImageDecodeController controller; |
| 693 bool is_decomposable = true; | 702 bool is_decomposable = true; |
| 694 SkFilterQuality quality = kHigh_SkFilterQuality; | 703 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 695 | 704 |
| 696 sk_sp<SkImage> image = CreateImage(100, 100); | 705 sk_sp<SkImage> image = CreateImage(100, 100); |
| 697 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 706 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 698 quality, | 707 quality, |
| 699 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 708 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 700 scoped_refptr<TileTask> task; | 709 scoped_refptr<TileTask> task; |
| 701 bool need_unref = controller.GetTaskForImageAndRef( | 710 bool need_unref = controller.GetTaskForImageAndRef( |
| 702 draw_image, ImageDecodeController::TracingInfo(), &task); | 711 draw_image, ImageDecodeController::TracingInfo(), &task); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 728 draw_image, ImageDecodeController::TracingInfo(), &third_task); | 737 draw_image, ImageDecodeController::TracingInfo(), &third_task); |
| 729 EXPECT_TRUE(need_unref); | 738 EXPECT_TRUE(need_unref); |
| 730 EXPECT_TRUE(third_task); | 739 EXPECT_TRUE(third_task); |
| 731 EXPECT_FALSE(third_task.get() == task.get()); | 740 EXPECT_FALSE(third_task.get() == task.get()); |
| 732 | 741 |
| 733 controller.UnrefImage(draw_image); | 742 controller.UnrefImage(draw_image); |
| 734 } | 743 } |
| 735 | 744 |
| 736 TEST(SoftwareImageDecodeControllerTest, | 745 TEST(SoftwareImageDecodeControllerTest, |
| 737 GetTaskForImageCanceledWhileReffedGetsNewTask) { | 746 GetTaskForImageCanceledWhileReffedGetsNewTask) { |
| 738 SoftwareImageDecodeController controller; | 747 TestSoftwareImageDecodeController controller; |
| 739 bool is_decomposable = true; | 748 bool is_decomposable = true; |
| 740 SkFilterQuality quality = kHigh_SkFilterQuality; | 749 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 741 | 750 |
| 742 sk_sp<SkImage> image = CreateImage(100, 100); | 751 sk_sp<SkImage> image = CreateImage(100, 100); |
| 743 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 752 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 744 quality, | 753 quality, |
| 745 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 754 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 746 scoped_refptr<TileTask> task; | 755 scoped_refptr<TileTask> task; |
| 747 bool need_unref = controller.GetTaskForImageAndRef( | 756 bool need_unref = controller.GetTaskForImageAndRef( |
| 748 draw_image, ImageDecodeController::TracingInfo(), &task); | 757 draw_image, ImageDecodeController::TracingInfo(), &task); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 773 EXPECT_TRUE(third_task); | 782 EXPECT_TRUE(third_task); |
| 774 EXPECT_FALSE(third_task.get() == task.get()); | 783 EXPECT_FALSE(third_task.get() == task.get()); |
| 775 | 784 |
| 776 // 3 Unrefs! | 785 // 3 Unrefs! |
| 777 controller.UnrefImage(draw_image); | 786 controller.UnrefImage(draw_image); |
| 778 controller.UnrefImage(draw_image); | 787 controller.UnrefImage(draw_image); |
| 779 controller.UnrefImage(draw_image); | 788 controller.UnrefImage(draw_image); |
| 780 } | 789 } |
| 781 | 790 |
| 782 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { | 791 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { |
| 783 SoftwareImageDecodeController controller; | 792 TestSoftwareImageDecodeController controller; |
| 784 bool is_decomposable = true; | 793 bool is_decomposable = true; |
| 785 SkFilterQuality quality = kHigh_SkFilterQuality; | 794 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 786 | 795 |
| 787 sk_sp<SkImage> image = CreateImage(100, 100); | 796 sk_sp<SkImage> image = CreateImage(100, 100); |
| 788 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 797 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 789 quality, | 798 quality, |
| 790 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 799 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 791 scoped_refptr<TileTask> task; | 800 scoped_refptr<TileTask> task; |
| 792 bool need_unref = controller.GetTaskForImageAndRef( | 801 bool need_unref = controller.GetTaskForImageAndRef( |
| 793 draw_image, ImageDecodeController::TracingInfo(), &task); | 802 draw_image, ImageDecodeController::TracingInfo(), &task); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 814 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 823 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 815 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 824 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 816 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 825 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
| 817 | 826 |
| 818 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 827 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 819 controller.UnrefImage(draw_image); | 828 controller.UnrefImage(draw_image); |
| 820 } | 829 } |
| 821 | 830 |
| 822 TEST(SoftwareImageDecodeControllerTest, | 831 TEST(SoftwareImageDecodeControllerTest, |
| 823 GetDecodedImageForDrawWithNonContainedSrcRect) { | 832 GetDecodedImageForDrawWithNonContainedSrcRect) { |
| 824 SoftwareImageDecodeController controller; | 833 TestSoftwareImageDecodeController controller; |
| 825 bool is_decomposable = true; | 834 bool is_decomposable = true; |
| 826 SkFilterQuality quality = kHigh_SkFilterQuality; | 835 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 827 | 836 |
| 828 sk_sp<SkImage> image = CreateImage(100, 100); | 837 sk_sp<SkImage> image = CreateImage(100, 100); |
| 829 DrawImage draw_image( | 838 DrawImage draw_image( |
| 830 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | 839 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| 831 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 840 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 832 scoped_refptr<TileTask> task; | 841 scoped_refptr<TileTask> task; |
| 833 bool need_unref = controller.GetTaskForImageAndRef( | 842 bool need_unref = controller.GetTaskForImageAndRef( |
| 834 draw_image, ImageDecodeController::TracingInfo(), &task); | 843 draw_image, ImageDecodeController::TracingInfo(), &task); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 854 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 863 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
| 855 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 864 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 856 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 865 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 857 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 866 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
| 858 | 867 |
| 859 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 868 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 860 controller.UnrefImage(draw_image); | 869 controller.UnrefImage(draw_image); |
| 861 } | 870 } |
| 862 | 871 |
| 863 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { | 872 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { |
| 864 SoftwareImageDecodeController controller; | 873 TestSoftwareImageDecodeController controller; |
| 865 bool is_decomposable = true; | 874 bool is_decomposable = true; |
| 866 SkFilterQuality quality = kHigh_SkFilterQuality; | 875 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 867 | 876 |
| 868 sk_sp<SkImage> image = CreateImage(100, 100); | 877 sk_sp<SkImage> image = CreateImage(100, 100); |
| 869 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 878 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 870 quality, | 879 quality, |
| 871 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 880 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 872 | 881 |
| 873 DecodedDrawImage decoded_draw_image = | 882 DecodedDrawImage decoded_draw_image = |
| 874 controller.GetDecodedImageForDraw(draw_image); | 883 controller.GetDecodedImageForDraw(draw_image); |
| 875 EXPECT_TRUE(decoded_draw_image.image()); | 884 EXPECT_TRUE(decoded_draw_image.image()); |
| 876 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 885 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 877 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 886 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 878 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 887 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| 879 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 888 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
| 880 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 889 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 881 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 890 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 882 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 891 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
| 883 | 892 |
| 884 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 893 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 885 } | 894 } |
| 886 | 895 |
| 887 TEST(SoftwareImageDecodeControllerTest, | 896 TEST(SoftwareImageDecodeControllerTest, |
| 888 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { | 897 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { |
| 889 SoftwareImageDecodeController controller; | 898 TestSoftwareImageDecodeController controller; |
| 890 bool is_decomposable = true; | 899 bool is_decomposable = true; |
| 891 SkFilterQuality quality = kHigh_SkFilterQuality; | 900 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 892 | 901 |
| 893 sk_sp<SkImage> image = CreateImage(100, 100); | 902 sk_sp<SkImage> image = CreateImage(100, 100); |
| 894 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 903 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 895 quality, | 904 quality, |
| 896 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 905 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 897 | 906 |
| 898 DecodedDrawImage decoded_draw_image = | 907 DecodedDrawImage decoded_draw_image = |
| 899 controller.GetDecodedImageForDraw(draw_image); | 908 controller.GetDecodedImageForDraw(draw_image); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 910 controller.GetDecodedImageForDraw(draw_image); | 919 controller.GetDecodedImageForDraw(draw_image); |
| 911 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), | 920 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), |
| 912 another_decoded_draw_image.image()->uniqueID()); | 921 another_decoded_draw_image.image()->uniqueID()); |
| 913 | 922 |
| 914 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 923 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 915 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); | 924 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); |
| 916 } | 925 } |
| 917 | 926 |
| 918 TEST(SoftwareImageDecodeControllerTest, | 927 TEST(SoftwareImageDecodeControllerTest, |
| 919 GetDecodedImageForDrawAtRasterDecodeDoesNotPreventTasks) { | 928 GetDecodedImageForDrawAtRasterDecodeDoesNotPreventTasks) { |
| 920 SoftwareImageDecodeController controller; | 929 TestSoftwareImageDecodeController controller; |
| 921 bool is_decomposable = true; | 930 bool is_decomposable = true; |
| 922 SkFilterQuality quality = kHigh_SkFilterQuality; | 931 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 923 | 932 |
| 924 sk_sp<SkImage> image = CreateImage(100, 100); | 933 sk_sp<SkImage> image = CreateImage(100, 100); |
| 925 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 934 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 926 quality, | 935 quality, |
| 927 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 936 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 928 | 937 |
| 929 DecodedDrawImage decoded_draw_image = | 938 DecodedDrawImage decoded_draw_image = |
| 930 controller.GetDecodedImageForDraw(draw_image); | 939 controller.GetDecodedImageForDraw(draw_image); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 963 another_decoded_draw_image.image()->uniqueID()); | 972 another_decoded_draw_image.image()->uniqueID()); |
| 964 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode()); | 973 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode()); |
| 965 | 974 |
| 966 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 975 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 967 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); | 976 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); |
| 968 controller.UnrefImage(draw_image); | 977 controller.UnrefImage(draw_image); |
| 969 } | 978 } |
| 970 | 979 |
| 971 TEST(SoftwareImageDecodeControllerTest, | 980 TEST(SoftwareImageDecodeControllerTest, |
| 972 GetDecodedImageForDrawAtRasterDecodeIsUsedForLockedCache) { | 981 GetDecodedImageForDrawAtRasterDecodeIsUsedForLockedCache) { |
| 973 SoftwareImageDecodeController controller; | 982 TestSoftwareImageDecodeController controller; |
| 974 bool is_decomposable = true; | 983 bool is_decomposable = true; |
| 975 SkFilterQuality quality = kHigh_SkFilterQuality; | 984 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 976 | 985 |
| 977 sk_sp<SkImage> image = CreateImage(100, 100); | 986 sk_sp<SkImage> image = CreateImage(100, 100); |
| 978 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 987 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 979 quality, | 988 quality, |
| 980 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 989 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 981 | 990 |
| 982 DecodedDrawImage decoded_draw_image = | 991 DecodedDrawImage decoded_draw_image = |
| 983 controller.GetDecodedImageForDraw(draw_image); | 992 controller.GetDecodedImageForDraw(draw_image); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1016 // raster time, since it's now in the locked cache. | 1025 // raster time, since it's now in the locked cache. |
| 1017 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), | 1026 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), |
| 1018 another_decoded_draw_image.image()->uniqueID()); | 1027 another_decoded_draw_image.image()->uniqueID()); |
| 1019 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode()); | 1028 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode()); |
| 1020 | 1029 |
| 1021 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); | 1030 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); |
| 1022 controller.UnrefImage(draw_image); | 1031 controller.UnrefImage(draw_image); |
| 1023 } | 1032 } |
| 1024 | 1033 |
| 1025 TEST(SoftwareImageDecodeControllerTest, ZeroSizedImagesAreSkipped) { | 1034 TEST(SoftwareImageDecodeControllerTest, ZeroSizedImagesAreSkipped) { |
| 1026 SoftwareImageDecodeController controller; | 1035 TestSoftwareImageDecodeController controller; |
| 1027 bool is_decomposable = true; | 1036 bool is_decomposable = true; |
| 1028 SkFilterQuality quality = kHigh_SkFilterQuality; | 1037 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1029 | 1038 |
| 1030 sk_sp<SkImage> image = CreateImage(100, 100); | 1039 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1031 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1040 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1032 quality, | 1041 quality, |
| 1033 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); | 1042 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); |
| 1034 | 1043 |
| 1035 scoped_refptr<TileTask> task; | 1044 scoped_refptr<TileTask> task; |
| 1036 bool need_unref = controller.GetTaskForImageAndRef( | 1045 bool need_unref = controller.GetTaskForImageAndRef( |
| 1037 draw_image, ImageDecodeController::TracingInfo(), &task); | 1046 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1038 EXPECT_FALSE(task); | 1047 EXPECT_FALSE(task); |
| 1039 EXPECT_FALSE(need_unref); | 1048 EXPECT_FALSE(need_unref); |
| 1040 | 1049 |
| 1041 DecodedDrawImage decoded_draw_image = | 1050 DecodedDrawImage decoded_draw_image = |
| 1042 controller.GetDecodedImageForDraw(draw_image); | 1051 controller.GetDecodedImageForDraw(draw_image); |
| 1043 EXPECT_FALSE(decoded_draw_image.image()); | 1052 EXPECT_FALSE(decoded_draw_image.image()); |
| 1044 | 1053 |
| 1045 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1054 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1046 } | 1055 } |
| 1047 | 1056 |
| 1048 TEST(SoftwareImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { | 1057 TEST(SoftwareImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { |
| 1049 SoftwareImageDecodeController controller; | 1058 TestSoftwareImageDecodeController controller; |
| 1050 bool is_decomposable = true; | 1059 bool is_decomposable = true; |
| 1051 SkFilterQuality quality = kHigh_SkFilterQuality; | 1060 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1052 | 1061 |
| 1053 sk_sp<SkImage> image = CreateImage(100, 100); | 1062 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1054 DrawImage draw_image( | 1063 DrawImage draw_image( |
| 1055 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), | 1064 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), |
| 1056 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 1065 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 1057 | 1066 |
| 1058 scoped_refptr<TileTask> task; | 1067 scoped_refptr<TileTask> task; |
| 1059 bool need_unref = controller.GetTaskForImageAndRef( | 1068 bool need_unref = controller.GetTaskForImageAndRef( |
| 1060 draw_image, ImageDecodeController::TracingInfo(), &task); | 1069 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1061 EXPECT_FALSE(task); | 1070 EXPECT_FALSE(task); |
| 1062 EXPECT_FALSE(need_unref); | 1071 EXPECT_FALSE(need_unref); |
| 1063 | 1072 |
| 1064 DecodedDrawImage decoded_draw_image = | 1073 DecodedDrawImage decoded_draw_image = |
| 1065 controller.GetDecodedImageForDraw(draw_image); | 1074 controller.GetDecodedImageForDraw(draw_image); |
| 1066 EXPECT_FALSE(decoded_draw_image.image()); | 1075 EXPECT_FALSE(decoded_draw_image.image()); |
| 1067 | 1076 |
| 1068 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1077 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1069 } | 1078 } |
| 1070 | 1079 |
| 1071 TEST(SoftwareImageDecodeControllerTest, LowQualityFilterIsHandled) { | 1080 TEST(SoftwareImageDecodeControllerTest, LowQualityFilterIsHandled) { |
| 1072 SoftwareImageDecodeController controller; | 1081 TestSoftwareImageDecodeController controller; |
| 1073 bool is_decomposable = true; | 1082 bool is_decomposable = true; |
| 1074 SkFilterQuality quality = kLow_SkFilterQuality; | 1083 SkFilterQuality quality = kLow_SkFilterQuality; |
| 1075 | 1084 |
| 1076 sk_sp<SkImage> image = CreateImage(100, 100); | 1085 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1077 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1086 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1078 quality, | 1087 quality, |
| 1079 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 1088 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 1080 | 1089 |
| 1081 scoped_refptr<TileTask> task; | 1090 scoped_refptr<TileTask> task; |
| 1082 bool need_unref = controller.GetTaskForImageAndRef( | 1091 bool need_unref = controller.GetTaskForImageAndRef( |
| 1083 draw_image, ImageDecodeController::TracingInfo(), &task); | 1092 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1084 EXPECT_TRUE(task); | 1093 EXPECT_TRUE(task); |
| 1085 EXPECT_TRUE(need_unref); | 1094 EXPECT_TRUE(need_unref); |
| 1086 | 1095 |
| 1087 DecodedDrawImage decoded_draw_image = | 1096 DecodedDrawImage decoded_draw_image = |
| 1088 controller.GetDecodedImageForDraw(draw_image); | 1097 controller.GetDecodedImageForDraw(draw_image); |
| 1089 EXPECT_TRUE(decoded_draw_image.image()); | 1098 EXPECT_TRUE(decoded_draw_image.image()); |
| 1090 // If we decoded the image and cached it, it would be stored in a different | 1099 // If we decoded the image and cached it, it would be stored in a different |
| 1091 // SkImage object. | 1100 // SkImage object. |
| 1092 EXPECT_TRUE(decoded_draw_image.image() != image); | 1101 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1093 | 1102 |
| 1094 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1103 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1095 controller.UnrefImage(draw_image); | 1104 controller.UnrefImage(draw_image); |
| 1096 } | 1105 } |
| 1097 | 1106 |
| 1098 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { | 1107 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { |
| 1099 SoftwareImageDecodeController controller; | 1108 TestSoftwareImageDecodeController controller; |
| 1100 bool is_decomposable = true; | 1109 bool is_decomposable = true; |
| 1101 SkFilterQuality quality = kLow_SkFilterQuality; | 1110 SkFilterQuality quality = kLow_SkFilterQuality; |
| 1102 | 1111 |
| 1103 sk_sp<SkImage> image = CreateImage(100, 100); | 1112 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1104 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, | 1113 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| 1105 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1114 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 1106 | 1115 |
| 1107 scoped_refptr<TileTask> task; | 1116 scoped_refptr<TileTask> task; |
| 1108 bool need_unref = controller.GetTaskForImageAndRef( | 1117 bool need_unref = controller.GetTaskForImageAndRef( |
| 1109 draw_image, ImageDecodeController::TracingInfo(), &task); | 1118 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1110 EXPECT_TRUE(task); | 1119 EXPECT_TRUE(task); |
| 1111 EXPECT_TRUE(need_unref); | 1120 EXPECT_TRUE(need_unref); |
| 1112 | 1121 |
| 1113 DecodedDrawImage decoded_draw_image = | 1122 DecodedDrawImage decoded_draw_image = |
| 1114 controller.GetDecodedImageForDraw(draw_image); | 1123 controller.GetDecodedImageForDraw(draw_image); |
| 1115 EXPECT_TRUE(decoded_draw_image.image()); | 1124 EXPECT_TRUE(decoded_draw_image.image()); |
| 1116 // If we decoded the image and cached it, it would be stored in a different | 1125 // If we decoded the image and cached it, it would be stored in a different |
| 1117 // SkImage object. | 1126 // SkImage object. |
| 1118 EXPECT_TRUE(decoded_draw_image.image() != image); | 1127 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1119 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1128 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1120 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); | 1129 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
| 1121 | 1130 |
| 1122 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1131 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1123 controller.UnrefImage(draw_image); | 1132 controller.UnrefImage(draw_image); |
| 1124 } | 1133 } |
| 1125 | 1134 |
| 1126 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { | 1135 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { |
| 1127 SoftwareImageDecodeController controller; | 1136 TestSoftwareImageDecodeController controller; |
| 1128 bool is_decomposable = true; | 1137 bool is_decomposable = true; |
| 1129 SkFilterQuality quality = kNone_SkFilterQuality; | 1138 SkFilterQuality quality = kNone_SkFilterQuality; |
| 1130 | 1139 |
| 1131 sk_sp<SkImage> image = CreateImage(100, 100); | 1140 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1132 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, | 1141 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| 1133 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1142 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 1134 | 1143 |
| 1135 scoped_refptr<TileTask> task; | 1144 scoped_refptr<TileTask> task; |
| 1136 bool need_unref = controller.GetTaskForImageAndRef( | 1145 bool need_unref = controller.GetTaskForImageAndRef( |
| 1137 draw_image, ImageDecodeController::TracingInfo(), &task); | 1146 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1138 EXPECT_TRUE(task); | 1147 EXPECT_TRUE(task); |
| 1139 EXPECT_TRUE(need_unref); | 1148 EXPECT_TRUE(need_unref); |
| 1140 | 1149 |
| 1141 DecodedDrawImage decoded_draw_image = | 1150 DecodedDrawImage decoded_draw_image = |
| 1142 controller.GetDecodedImageForDraw(draw_image); | 1151 controller.GetDecodedImageForDraw(draw_image); |
| 1143 EXPECT_TRUE(decoded_draw_image.image()); | 1152 EXPECT_TRUE(decoded_draw_image.image()); |
| 1144 // If we decoded the image and cached it, it would be stored in a different | 1153 // If we decoded the image and cached it, it would be stored in a different |
| 1145 // SkImage object. | 1154 // SkImage object. |
| 1146 EXPECT_TRUE(decoded_draw_image.image() != image); | 1155 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1147 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); | 1156 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1148 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); | 1157 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
| 1149 | 1158 |
| 1150 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1159 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1151 controller.UnrefImage(draw_image); | 1160 controller.UnrefImage(draw_image); |
| 1152 } | 1161 } |
| 1153 | 1162 |
| 1154 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt01_5ScaleIsHandled) { | 1163 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt01_5ScaleIsHandled) { |
| 1155 SoftwareImageDecodeController controller; | 1164 TestSoftwareImageDecodeController controller; |
| 1156 bool is_decomposable = true; | 1165 bool is_decomposable = true; |
| 1157 SkFilterQuality quality = kMedium_SkFilterQuality; | 1166 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1158 | 1167 |
| 1159 sk_sp<SkImage> image = CreateImage(500, 200); | 1168 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1160 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1169 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1161 quality, | 1170 quality, |
| 1162 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); | 1171 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); |
| 1163 | 1172 |
| 1164 scoped_refptr<TileTask> task; | 1173 scoped_refptr<TileTask> task; |
| 1165 bool need_unref = controller.GetTaskForImageAndRef( | 1174 bool need_unref = controller.GetTaskForImageAndRef( |
| 1166 draw_image, ImageDecodeController::TracingInfo(), &task); | 1175 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1167 EXPECT_TRUE(task); | 1176 EXPECT_TRUE(task); |
| 1168 EXPECT_TRUE(need_unref); | 1177 EXPECT_TRUE(need_unref); |
| 1169 | 1178 |
| 1170 DecodedDrawImage decoded_draw_image = | 1179 DecodedDrawImage decoded_draw_image = |
| 1171 controller.GetDecodedImageForDraw(draw_image); | 1180 controller.GetDecodedImageForDraw(draw_image); |
| 1172 EXPECT_TRUE(decoded_draw_image.image()); | 1181 EXPECT_TRUE(decoded_draw_image.image()); |
| 1173 // If we decoded the image and cached it, it would be stored in a different | 1182 // If we decoded the image and cached it, it would be stored in a different |
| 1174 // SkImageObject. | 1183 // SkImageObject. |
| 1175 EXPECT_TRUE(decoded_draw_image.image() != image); | 1184 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1176 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1185 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1177 EXPECT_EQ(500, decoded_draw_image.image()->width()); | 1186 EXPECT_EQ(500, decoded_draw_image.image()->width()); |
| 1178 EXPECT_EQ(200, decoded_draw_image.image()->height()); | 1187 EXPECT_EQ(200, decoded_draw_image.image()->height()); |
| 1179 | 1188 |
| 1180 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1189 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1181 controller.UnrefImage(draw_image); | 1190 controller.UnrefImage(draw_image); |
| 1182 } | 1191 } |
| 1183 | 1192 |
| 1184 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt1_0ScaleIsHandled) { | 1193 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt1_0ScaleIsHandled) { |
| 1185 SoftwareImageDecodeController controller; | 1194 TestSoftwareImageDecodeController controller; |
| 1186 bool is_decomposable = true; | 1195 bool is_decomposable = true; |
| 1187 SkFilterQuality quality = kMedium_SkFilterQuality; | 1196 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1188 | 1197 |
| 1189 sk_sp<SkImage> image = CreateImage(500, 200); | 1198 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1190 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1199 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1191 quality, | 1200 quality, |
| 1192 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 1201 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 1193 | 1202 |
| 1194 scoped_refptr<TileTask> task; | 1203 scoped_refptr<TileTask> task; |
| 1195 bool need_unref = controller.GetTaskForImageAndRef( | 1204 bool need_unref = controller.GetTaskForImageAndRef( |
| 1196 draw_image, ImageDecodeController::TracingInfo(), &task); | 1205 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1197 EXPECT_TRUE(task); | 1206 EXPECT_TRUE(task); |
| 1198 EXPECT_TRUE(need_unref); | 1207 EXPECT_TRUE(need_unref); |
| 1199 | 1208 |
| 1200 DecodedDrawImage decoded_draw_image = | 1209 DecodedDrawImage decoded_draw_image = |
| 1201 controller.GetDecodedImageForDraw(draw_image); | 1210 controller.GetDecodedImageForDraw(draw_image); |
| 1202 EXPECT_TRUE(decoded_draw_image.image()); | 1211 EXPECT_TRUE(decoded_draw_image.image()); |
| 1203 // If we decoded the image and cached it, it would be stored in a different | 1212 // If we decoded the image and cached it, it would be stored in a different |
| 1204 // SkImageObject. | 1213 // SkImageObject. |
| 1205 EXPECT_TRUE(decoded_draw_image.image() != image); | 1214 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1206 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1215 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1207 EXPECT_EQ(500, decoded_draw_image.image()->width()); | 1216 EXPECT_EQ(500, decoded_draw_image.image()->width()); |
| 1208 EXPECT_EQ(200, decoded_draw_image.image()->height()); | 1217 EXPECT_EQ(200, decoded_draw_image.image()->height()); |
| 1209 | 1218 |
| 1210 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1219 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1211 controller.UnrefImage(draw_image); | 1220 controller.UnrefImage(draw_image); |
| 1212 } | 1221 } |
| 1213 | 1222 |
| 1214 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_75ScaleIsHandled) { | 1223 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_75ScaleIsHandled) { |
| 1215 SoftwareImageDecodeController controller; | 1224 TestSoftwareImageDecodeController controller; |
| 1216 bool is_decomposable = true; | 1225 bool is_decomposable = true; |
| 1217 SkFilterQuality quality = kMedium_SkFilterQuality; | 1226 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1218 | 1227 |
| 1219 sk_sp<SkImage> image = CreateImage(500, 200); | 1228 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1220 DrawImage draw_image( | 1229 DrawImage draw_image( |
| 1221 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1230 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1222 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable)); | 1231 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable)); |
| 1223 | 1232 |
| 1224 scoped_refptr<TileTask> task; | 1233 scoped_refptr<TileTask> task; |
| 1225 bool need_unref = controller.GetTaskForImageAndRef( | 1234 bool need_unref = controller.GetTaskForImageAndRef( |
| 1226 draw_image, ImageDecodeController::TracingInfo(), &task); | 1235 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1227 EXPECT_TRUE(task); | 1236 EXPECT_TRUE(task); |
| 1228 EXPECT_TRUE(need_unref); | 1237 EXPECT_TRUE(need_unref); |
| 1229 | 1238 |
| 1230 DecodedDrawImage decoded_draw_image = | 1239 DecodedDrawImage decoded_draw_image = |
| 1231 controller.GetDecodedImageForDraw(draw_image); | 1240 controller.GetDecodedImageForDraw(draw_image); |
| 1232 EXPECT_TRUE(decoded_draw_image.image()); | 1241 EXPECT_TRUE(decoded_draw_image.image()); |
| 1233 // If we decoded the image and cached it, it would be stored in a different | 1242 // If we decoded the image and cached it, it would be stored in a different |
| 1234 // SkImageObject. | 1243 // SkImageObject. |
| 1235 EXPECT_TRUE(decoded_draw_image.image() != image); | 1244 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1236 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1245 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1237 EXPECT_EQ(500, decoded_draw_image.image()->width()); | 1246 EXPECT_EQ(500, decoded_draw_image.image()->width()); |
| 1238 EXPECT_EQ(200, decoded_draw_image.image()->height()); | 1247 EXPECT_EQ(200, decoded_draw_image.image()->height()); |
| 1239 | 1248 |
| 1240 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1249 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1241 controller.UnrefImage(draw_image); | 1250 controller.UnrefImage(draw_image); |
| 1242 } | 1251 } |
| 1243 | 1252 |
| 1244 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_5ScaleIsHandled) { | 1253 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_5ScaleIsHandled) { |
| 1245 SoftwareImageDecodeController controller; | 1254 TestSoftwareImageDecodeController controller; |
| 1246 bool is_decomposable = true; | 1255 bool is_decomposable = true; |
| 1247 SkFilterQuality quality = kMedium_SkFilterQuality; | 1256 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1248 | 1257 |
| 1249 sk_sp<SkImage> image = CreateImage(500, 200); | 1258 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1250 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1259 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1251 quality, | 1260 quality, |
| 1252 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1261 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 1253 | 1262 |
| 1254 scoped_refptr<TileTask> task; | 1263 scoped_refptr<TileTask> task; |
| 1255 bool need_unref = controller.GetTaskForImageAndRef( | 1264 bool need_unref = controller.GetTaskForImageAndRef( |
| 1256 draw_image, ImageDecodeController::TracingInfo(), &task); | 1265 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1257 EXPECT_TRUE(task); | 1266 EXPECT_TRUE(task); |
| 1258 EXPECT_TRUE(need_unref); | 1267 EXPECT_TRUE(need_unref); |
| 1259 | 1268 |
| 1260 DecodedDrawImage decoded_draw_image = | 1269 DecodedDrawImage decoded_draw_image = |
| 1261 controller.GetDecodedImageForDraw(draw_image); | 1270 controller.GetDecodedImageForDraw(draw_image); |
| 1262 EXPECT_TRUE(decoded_draw_image.image()); | 1271 EXPECT_TRUE(decoded_draw_image.image()); |
| 1263 // If we decoded the image and cached it, it would be stored in a different | 1272 // If we decoded the image and cached it, it would be stored in a different |
| 1264 // SkImageObject. | 1273 // SkImageObject. |
| 1265 EXPECT_TRUE(decoded_draw_image.image() != image); | 1274 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1266 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1275 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1267 EXPECT_EQ(250, decoded_draw_image.image()->width()); | 1276 EXPECT_EQ(250, decoded_draw_image.image()->width()); |
| 1268 EXPECT_EQ(100, decoded_draw_image.image()->height()); | 1277 EXPECT_EQ(100, decoded_draw_image.image()->height()); |
| 1269 | 1278 |
| 1270 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1279 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1271 controller.UnrefImage(draw_image); | 1280 controller.UnrefImage(draw_image); |
| 1272 } | 1281 } |
| 1273 | 1282 |
| 1274 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_49ScaleIsHandled) { | 1283 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_49ScaleIsHandled) { |
| 1275 SoftwareImageDecodeController controller; | 1284 TestSoftwareImageDecodeController controller; |
| 1276 bool is_decomposable = true; | 1285 bool is_decomposable = true; |
| 1277 SkFilterQuality quality = kMedium_SkFilterQuality; | 1286 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1278 | 1287 |
| 1279 sk_sp<SkImage> image = CreateImage(500, 200); | 1288 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1280 DrawImage draw_image( | 1289 DrawImage draw_image( |
| 1281 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1290 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1282 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); | 1291 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); |
| 1283 | 1292 |
| 1284 scoped_refptr<TileTask> task; | 1293 scoped_refptr<TileTask> task; |
| 1285 bool need_unref = controller.GetTaskForImageAndRef( | 1294 bool need_unref = controller.GetTaskForImageAndRef( |
| 1286 draw_image, ImageDecodeController::TracingInfo(), &task); | 1295 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1287 EXPECT_TRUE(task); | 1296 EXPECT_TRUE(task); |
| 1288 EXPECT_TRUE(need_unref); | 1297 EXPECT_TRUE(need_unref); |
| 1289 | 1298 |
| 1290 DecodedDrawImage decoded_draw_image = | 1299 DecodedDrawImage decoded_draw_image = |
| 1291 controller.GetDecodedImageForDraw(draw_image); | 1300 controller.GetDecodedImageForDraw(draw_image); |
| 1292 EXPECT_TRUE(decoded_draw_image.image()); | 1301 EXPECT_TRUE(decoded_draw_image.image()); |
| 1293 // If we decoded the image and cached it, it would be stored in a different | 1302 // If we decoded the image and cached it, it would be stored in a different |
| 1294 // SkImageObject. | 1303 // SkImageObject. |
| 1295 EXPECT_TRUE(decoded_draw_image.image() != image); | 1304 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1296 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1305 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1297 EXPECT_EQ(250, decoded_draw_image.image()->width()); | 1306 EXPECT_EQ(250, decoded_draw_image.image()->width()); |
| 1298 EXPECT_EQ(100, decoded_draw_image.image()->height()); | 1307 EXPECT_EQ(100, decoded_draw_image.image()->height()); |
| 1299 | 1308 |
| 1300 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1309 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1301 controller.UnrefImage(draw_image); | 1310 controller.UnrefImage(draw_image); |
| 1302 } | 1311 } |
| 1303 | 1312 |
| 1304 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_1ScaleIsHandled) { | 1313 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_1ScaleIsHandled) { |
| 1305 SoftwareImageDecodeController controller; | 1314 TestSoftwareImageDecodeController controller; |
| 1306 bool is_decomposable = true; | 1315 bool is_decomposable = true; |
| 1307 SkFilterQuality quality = kMedium_SkFilterQuality; | 1316 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1308 | 1317 |
| 1309 sk_sp<SkImage> image = CreateImage(500, 200); | 1318 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1310 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1319 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1311 quality, | 1320 quality, |
| 1312 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable)); | 1321 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable)); |
| 1313 | 1322 |
| 1314 scoped_refptr<TileTask> task; | 1323 scoped_refptr<TileTask> task; |
| 1315 bool need_unref = controller.GetTaskForImageAndRef( | 1324 bool need_unref = controller.GetTaskForImageAndRef( |
| 1316 draw_image, ImageDecodeController::TracingInfo(), &task); | 1325 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1317 EXPECT_TRUE(task); | 1326 EXPECT_TRUE(task); |
| 1318 EXPECT_TRUE(need_unref); | 1327 EXPECT_TRUE(need_unref); |
| 1319 | 1328 |
| 1320 DecodedDrawImage decoded_draw_image = | 1329 DecodedDrawImage decoded_draw_image = |
| 1321 controller.GetDecodedImageForDraw(draw_image); | 1330 controller.GetDecodedImageForDraw(draw_image); |
| 1322 EXPECT_TRUE(decoded_draw_image.image()); | 1331 EXPECT_TRUE(decoded_draw_image.image()); |
| 1323 // If we decoded the image and cached it, it would be stored in a different | 1332 // If we decoded the image and cached it, it would be stored in a different |
| 1324 // SkImageObject. | 1333 // SkImageObject. |
| 1325 EXPECT_TRUE(decoded_draw_image.image() != image); | 1334 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1326 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1335 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1327 EXPECT_EQ(62, decoded_draw_image.image()->width()); | 1336 EXPECT_EQ(62, decoded_draw_image.image()->width()); |
| 1328 EXPECT_EQ(25, decoded_draw_image.image()->height()); | 1337 EXPECT_EQ(25, decoded_draw_image.image()->height()); |
| 1329 | 1338 |
| 1330 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1339 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1331 controller.UnrefImage(draw_image); | 1340 controller.UnrefImage(draw_image); |
| 1332 } | 1341 } |
| 1333 | 1342 |
| 1334 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_01ScaleIsHandled) { | 1343 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_01ScaleIsHandled) { |
| 1335 SoftwareImageDecodeController controller; | 1344 TestSoftwareImageDecodeController controller; |
| 1336 bool is_decomposable = true; | 1345 bool is_decomposable = true; |
| 1337 SkFilterQuality quality = kMedium_SkFilterQuality; | 1346 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1338 | 1347 |
| 1339 sk_sp<SkImage> image = CreateImage(500, 200); | 1348 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1340 DrawImage draw_image( | 1349 DrawImage draw_image( |
| 1341 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1350 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1342 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable)); | 1351 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable)); |
| 1343 | 1352 |
| 1344 scoped_refptr<TileTask> task; | 1353 scoped_refptr<TileTask> task; |
| 1345 bool need_unref = controller.GetTaskForImageAndRef( | 1354 bool need_unref = controller.GetTaskForImageAndRef( |
| 1346 draw_image, ImageDecodeController::TracingInfo(), &task); | 1355 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1347 EXPECT_TRUE(task); | 1356 EXPECT_TRUE(task); |
| 1348 EXPECT_TRUE(need_unref); | 1357 EXPECT_TRUE(need_unref); |
| 1349 | 1358 |
| 1350 DecodedDrawImage decoded_draw_image = | 1359 DecodedDrawImage decoded_draw_image = |
| 1351 controller.GetDecodedImageForDraw(draw_image); | 1360 controller.GetDecodedImageForDraw(draw_image); |
| 1352 EXPECT_TRUE(decoded_draw_image.image()); | 1361 EXPECT_TRUE(decoded_draw_image.image()); |
| 1353 // If we decoded the image and cached it, it would be stored in a different | 1362 // If we decoded the image and cached it, it would be stored in a different |
| 1354 // SkImageObject. | 1363 // SkImageObject. |
| 1355 EXPECT_TRUE(decoded_draw_image.image() != image); | 1364 EXPECT_TRUE(decoded_draw_image.image() != image); |
| 1356 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1365 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1357 EXPECT_EQ(7, decoded_draw_image.image()->width()); | 1366 EXPECT_EQ(7, decoded_draw_image.image()->width()); |
| 1358 EXPECT_EQ(3, decoded_draw_image.image()->height()); | 1367 EXPECT_EQ(3, decoded_draw_image.image()->height()); |
| 1359 | 1368 |
| 1360 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1369 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1361 controller.UnrefImage(draw_image); | 1370 controller.UnrefImage(draw_image); |
| 1362 } | 1371 } |
| 1363 | 1372 |
| 1364 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_001ScaleIsHandled) { | 1373 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_001ScaleIsHandled) { |
| 1365 SoftwareImageDecodeController controller; | 1374 TestSoftwareImageDecodeController controller; |
| 1366 bool is_decomposable = true; | 1375 bool is_decomposable = true; |
| 1367 SkFilterQuality quality = kMedium_SkFilterQuality; | 1376 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1368 | 1377 |
| 1369 sk_sp<SkImage> image = CreateImage(500, 200); | 1378 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1370 DrawImage draw_image( | 1379 DrawImage draw_image( |
| 1371 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1380 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1372 CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable)); | 1381 CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable)); |
| 1373 | 1382 |
| 1374 scoped_refptr<TileTask> task; | 1383 scoped_refptr<TileTask> task; |
| 1375 bool need_unref = controller.GetTaskForImageAndRef( | 1384 bool need_unref = controller.GetTaskForImageAndRef( |
| 1376 draw_image, ImageDecodeController::TracingInfo(), &task); | 1385 draw_image, ImageDecodeController::TracingInfo(), &task); |
| 1377 EXPECT_FALSE(task); | 1386 EXPECT_FALSE(task); |
| 1378 EXPECT_FALSE(need_unref); | 1387 EXPECT_FALSE(need_unref); |
| 1379 | 1388 |
| 1380 DecodedDrawImage decoded_draw_image = | 1389 DecodedDrawImage decoded_draw_image = |
| 1381 controller.GetDecodedImageForDraw(draw_image); | 1390 controller.GetDecodedImageForDraw(draw_image); |
| 1382 EXPECT_FALSE(decoded_draw_image.image()); | 1391 EXPECT_FALSE(decoded_draw_image.image()); |
| 1383 | 1392 |
| 1384 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1393 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1385 } | 1394 } |
| 1386 | 1395 |
| 1387 TEST(SoftwareImageDecodeControllerTest, | 1396 TEST(SoftwareImageDecodeControllerTest, |
| 1388 MediumQualityImagesAreTheSameAt0_5And0_49Scale) { | 1397 MediumQualityImagesAreTheSameAt0_5And0_49Scale) { |
| 1389 SoftwareImageDecodeController controller; | 1398 TestSoftwareImageDecodeController controller; |
| 1390 bool is_decomposable = true; | 1399 bool is_decomposable = true; |
| 1391 SkFilterQuality quality = kMedium_SkFilterQuality; | 1400 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 1392 | 1401 |
| 1393 sk_sp<SkImage> image = CreateImage(500, 200); | 1402 sk_sp<SkImage> image = CreateImage(500, 200); |
| 1394 DrawImage draw_image_50( | 1403 DrawImage draw_image_50( |
| 1395 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1404 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1396 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1405 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 1397 DrawImage draw_image_49( | 1406 DrawImage draw_image_49( |
| 1398 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1407 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1399 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); | 1408 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1429 EXPECT_EQ(decoded_draw_image_50.image(), decoded_draw_image_49.image()); | 1438 EXPECT_EQ(decoded_draw_image_50.image(), decoded_draw_image_49.image()); |
| 1430 | 1439 |
| 1431 controller.DrawWithImageFinished(draw_image_50, decoded_draw_image_50); | 1440 controller.DrawWithImageFinished(draw_image_50, decoded_draw_image_50); |
| 1432 controller.UnrefImage(draw_image_50); | 1441 controller.UnrefImage(draw_image_50); |
| 1433 controller.DrawWithImageFinished(draw_image_49, decoded_draw_image_49); | 1442 controller.DrawWithImageFinished(draw_image_49, decoded_draw_image_49); |
| 1434 controller.UnrefImage(draw_image_49); | 1443 controller.UnrefImage(draw_image_49); |
| 1435 } | 1444 } |
| 1436 | 1445 |
| 1437 } // namespace | 1446 } // namespace |
| 1438 } // namespace cc | 1447 } // namespace cc |
| OLD | NEW |