| 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/image_decode_controller.h" | 5 #include "cc/tiles/image_decode_controller.h" |
| 6 | 6 |
| 7 #include "cc/playback/draw_image.h" | 7 #include "cc/playback/draw_image.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace cc { | 10 namespace cc { |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable); | 288 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable); |
| 289 | 289 |
| 290 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 290 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 291 EXPECT_EQ(image->uniqueID(), key.image_id()); | 291 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 292 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 292 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 293 EXPECT_EQ(100, key.target_size().width()); | 293 EXPECT_EQ(100, key.target_size().width()); |
| 294 EXPECT_EQ(100, key.target_size().height()); | 294 EXPECT_EQ(100, key.target_size().height()); |
| 295 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); | 295 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); |
| 296 } | 296 } |
| 297 | 297 |
| 298 TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRect) { | |
| 299 skia::RefPtr<SkImage> image = CreateImage(100, 100); | |
| 300 bool has_perspective = false; | |
| 301 bool is_decomposable = true; | |
| 302 SkFilterQuality quality = kHigh_SkFilterQuality; | |
| 303 | |
| 304 DrawImage draw_image( | |
| 305 image.get(), SkIRect::MakeXYWH(25, 35, image->width(), image->height()), | |
| 306 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); | |
| 307 | |
| 308 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | |
| 309 EXPECT_EQ(image->uniqueID(), key.image_id()); | |
| 310 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | |
| 311 EXPECT_EQ(75, key.target_size().width()); | |
| 312 EXPECT_EQ(65, key.target_size().height()); | |
| 313 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect()); | |
| 314 EXPECT_EQ(75u * 65u * 4u, key.target_bytes()); | |
| 315 } | |
| 316 | |
| 317 TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRectWithScale) { | |
| 318 skia::RefPtr<SkImage> image = CreateImage(100, 100); | |
| 319 bool has_perspective = false; | |
| 320 bool is_decomposable = true; | |
| 321 SkFilterQuality quality = kHigh_SkFilterQuality; | |
| 322 | |
| 323 DrawImage draw_image( | |
| 324 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | |
| 325 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); | |
| 326 | |
| 327 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | |
| 328 EXPECT_EQ(image->uniqueID(), key.image_id()); | |
| 329 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); | |
| 330 EXPECT_EQ(40, key.target_size().width()); | |
| 331 EXPECT_EQ(35, key.target_size().height()); | |
| 332 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); | |
| 333 EXPECT_EQ(40u * 35u * 4u, key.target_bytes()); | |
| 334 } | |
| 335 | |
| 336 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) { | 298 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) { |
| 337 ImageDecodeController controller; | 299 ImageDecodeController controller; |
| 338 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 300 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 339 bool has_perspective = false; | 301 bool has_perspective = false; |
| 340 bool is_decomposable = true; | 302 bool is_decomposable = true; |
| 341 SkFilterQuality quality = kHigh_SkFilterQuality; | 303 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 342 uint64_t prepare_tiles_id = 1; | 304 uint64_t prepare_tiles_id = 1; |
| 343 | 305 |
| 344 DrawImage draw_image( | 306 DrawImage draw_image( |
| 345 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 307 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 643 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| 682 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 644 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
| 683 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 645 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 684 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 646 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 685 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 647 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
| 686 | 648 |
| 687 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 649 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 688 controller.UnrefImage(draw_image); | 650 controller.UnrefImage(draw_image); |
| 689 } | 651 } |
| 690 | 652 |
| 691 TEST(ImageDecodeControllerTest, GetDecodedImageForDrawWithNonContainedSrcRect) { | |
| 692 ImageDecodeController controller; | |
| 693 bool has_perspective = false; | |
| 694 bool is_decomposable = true; | |
| 695 uint64_t prepare_tiles_id = 1; | |
| 696 SkFilterQuality quality = kHigh_SkFilterQuality; | |
| 697 | |
| 698 skia::RefPtr<SkImage> image = CreateImage(100, 100); | |
| 699 DrawImage draw_image( | |
| 700 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | |
| 701 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); | |
| 702 scoped_refptr<ImageDecodeTask> task; | |
| 703 bool need_unref = | |
| 704 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | |
| 705 EXPECT_TRUE(need_unref); | |
| 706 EXPECT_TRUE(task); | |
| 707 | |
| 708 task->WillSchedule(); | |
| 709 task->ScheduleOnOriginThread(nullptr); | |
| 710 task->DidSchedule(); | |
| 711 | |
| 712 task->RunOnWorkerThread(); | |
| 713 | |
| 714 task->WillComplete(); | |
| 715 task->CompleteOnOriginThread(nullptr); | |
| 716 task->DidComplete(); | |
| 717 | |
| 718 DecodedDrawImage decoded_draw_image = | |
| 719 controller.GetDecodedImageForDraw(draw_image); | |
| 720 EXPECT_TRUE(decoded_draw_image.image()); | |
| 721 EXPECT_EQ(40, decoded_draw_image.image()->width()); | |
| 722 EXPECT_EQ(35, decoded_draw_image.image()->height()); | |
| 723 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | |
| 724 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | |
| 725 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | |
| 726 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | |
| 727 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | |
| 728 | |
| 729 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | |
| 730 controller.UnrefImage(draw_image); | |
| 731 } | |
| 732 | |
| 733 TEST(ImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { | 653 TEST(ImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { |
| 734 ImageDecodeController controller; | 654 ImageDecodeController controller; |
| 735 bool has_perspective = false; | 655 bool has_perspective = false; |
| 736 bool is_decomposable = true; | 656 bool is_decomposable = true; |
| 737 SkFilterQuality quality = kHigh_SkFilterQuality; | 657 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 738 | 658 |
| 739 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 659 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 740 DrawImage draw_image( | 660 DrawImage draw_image( |
| 741 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 661 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
| 742 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); | 662 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 916 EXPECT_FALSE(task); | 836 EXPECT_FALSE(task); |
| 917 EXPECT_FALSE(need_unref); | 837 EXPECT_FALSE(need_unref); |
| 918 | 838 |
| 919 DecodedDrawImage decoded_draw_image = | 839 DecodedDrawImage decoded_draw_image = |
| 920 controller.GetDecodedImageForDraw(draw_image); | 840 controller.GetDecodedImageForDraw(draw_image); |
| 921 EXPECT_FALSE(decoded_draw_image.image()); | 841 EXPECT_FALSE(decoded_draw_image.image()); |
| 922 | 842 |
| 923 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 843 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 924 } | 844 } |
| 925 | 845 |
| 926 TEST(ImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { | |
| 927 ImageDecodeController controller; | |
| 928 bool has_perspective = false; | |
| 929 bool is_decomposable = true; | |
| 930 uint64_t prepare_tiles_id = 1; | |
| 931 SkFilterQuality quality = kHigh_SkFilterQuality; | |
| 932 | |
| 933 skia::RefPtr<SkImage> image = CreateImage(100, 100); | |
| 934 DrawImage draw_image( | |
| 935 image.get(), SkIRect::MakeXYWH(150, 150, image->width(), image->height()), | |
| 936 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); | |
| 937 | |
| 938 scoped_refptr<ImageDecodeTask> task; | |
| 939 bool need_unref = | |
| 940 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | |
| 941 EXPECT_FALSE(task); | |
| 942 EXPECT_FALSE(need_unref); | |
| 943 | |
| 944 DecodedDrawImage decoded_draw_image = | |
| 945 controller.GetDecodedImageForDraw(draw_image); | |
| 946 EXPECT_FALSE(decoded_draw_image.image()); | |
| 947 | |
| 948 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | |
| 949 } | |
| 950 | |
| 951 } // namespace | 846 } // namespace |
| 952 } // namespace cc | 847 } // namespace cc |
| OLD | NEW |