Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(636)

Side by Side Diff: skia/ext/pixel_ref_utils_unittest.cc

Issue 1294673006: Update GatherPixelRefDevice to the new SkImage/SkPixelRef API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update cc_unittests Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « skia/ext/pixel_ref_utils.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/compiler_specific.h" 5 #include "base/compiler_specific.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "cc/test/geometry_test_utils.h" 7 #include "cc/test/geometry_test_utils.h"
8 #include "skia/ext/pixel_ref_utils.h" 8 #include "skia/ext/pixel_ref_utils.h"
9 #include "skia/ext/refptr.h" 9 #include "skia/ext/refptr.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/skia/include/core/SkBitmap.h" 11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "third_party/skia/include/core/SkCanvas.h" 12 #include "third_party/skia/include/core/SkCanvas.h"
13 #include "third_party/skia/include/core/SkImage.h"
14 #include "third_party/skia/include/core/SkImageGenerator.h"
13 #include "third_party/skia/include/core/SkPictureRecorder.h" 15 #include "third_party/skia/include/core/SkPictureRecorder.h"
14 #include "third_party/skia/include/core/SkPixelRef.h" 16 #include "third_party/skia/include/core/SkPixelRef.h"
15 #include "third_party/skia/include/core/SkPoint.h" 17 #include "third_party/skia/include/core/SkPoint.h"
16 #include "third_party/skia/include/core/SkShader.h" 18 #include "third_party/skia/include/core/SkShader.h"
17 #include "third_party/skia/src/core/SkOrderedReadBuffer.h" 19 #include "third_party/skia/src/core/SkOrderedReadBuffer.h"
18 #include "ui/gfx/geometry/rect.h" 20 #include "ui/gfx/geometry/rect.h"
19 #include "ui/gfx/skia_util.h" 21 #include "ui/gfx/skia_util.h"
20 22
21 namespace skia { 23 namespace skia {
22 24
23 namespace { 25 namespace {
24 26
25 void CreateBitmap(gfx::Size size, const char* uri, SkBitmap* bitmap); 27 class TestImageGenerator : public SkImageGenerator {
28 public:
29 TestImageGenerator(const SkImageInfo& info)
30 : SkImageGenerator(info) { }
31 };
32
33 void CreateDiscardableBitmap(const gfx::Size& size, SkBitmap* bitmap) {
34 const SkImageInfo info =
35 SkImageInfo::MakeN32Premul(size.width(), size.height());
36 SkInstallDiscardablePixelRef(new TestImageGenerator(info), bitmap);
37 }
38
39 skia::RefPtr<SkImage> CreateDiscardableImage(const gfx::Size& size) {
40 const SkImageInfo info =
41 SkImageInfo::MakeN32Premul(size.width(), size.height());
42 return skia::AdoptRef(
43 SkImage::NewFromGenerator(new TestImageGenerator(info)));
44 }
26 45
27 class TestDiscardableShader : public SkShader { 46 class TestDiscardableShader : public SkShader {
28 public: 47 public:
29 TestDiscardableShader() { 48 TestDiscardableShader() {
30 CreateBitmap(gfx::Size(50, 50), "discardable", &bitmap_); 49 CreateDiscardableBitmap(gfx::Size(50, 50), &bitmap_);
31 } 50 }
32 51
33 TestDiscardableShader(SkReadBuffer& buffer) { 52 TestDiscardableShader(SkReadBuffer& buffer) {
34 CreateBitmap(gfx::Size(50, 50), "discardable", &bitmap_); 53 CreateDiscardableBitmap(gfx::Size(50, 50), &bitmap_);
35 } 54 }
36 55
37 SkShader::BitmapType asABitmap(SkBitmap* bitmap, 56 SkShader::BitmapType asABitmap(SkBitmap* bitmap,
38 SkMatrix* matrix, 57 SkMatrix* matrix,
39 TileMode xy[2]) const override { 58 TileMode xy[2]) const override {
40 if (bitmap) 59 if (bitmap)
41 *bitmap = bitmap_; 60 *bitmap = bitmap_;
42 return SkShader::kDefault_BitmapType; 61 return SkShader::kDefault_BitmapType;
43 } 62 }
44 63
(...skipping 12 matching lines...) Expand all
57 Factory getFactory() const override { return CreateProc; } 76 Factory getFactory() const override { return CreateProc; }
58 77
59 private: 78 private:
60 SkBitmap bitmap_; 79 SkBitmap bitmap_;
61 }; 80 };
62 81
63 SkFlattenable* TestDiscardableShader::CreateProc(SkReadBuffer&) { 82 SkFlattenable* TestDiscardableShader::CreateProc(SkReadBuffer&) {
64 return new TestDiscardableShader; 83 return new TestDiscardableShader;
65 } 84 }
66 85
67 void CreateBitmap(gfx::Size size, const char* uri, SkBitmap* bitmap) {
68 bitmap->allocN32Pixels(size.width(), size.height());
69 bitmap->pixelRef()->setImmutable();
70 bitmap->pixelRef()->setURI(uri);
71 }
72
73 SkCanvas* StartRecording(SkPictureRecorder* recorder, gfx::Rect layer_rect) { 86 SkCanvas* StartRecording(SkPictureRecorder* recorder, gfx::Rect layer_rect) {
74 SkCanvas* canvas = 87 SkCanvas* canvas =
75 recorder->beginRecording(layer_rect.width(), layer_rect.height()); 88 recorder->beginRecording(layer_rect.width(), layer_rect.height());
76 89
77 canvas->save(); 90 canvas->save();
78 canvas->translate(-layer_rect.x(), -layer_rect.y()); 91 canvas->translate(-layer_rect.x(), -layer_rect.y());
79 canvas->clipRect(SkRect::MakeXYWH( 92 canvas->clipRect(SkRect::MakeXYWH(
80 layer_rect.x(), layer_rect.y(), layer_rect.width(), layer_rect.height())); 93 layer_rect.x(), layer_rect.y(), layer_rect.width(), layer_rect.height()));
81 94
82 return canvas; 95 return canvas;
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[1].filter_quality); 450 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[1].filter_quality);
438 } 451 }
439 452
440 TEST(PixelRefUtilsTest, DrawBitmap) { 453 TEST(PixelRefUtilsTest, DrawBitmap) {
441 gfx::Rect layer_rect(0, 0, 256, 256); 454 gfx::Rect layer_rect(0, 0, 256, 256);
442 455
443 SkPictureRecorder recorder; 456 SkPictureRecorder recorder;
444 SkCanvas* canvas = StartRecording(&recorder, layer_rect); 457 SkCanvas* canvas = StartRecording(&recorder, layer_rect);
445 458
446 SkBitmap first; 459 SkBitmap first;
447 CreateBitmap(gfx::Size(50, 50), "discardable", &first); 460 CreateDiscardableBitmap(gfx::Size(50, 50), &first);
448 SkBitmap second; 461 SkBitmap second;
449 CreateBitmap(gfx::Size(50, 50), "discardable", &second); 462 CreateDiscardableBitmap(gfx::Size(50, 50), &second);
450 SkBitmap third; 463 SkBitmap third;
451 CreateBitmap(gfx::Size(50, 50), "discardable", &third); 464 CreateDiscardableBitmap(gfx::Size(50, 50), &third);
452 SkBitmap fourth; 465 SkBitmap fourth;
453 CreateBitmap(gfx::Size(50, 1), "discardable", &fourth); 466 CreateDiscardableBitmap(gfx::Size(50, 1), &fourth);
454 SkBitmap fifth; 467 SkBitmap fifth;
455 CreateBitmap(gfx::Size(10, 10), "discardable", &fifth); 468 CreateDiscardableBitmap(gfx::Size(10, 10), &fifth);
456 SkBitmap sixth; 469 SkBitmap sixth;
457 CreateBitmap(gfx::Size(10, 10), "discardable", &sixth); 470 CreateDiscardableBitmap(gfx::Size(10, 10), &sixth);
458 471
459 canvas->save(); 472 canvas->save();
460 473
461 // At (0, 0). 474 // At (0, 0).
462 canvas->drawBitmap(first, 0, 0); 475 canvas->drawBitmap(first, 0, 0);
463 canvas->translate(25, 0); 476 canvas->translate(25, 0);
464 // At (25, 0). 477 // At (25, 0).
465 canvas->drawBitmap(second, 0, 0); 478 canvas->drawBitmap(second, 0, 0);
466 canvas->translate(0, 50); 479 canvas->translate(0, 50);
467 // At (50, 50). 480 // At (50, 50).
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[5].filter_quality); 537 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[5].filter_quality);
525 } 538 }
526 539
527 TEST(PixelRefUtilsTest, DrawBitmapRect) { 540 TEST(PixelRefUtilsTest, DrawBitmapRect) {
528 gfx::Rect layer_rect(0, 0, 256, 256); 541 gfx::Rect layer_rect(0, 0, 256, 256);
529 542
530 SkPictureRecorder recorder; 543 SkPictureRecorder recorder;
531 SkCanvas* canvas = StartRecording(&recorder, layer_rect); 544 SkCanvas* canvas = StartRecording(&recorder, layer_rect);
532 545
533 SkBitmap first; 546 SkBitmap first;
534 CreateBitmap(gfx::Size(50, 50), "discardable", &first); 547 CreateDiscardableBitmap(gfx::Size(50, 50), &first);
535 SkBitmap second; 548 SkBitmap second;
536 CreateBitmap(gfx::Size(50, 50), "discardable", &second); 549 CreateDiscardableBitmap(gfx::Size(50, 50), &second);
537 SkBitmap third; 550 SkBitmap third;
538 CreateBitmap(gfx::Size(50, 50), "discardable", &third); 551 CreateDiscardableBitmap(gfx::Size(50, 50), &third);
539 552
540 TestDiscardableShader first_shader; 553 TestDiscardableShader first_shader;
541 SkPaint first_paint; 554 SkPaint first_paint;
542 first_paint.setShader(&first_shader); 555 first_paint.setShader(&first_shader);
543 556
544 SkPaint non_discardable_paint; 557 SkPaint non_discardable_paint;
545 558
546 canvas->save(); 559 canvas->save();
547 560
548 // (0, 0, 100, 100). 561 // (0, 0, 100, 100).
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[3].filter_quality); 597 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[3].filter_quality);
585 } 598 }
586 599
587 TEST(PixelRefUtilsTest, DrawSprite) { 600 TEST(PixelRefUtilsTest, DrawSprite) {
588 gfx::Rect layer_rect(0, 0, 256, 256); 601 gfx::Rect layer_rect(0, 0, 256, 256);
589 602
590 SkPictureRecorder recorder; 603 SkPictureRecorder recorder;
591 SkCanvas* canvas = StartRecording(&recorder, layer_rect); 604 SkCanvas* canvas = StartRecording(&recorder, layer_rect);
592 605
593 SkBitmap first; 606 SkBitmap first;
594 CreateBitmap(gfx::Size(50, 50), "discardable", &first); 607 CreateDiscardableBitmap(gfx::Size(50, 50), &first);
595 SkBitmap second; 608 SkBitmap second;
596 CreateBitmap(gfx::Size(50, 50), "discardable", &second); 609 CreateDiscardableBitmap(gfx::Size(50, 50), &second);
597 SkBitmap third; 610 SkBitmap third;
598 CreateBitmap(gfx::Size(50, 50), "discardable", &third); 611 CreateDiscardableBitmap(gfx::Size(50, 50), &third);
599 SkBitmap fourth; 612 SkBitmap fourth;
600 CreateBitmap(gfx::Size(50, 50), "discardable", &fourth); 613 CreateDiscardableBitmap(gfx::Size(50, 50), &fourth);
601 SkBitmap fifth; 614 SkBitmap fifth;
602 CreateBitmap(gfx::Size(50, 50), "discardable", &fifth); 615 CreateDiscardableBitmap(gfx::Size(50, 50), &fifth);
603 616
604 canvas->save(); 617 canvas->save();
605 618
606 // Sprites aren't affected by the current matrix. 619 // Sprites aren't affected by the current matrix.
607 620
608 // (0, 0, 50, 50). 621 // (0, 0, 50, 50).
609 canvas->drawSprite(first, 0, 0); 622 canvas->drawSprite(first, 0, 0);
610 canvas->translate(25, 0); 623 canvas->translate(25, 0);
611 // (10, 0, 50, 50). 624 // (10, 0, 50, 50).
612 canvas->drawSprite(second, 10, 0); 625 canvas->drawSprite(second, 10, 0);
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 EXPECT_FLOAT_RECT_EQ(gfx::RectF(10, 10, 90, 90), 793 EXPECT_FLOAT_RECT_EQ(gfx::RectF(10, 10, 90, 90),
781 gfx::SkRectToRectF(pixel_refs[1].pixel_ref_rect)); 794 gfx::SkRectToRectF(pixel_refs[1].pixel_ref_rect));
782 VerifyScales(1.f, 1.f, pixel_refs[1].matrix, __LINE__); 795 VerifyScales(1.f, 1.f, pixel_refs[1].matrix, __LINE__);
783 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[1].filter_quality); 796 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[1].filter_quality);
784 EXPECT_FLOAT_RECT_EQ(gfx::RectF(50, 55, 150, 145), 797 EXPECT_FLOAT_RECT_EQ(gfx::RectF(50, 55, 150, 145),
785 gfx::SkRectToRectF(pixel_refs[2].pixel_ref_rect)); 798 gfx::SkRectToRectF(pixel_refs[2].pixel_ref_rect));
786 VerifyScales(1.f, 1.f, pixel_refs[2].matrix, __LINE__); 799 VerifyScales(1.f, 1.f, pixel_refs[2].matrix, __LINE__);
787 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[2].filter_quality); 800 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[2].filter_quality);
788 } 801 }
789 802
803 TEST(PixelRefUtilsTest, DrawImage) {
804 gfx::Rect layer_rect(0, 0, 256, 256);
805
806 SkPictureRecorder recorder;
807 SkCanvas* canvas = StartRecording(&recorder, layer_rect);
808
809 skia::RefPtr<SkImage> first = CreateDiscardableImage(gfx::Size(50, 50));
810 skia::RefPtr<SkImage> second = CreateDiscardableImage(gfx::Size(50, 50));
811 skia::RefPtr<SkImage> third = CreateDiscardableImage(gfx::Size(50, 50));
812 skia::RefPtr<SkImage> fourth = CreateDiscardableImage(gfx::Size(50, 1));
813 skia::RefPtr<SkImage> fifth = CreateDiscardableImage(gfx::Size(10, 10));
814 skia::RefPtr<SkImage> sixth = CreateDiscardableImage(gfx::Size(10, 10));
815
816 canvas->save();
817
818 // At (0, 0).
819 canvas->drawImage(first.get(), 0, 0);
820 canvas->translate(25, 0);
821 // At (25, 0).
822 canvas->drawImage(second.get(), 0, 0);
823 canvas->translate(0, 50);
824 // At (50, 50).
825 canvas->drawImage(third.get(), 25, 0);
826
827 canvas->restore();
828 canvas->save();
829
830 canvas->translate(1, 0);
831 canvas->rotate(90);
832 // At (1, 0), rotated 90 degrees
833 canvas->drawImage(fourth.get(), 0, 0);
834
835 canvas->restore();
836 canvas->save();
837
838 canvas->scale(5.f, 6.f);
839 // At (0, 0), scaled by 5 and 6
840 canvas->drawImage(fifth.get(), 0, 0);
841
842 canvas->restore();
843
844 canvas->rotate(27);
845 canvas->scale(3.3f, 0.4f);
846
847 canvas->drawImage(sixth.get(), 0, 0);
848
849 canvas->restore();
850
851 skia::RefPtr<SkPicture> picture =
852 skia::AdoptRef(StopRecording(&recorder, canvas));
853
854 std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
855 skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
856
857 EXPECT_EQ(6u, pixel_refs.size());
858 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 50, 50),
859 gfx::SkRectToRectF(pixel_refs[0].pixel_ref_rect));
860 VerifyScales(1.f, 1.f, pixel_refs[0].matrix, __LINE__);
861 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[0].filter_quality);
862 EXPECT_FLOAT_RECT_EQ(gfx::RectF(25, 0, 50, 50),
863 gfx::SkRectToRectF(pixel_refs[1].pixel_ref_rect));
864 VerifyScales(1.f, 1.f, pixel_refs[1].matrix, __LINE__);
865 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[1].filter_quality);
866 EXPECT_FLOAT_RECT_EQ(gfx::RectF(50, 50, 50, 50),
867 gfx::SkRectToRectF(pixel_refs[2].pixel_ref_rect));
868 VerifyScales(1.f, 1.f, pixel_refs[2].matrix, __LINE__);
869 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[2].filter_quality);
870 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 1, 50),
871 gfx::SkRectToRectF(pixel_refs[3].pixel_ref_rect));
872 VerifyScales(1.f, 1.f, pixel_refs[3].matrix, __LINE__);
873 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[3].filter_quality);
874 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 50, 60),
875 gfx::SkRectToRectF(pixel_refs[4].pixel_ref_rect));
876 VerifyScales(5.f, 6.f, pixel_refs[4].matrix, __LINE__);
877 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[4].filter_quality);
878 EXPECT_FLOAT_RECT_EQ(gfx::RectF(-1.8159621f, 0, 31.219175f, 18.545712f),
879 gfx::SkRectToRectF(pixel_refs[5].pixel_ref_rect));
880 VerifyScales(3.3f, 0.4f, pixel_refs[5].matrix, __LINE__);
881 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[5].filter_quality);
882 }
883
884 TEST(PixelRefUtilsTest, DrawImageRect) {
885 gfx::Rect layer_rect(0, 0, 256, 256);
886
887 SkPictureRecorder recorder;
888 SkCanvas* canvas = StartRecording(&recorder, layer_rect);
889
890 skia::RefPtr<SkImage> first = CreateDiscardableImage(gfx::Size(50, 50));
891 skia::RefPtr<SkImage> second = CreateDiscardableImage(gfx::Size(50, 50));
892 skia::RefPtr<SkImage> third = CreateDiscardableImage(gfx::Size(50, 50));
893
894 TestDiscardableShader first_shader;
895 SkPaint first_paint;
896 first_paint.setShader(&first_shader);
897
898 SkPaint non_discardable_paint;
899
900 canvas->save();
901
902 // (0, 0, 100, 100).
903 canvas->drawImageRect(
904 first.get(), SkRect::MakeWH(100, 100), &non_discardable_paint);
905 canvas->translate(25, 0);
906 // (75, 50, 10, 10).
907 canvas->drawImageRect(
908 second.get(), SkRect::MakeXYWH(50, 50, 10, 10), &non_discardable_paint);
909 canvas->translate(5, 50);
910 // (0, 30, 100, 100). One from bitmap, one from paint.
911 canvas->drawImageRect(
912 third.get(), SkRect::MakeXYWH(-30, -20, 100, 100), &first_paint);
913
914 canvas->restore();
915
916 skia::RefPtr<SkPicture> picture =
917 skia::AdoptRef(StopRecording(&recorder, canvas));
918
919 std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
920 skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
921
922 EXPECT_EQ(4u, pixel_refs.size());
923 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100),
924 gfx::SkRectToRectF(pixel_refs[0].pixel_ref_rect));
925 VerifyScales(2.f, 2.f, pixel_refs[0].matrix, __LINE__);
926 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[0].filter_quality);
927 EXPECT_FLOAT_RECT_EQ(gfx::RectF(75, 50, 10, 10),
928 gfx::SkRectToRectF(pixel_refs[1].pixel_ref_rect));
929 VerifyScales(0.2f, 0.2f, pixel_refs[1].matrix, __LINE__);
930 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[1].filter_quality);
931 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 30, 100, 100),
932 gfx::SkRectToRectF(pixel_refs[2].pixel_ref_rect));
933 VerifyScales(2.f, 2.f, pixel_refs[2].matrix, __LINE__);
934 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[2].filter_quality);
935 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 30, 100, 100),
936 gfx::SkRectToRectF(pixel_refs[3].pixel_ref_rect));
937 VerifyScales(2.f, 2.f, pixel_refs[3].matrix, __LINE__);
938 EXPECT_EQ(kNone_SkFilterQuality, pixel_refs[3].filter_quality);
939 }
940
790 } // namespace skia 941 } // namespace skia
OLDNEW
« no previous file with comments | « skia/ext/pixel_ref_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698