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 |