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 |
298 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) { | 336 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) { |
299 ImageDecodeController controller; | 337 ImageDecodeController controller; |
300 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 338 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
301 bool has_perspective = false; | 339 bool has_perspective = false; |
302 bool is_decomposable = true; | 340 bool is_decomposable = true; |
303 SkFilterQuality quality = kHigh_SkFilterQuality; | 341 SkFilterQuality quality = kHigh_SkFilterQuality; |
304 uint64_t prepare_tiles_id = 1; | 342 uint64_t prepare_tiles_id = 1; |
305 | 343 |
306 DrawImage draw_image( | 344 DrawImage draw_image( |
307 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 345 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 681 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
644 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 682 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
645 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 683 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
646 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 684 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
647 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 685 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
648 | 686 |
649 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 687 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
650 controller.UnrefImage(draw_image); | 688 controller.UnrefImage(draw_image); |
651 } | 689 } |
652 | 690 |
| 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 |
653 TEST(ImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { | 733 TEST(ImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { |
654 ImageDecodeController controller; | 734 ImageDecodeController controller; |
655 bool has_perspective = false; | 735 bool has_perspective = false; |
656 bool is_decomposable = true; | 736 bool is_decomposable = true; |
657 SkFilterQuality quality = kHigh_SkFilterQuality; | 737 SkFilterQuality quality = kHigh_SkFilterQuality; |
658 | 738 |
659 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 739 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
660 DrawImage draw_image( | 740 DrawImage draw_image( |
661 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 741 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
662 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); | 742 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 EXPECT_FALSE(task); | 916 EXPECT_FALSE(task); |
837 EXPECT_FALSE(need_unref); | 917 EXPECT_FALSE(need_unref); |
838 | 918 |
839 DecodedDrawImage decoded_draw_image = | 919 DecodedDrawImage decoded_draw_image = |
840 controller.GetDecodedImageForDraw(draw_image); | 920 controller.GetDecodedImageForDraw(draw_image); |
841 EXPECT_FALSE(decoded_draw_image.image()); | 921 EXPECT_FALSE(decoded_draw_image.image()); |
842 | 922 |
843 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 923 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
844 } | 924 } |
845 | 925 |
| 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 |
846 } // namespace | 951 } // namespace |
847 } // namespace cc | 952 } // namespace cc |
OLD | NEW |