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

Side by Side Diff: tests/PictureTest.cpp

Issue 238273012: Staged removal of SkPicture-derived classes (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: have SkPicture only friend SkPictureRecorder once Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « tests/ImageFilterTest.cpp ('k') | tests/SerializationTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBitmapDevice.h" 8 #include "SkBitmapDevice.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 *usedPixRefs->append() = bm.pixelRef(); 296 *usedPixRefs->append() = bm.pixelRef();
297 } 297 }
298 298
299 // Return a picture with the bitmaps drawn at the specified positions. 299 // Return a picture with the bitmaps drawn at the specified positions.
300 static SkPicture* record_bitmaps(const SkBitmap bm[], 300 static SkPicture* record_bitmaps(const SkBitmap bm[],
301 const SkPoint pos[], 301 const SkPoint pos[],
302 SkTDArray<SkPixelRef*> analytic[], 302 SkTDArray<SkPixelRef*> analytic[],
303 int count, 303 int count,
304 DrawBitmapProc proc) { 304 DrawBitmapProc proc) {
305 SkPictureRecorder recorder; 305 SkPictureRecorder recorder;
306 SkCanvas* canvas = recorder.beginRecording(1000, 1000); 306 SkCanvas* canvas = recorder.beginRecording(1000, 1000, NULL, 0);
307 for (int i = 0; i < count; ++i) { 307 for (int i = 0; i < count; ++i) {
308 analytic[i].rewind(); 308 analytic[i].rewind();
309 canvas->save(); 309 canvas->save();
310 SkRect clipRect = SkRect::MakeXYWH(pos[i].fX, pos[i].fY, 310 SkRect clipRect = SkRect::MakeXYWH(pos[i].fX, pos[i].fY,
311 SkIntToScalar(bm[i].width()), 311 SkIntToScalar(bm[i].width()),
312 SkIntToScalar(bm[i].height())); 312 SkIntToScalar(bm[i].height()));
313 canvas->clipRect(clipRect, SkRegion::kIntersect_Op); 313 canvas->clipRect(clipRect, SkRegion::kIntersect_Op);
314 proc(canvas, bm[i], bm[count+i], pos[i], &analytic[i]); 314 proc(canvas, bm[i], bm[count+i], pos[i], &analytic[i]);
315 canvas->restore(); 315 canvas->restore();
316 } 316 }
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 } 652 }
653 } 653 }
654 } 654 }
655 655
656 #ifdef SK_DEBUG 656 #ifdef SK_DEBUG
657 // Ensure that deleting SkPicturePlayback does not assert. Asserts only fire in debug mode, so only 657 // Ensure that deleting SkPicturePlayback does not assert. Asserts only fire in debug mode, so only
658 // run in debug mode. 658 // run in debug mode.
659 static void test_deleting_empty_playback() { 659 static void test_deleting_empty_playback() {
660 SkPictureRecorder recorder; 660 SkPictureRecorder recorder;
661 // Creates an SkPictureRecord 661 // Creates an SkPictureRecord
662 recorder.beginRecording(0, 0); 662 recorder.beginRecording(0, 0, NULL, 0);
663 // Turns that into an SkPicturePlayback 663 // Turns that into an SkPicturePlayback
664 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 664 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
665 // Deletes the old SkPicturePlayback, and creates a new SkPictureRecord 665 // Deletes the old SkPicturePlayback, and creates a new SkPictureRecord
666 recorder.beginRecording(0, 0); 666 recorder.beginRecording(0, 0, NULL, 0);
667 } 667 }
668 668
669 // Ensure that serializing an empty picture does not assert. Likewise only runs in debug mode. 669 // Ensure that serializing an empty picture does not assert. Likewise only runs in debug mode.
670 static void test_serializing_empty_picture() { 670 static void test_serializing_empty_picture() {
671 SkPictureRecorder recorder; 671 SkPictureRecorder recorder;
672 recorder.beginRecording(0, 0); 672 recorder.beginRecording(0, 0, NULL, 0);
673 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 673 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
674 SkDynamicMemoryWStream stream; 674 SkDynamicMemoryWStream stream;
675 picture->serialize(&stream); 675 picture->serialize(&stream);
676 } 676 }
677 #endif 677 #endif
678 678
679 static void rand_op(SkCanvas* canvas, SkRandom& rand) { 679 static void rand_op(SkCanvas* canvas, SkRandom& rand) {
680 SkPaint paint; 680 SkPaint paint;
681 SkRect rect = SkRect::MakeWH(50, 50); 681 SkRect rect = SkRect::MakeWH(50, 50);
682 682
(...skipping 26 matching lines...) Expand all
709 709
710 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 710 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
711 711
712 SkPaint paint; 712 SkPaint paint;
713 SkRect rect = SkRect::MakeLTRB(-10000000, -10000000, 10000000, 10000000); 713 SkRect rect = SkRect::MakeLTRB(-10000000, -10000000, 10000000, 10000000);
714 714
715 SkPictureRecorder recorder; 715 SkPictureRecorder recorder;
716 716
717 { 717 {
718 // Create picture with 2 unbalanced saves 718 // Create picture with 2 unbalanced saves
719 SkCanvas* canvas = recorder.beginRecording(100, 100); 719 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
720 canvas->save(); 720 canvas->save();
721 canvas->translate(10, 10); 721 canvas->translate(10, 10);
722 canvas->drawRect(rect, paint); 722 canvas->drawRect(rect, paint);
723 canvas->save(); 723 canvas->save();
724 canvas->translate(10, 10); 724 canvas->translate(10, 10);
725 canvas->drawRect(rect, paint); 725 canvas->drawRect(rect, paint);
726 SkAutoTUnref<SkPicture> extraSavePicture(recorder.endRecording()); 726 SkAutoTUnref<SkPicture> extraSavePicture(recorder.endRecording());
727 727
728 testCanvas.drawPicture(*extraSavePicture); 728 testCanvas.drawPicture(*extraSavePicture);
729 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 729 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
730 } 730 }
731 731
732 set_canvas_to_save_count_4(&testCanvas); 732 set_canvas_to_save_count_4(&testCanvas);
733 733
734 { 734 {
735 // Create picture with 2 unbalanced restores 735 // Create picture with 2 unbalanced restores
736 SkCanvas* canvas = recorder.beginRecording(100, 100); 736 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
737 canvas->save(); 737 canvas->save();
738 canvas->translate(10, 10); 738 canvas->translate(10, 10);
739 canvas->drawRect(rect, paint); 739 canvas->drawRect(rect, paint);
740 canvas->save(); 740 canvas->save();
741 canvas->translate(10, 10); 741 canvas->translate(10, 10);
742 canvas->drawRect(rect, paint); 742 canvas->drawRect(rect, paint);
743 canvas->restore(); 743 canvas->restore();
744 canvas->restore(); 744 canvas->restore();
745 canvas->restore(); 745 canvas->restore();
746 canvas->restore(); 746 canvas->restore();
747 SkAutoTUnref<SkPicture> extraRestorePicture(recorder.endRecording()); 747 SkAutoTUnref<SkPicture> extraRestorePicture(recorder.endRecording());
748 748
749 testCanvas.drawPicture(*extraRestorePicture); 749 testCanvas.drawPicture(*extraRestorePicture);
750 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 750 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
751 } 751 }
752 752
753 set_canvas_to_save_count_4(&testCanvas); 753 set_canvas_to_save_count_4(&testCanvas);
754 754
755 { 755 {
756 SkCanvas* canvas = recorder.beginRecording(100, 100); 756 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
757 canvas->translate(10, 10); 757 canvas->translate(10, 10);
758 canvas->drawRect(rect, paint); 758 canvas->drawRect(rect, paint);
759 SkAutoTUnref<SkPicture> noSavePicture(recorder.endRecording()); 759 SkAutoTUnref<SkPicture> noSavePicture(recorder.endRecording());
760 760
761 testCanvas.drawPicture(*noSavePicture); 761 testCanvas.drawPicture(*noSavePicture);
762 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 762 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
763 REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity()); 763 REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity());
764 } 764 }
765 } 765 }
766 766
767 static void test_peephole() { 767 static void test_peephole() {
768 SkRandom rand; 768 SkRandom rand;
769 769
770 SkPictureRecorder recorder; 770 SkPictureRecorder recorder;
771 771
772 for (int j = 0; j < 100; j++) { 772 for (int j = 0; j < 100; j++) {
773 SkRandom rand2(rand); // remember the seed 773 SkRandom rand2(rand); // remember the seed
774 774
775 SkCanvas* canvas = recorder.beginRecording(100, 100); 775 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
776 776
777 for (int i = 0; i < 1000; ++i) { 777 for (int i = 0; i < 1000; ++i) {
778 rand_op(canvas, rand); 778 rand_op(canvas, rand);
779 } 779 }
780 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 780 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
781 781
782 rand = rand2; 782 rand = rand2;
783 } 783 }
784 784
785 { 785 {
786 SkCanvas* canvas = recorder.beginRecording(100, 100); 786 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
787 SkRect rect = SkRect::MakeWH(50, 50); 787 SkRect rect = SkRect::MakeWH(50, 50);
788 788
789 for (int i = 0; i < 100; ++i) { 789 for (int i = 0; i < 100; ++i) {
790 canvas->save(); 790 canvas->save();
791 } 791 }
792 while (canvas->getSaveCount() > 1) { 792 while (canvas->getSaveCount() > 1) {
793 canvas->clipRect(rect); 793 canvas->clipRect(rect);
794 canvas->restore(); 794 canvas->restore();
795 } 795 }
796 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 796 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
797 } 797 }
798 } 798 }
799 799
800 #ifndef SK_DEBUG 800 #ifndef SK_DEBUG
801 // Only test this is in release mode. We deliberately crash in debug mode, since a valid caller 801 // Only test this is in release mode. We deliberately crash in debug mode, since a valid caller
802 // should never do this. 802 // should never do this.
803 static void test_bad_bitmap() { 803 static void test_bad_bitmap() {
804 // This bitmap has a width and height but no pixels. As a result, attempting to record it will 804 // This bitmap has a width and height but no pixels. As a result, attempting to record it will
805 // fail. 805 // fail.
806 SkBitmap bm; 806 SkBitmap bm;
807 bm.setConfig(SkImageInfo::MakeN32Premul(100, 100)); 807 bm.setConfig(SkImageInfo::MakeN32Premul(100, 100));
808 SkPictureRecorder recorder; 808 SkPictureRecorder recorder;
809 SkCanvas* recordingCanvas = recorder.beginRecording(100, 100); 809 SkCanvas* recordingCanvas = recorder.beginRecording(100, 100, NULL, 0);
810 recordingCanvas->drawBitmap(bm, 0, 0); 810 recordingCanvas->drawBitmap(bm, 0, 0);
811 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 811 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
812 812
813 SkCanvas canvas; 813 SkCanvas canvas;
814 canvas.drawPicture(*picture); 814 canvas.drawPicture(*picture);
815 } 815 }
816 #endif 816 #endif
817 817
818 static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) { 818 static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) {
819 return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100); 819 return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100);
820 } 820 }
821 821
822 static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) { 822 static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) {
823 SkPictureRecorder recorder; 823 SkPictureRecorder recorder;
824 SkCanvas* canvas = recorder.beginRecording(bitmap.width(), bitmap.height()); 824 SkCanvas* canvas = recorder.beginRecording(bitmap.width(), bitmap.height(), NULL, 0);
825 canvas->drawBitmap(bitmap, 0, 0); 825 canvas->drawBitmap(bitmap, 0, 0);
826 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 826 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
827 827
828 SkDynamicMemoryWStream wStream; 828 SkDynamicMemoryWStream wStream;
829 picture->serialize(&wStream, &encode_bitmap_to_data); 829 picture->serialize(&wStream, &encode_bitmap_to_data);
830 return wStream.copyToData(); 830 return wStream.copyToData();
831 } 831 }
832 832
833 struct ErrorContext { 833 struct ErrorContext {
834 int fErrors; 834 int fErrors;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 SkClearLastError(); 880 SkClearLastError();
881 SkSetErrorCallback(NULL, NULL); 881 SkSetErrorCallback(NULL, NULL);
882 } 882 }
883 883
884 static void test_clone_empty(skiatest::Reporter* reporter) { 884 static void test_clone_empty(skiatest::Reporter* reporter) {
885 // This is a regression test for crbug.com/172062 885 // This is a regression test for crbug.com/172062
886 // Before the fix, we used to crash accessing a null pointer when we 886 // Before the fix, we used to crash accessing a null pointer when we
887 // had a picture with no paints. This test passes by not crashing. 887 // had a picture with no paints. This test passes by not crashing.
888 { 888 {
889 SkPictureRecorder recorder; 889 SkPictureRecorder recorder;
890 recorder.beginRecording(1, 1); 890 recorder.beginRecording(1, 1, NULL, 0);
891 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 891 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
892 SkAutoTUnref<SkPicture> destPicture(picture->clone()); 892 SkAutoTUnref<SkPicture> destPicture(picture->clone());
893 REPORTER_ASSERT(reporter, NULL != destPicture); 893 REPORTER_ASSERT(reporter, NULL != destPicture);
894 } 894 }
895 } 895 }
896 896
897 static void test_draw_empty(skiatest::Reporter* reporter) { 897 static void test_draw_empty(skiatest::Reporter* reporter) {
898 SkBitmap result; 898 SkBitmap result;
899 make_bm(&result, 2, 2, SK_ColorBLACK, false); 899 make_bm(&result, 2, 2, SK_ColorBLACK, false);
900 900
901 SkCanvas canvas(result); 901 SkCanvas canvas(result);
902 902
903 { 903 {
904 // stock SkPicture 904 // stock SkPicture
905 SkPictureRecorder recorder; 905 SkPictureRecorder recorder;
906 recorder.beginRecording(1, 1); 906 recorder.beginRecording(1, 1, NULL, 0);
907 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 907 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
908 908
909 canvas.drawPicture(*picture); 909 canvas.drawPicture(*picture);
910 } 910 }
911 911
912 { 912 {
913 // tile grid 913 // tile grid
914 SkTileGridPicture::TileGridInfo gridInfo; 914 SkTileGridFactory::TileGridInfo gridInfo;
915 gridInfo.fMargin.setEmpty(); 915 gridInfo.fMargin.setEmpty();
916 gridInfo.fOffset.setZero(); 916 gridInfo.fOffset.setZero();
917 gridInfo.fTileInterval.set(1, 1); 917 gridInfo.fTileInterval.set(1, 1);
918 918
919 SkAutoTUnref<SkPictureFactory> factory(SkNEW_ARGS(SkTileGridPictureFacto ry, (gridInfo))); 919 SkTileGridFactory factory(gridInfo);
920 SkPictureRecorder recorder(factory); 920 SkPictureRecorder recorder;
921 recorder.beginRecording(1, 1); 921 recorder.beginRecording(1, 1, &factory, 0);
922 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 922 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
923 923
924 canvas.drawPicture(*picture); 924 canvas.drawPicture(*picture);
925 } 925 }
926 926
927 { 927 {
928 // RTree 928 // RTree
929 SkAutoTUnref<SkPictureFactory> factory(SkNEW(SkRTreePictureFactory)); 929 SkRTreeFactory factory;
930 SkPictureRecorder recorder(factory); 930 SkPictureRecorder recorder;
931 recorder.beginRecording(1, 1); 931 recorder.beginRecording(1, 1, &factory, 0);
932 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 932 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
933 933
934 canvas.drawPicture(*picture); 934 canvas.drawPicture(*picture);
935 } 935 }
936 936
937 { 937 {
938 // quad tree 938 // quad tree
939 SkAutoTUnref<SkPictureFactory> factory(SkNEW(SkQuadTreePictureFactory)); 939 SkQuadTreeFactory factory;
940 SkPictureRecorder recorder(factory); 940 SkPictureRecorder recorder;
941 recorder.beginRecording(1, 1); 941 recorder.beginRecording(1, 1, &factory, 0);
942 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 942 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
943 943
944 canvas.drawPicture(*picture); 944 canvas.drawPicture(*picture);
945 } 945 }
946 } 946 }
947 947
948 static void test_clip_bound_opt(skiatest::Reporter* reporter) { 948 static void test_clip_bound_opt(skiatest::Reporter* reporter) {
949 // Test for crbug.com/229011 949 // Test for crbug.com/229011
950 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(4), SkIntToScalar(4), 950 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(4), SkIntToScalar(4),
951 SkIntToScalar(2), SkIntToScalar(2)); 951 SkIntToScalar(2), SkIntToScalar(2));
952 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(7), SkIntToScalar(7), 952 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(7), SkIntToScalar(7),
953 SkIntToScalar(1), SkIntToScalar(1)); 953 SkIntToScalar(1), SkIntToScalar(1));
954 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(6), SkIntToScalar(6), 954 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(6), SkIntToScalar(6),
955 SkIntToScalar(1), SkIntToScalar(1)); 955 SkIntToScalar(1), SkIntToScalar(1));
956 956
957 SkPath invPath; 957 SkPath invPath;
958 invPath.addOval(rect1); 958 invPath.addOval(rect1);
959 invPath.setFillType(SkPath::kInverseEvenOdd_FillType); 959 invPath.setFillType(SkPath::kInverseEvenOdd_FillType);
960 SkPath path; 960 SkPath path;
961 path.addOval(rect2); 961 path.addOval(rect2);
962 SkPath path2; 962 SkPath path2;
963 path2.addOval(rect3); 963 path2.addOval(rect3);
964 SkIRect clipBounds; 964 SkIRect clipBounds;
965 SkPictureRecorder recorder; 965 SkPictureRecorder recorder;
966 // Minimalist test set for 100% code coverage of 966 // Minimalist test set for 100% code coverage of
967 // SkPictureRecord::updateClipConservativelyUsingBounds 967 // SkPictureRecord::updateClipConservativelyUsingBounds
968 { 968 {
969 SkCanvas* canvas = recorder.beginRecording(10, 10, 969 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL,
970 SkPicture::kUsePathBoundsForClip_RecordingFlag); 970 SkPicture::kUsePathBoundsForClip_RecordingFlag);
971 canvas->clipPath(invPath, SkRegion::kIntersect_Op); 971 canvas->clipPath(invPath, SkRegion::kIntersect_Op);
972 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds); 972 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
973 REPORTER_ASSERT(reporter, true == nonEmpty); 973 REPORTER_ASSERT(reporter, true == nonEmpty);
974 REPORTER_ASSERT(reporter, 0 == clipBounds.fLeft); 974 REPORTER_ASSERT(reporter, 0 == clipBounds.fLeft);
975 REPORTER_ASSERT(reporter, 0 == clipBounds.fTop); 975 REPORTER_ASSERT(reporter, 0 == clipBounds.fTop);
976 REPORTER_ASSERT(reporter, 10 == clipBounds.fBottom); 976 REPORTER_ASSERT(reporter, 10 == clipBounds.fBottom);
977 REPORTER_ASSERT(reporter, 10 == clipBounds.fRight); 977 REPORTER_ASSERT(reporter, 10 == clipBounds.fRight);
978 } 978 }
979 { 979 {
980 SkCanvas* canvas = recorder.beginRecording(10, 10, 980 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL,
981 SkPicture::kUsePathBoundsForClip_RecordingFlag); 981 SkPicture::kUsePathBoundsForClip_RecordingFlag);
982 canvas->clipPath(path, SkRegion::kIntersect_Op); 982 canvas->clipPath(path, SkRegion::kIntersect_Op);
983 canvas->clipPath(invPath, SkRegion::kIntersect_Op); 983 canvas->clipPath(invPath, SkRegion::kIntersect_Op);
984 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds); 984 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
985 REPORTER_ASSERT(reporter, true == nonEmpty); 985 REPORTER_ASSERT(reporter, true == nonEmpty);
986 REPORTER_ASSERT(reporter, 7 == clipBounds.fLeft); 986 REPORTER_ASSERT(reporter, 7 == clipBounds.fLeft);
987 REPORTER_ASSERT(reporter, 7 == clipBounds.fTop); 987 REPORTER_ASSERT(reporter, 7 == clipBounds.fTop);
988 REPORTER_ASSERT(reporter, 8 == clipBounds.fBottom); 988 REPORTER_ASSERT(reporter, 8 == clipBounds.fBottom);
989 REPORTER_ASSERT(reporter, 8 == clipBounds.fRight); 989 REPORTER_ASSERT(reporter, 8 == clipBounds.fRight);
990 } 990 }
991 { 991 {
992 SkCanvas* canvas = recorder.beginRecording(10, 10, 992 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL,
993 SkPicture::kUsePathBoundsForClip_RecordingFlag); 993 SkPicture::kUsePathBoundsForClip_RecordingFlag);
994 canvas->clipPath(path, SkRegion::kIntersect_Op); 994 canvas->clipPath(path, SkRegion::kIntersect_Op);
995 canvas->clipPath(invPath, SkRegion::kUnion_Op); 995 canvas->clipPath(invPath, SkRegion::kUnion_Op);
996 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds); 996 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
997 REPORTER_ASSERT(reporter, true == nonEmpty); 997 REPORTER_ASSERT(reporter, true == nonEmpty);
998 REPORTER_ASSERT(reporter, 0 == clipBounds.fLeft); 998 REPORTER_ASSERT(reporter, 0 == clipBounds.fLeft);
999 REPORTER_ASSERT(reporter, 0 == clipBounds.fTop); 999 REPORTER_ASSERT(reporter, 0 == clipBounds.fTop);
1000 REPORTER_ASSERT(reporter, 10 == clipBounds.fBottom); 1000 REPORTER_ASSERT(reporter, 10 == clipBounds.fBottom);
1001 REPORTER_ASSERT(reporter, 10 == clipBounds.fRight); 1001 REPORTER_ASSERT(reporter, 10 == clipBounds.fRight);
1002 } 1002 }
1003 { 1003 {
1004 SkCanvas* canvas = recorder.beginRecording(10, 10, 1004 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL,
1005 SkPicture::kUsePathBoundsForClip_RecordingFlag); 1005 SkPicture::kUsePathBoundsForClip_RecordingFlag);
1006 canvas->clipPath(path, SkRegion::kDifference_Op); 1006 canvas->clipPath(path, SkRegion::kDifference_Op);
1007 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds); 1007 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
1008 REPORTER_ASSERT(reporter, true == nonEmpty); 1008 REPORTER_ASSERT(reporter, true == nonEmpty);
1009 REPORTER_ASSERT(reporter, 0 == clipBounds.fLeft); 1009 REPORTER_ASSERT(reporter, 0 == clipBounds.fLeft);
1010 REPORTER_ASSERT(reporter, 0 == clipBounds.fTop); 1010 REPORTER_ASSERT(reporter, 0 == clipBounds.fTop);
1011 REPORTER_ASSERT(reporter, 10 == clipBounds.fBottom); 1011 REPORTER_ASSERT(reporter, 10 == clipBounds.fBottom);
1012 REPORTER_ASSERT(reporter, 10 == clipBounds.fRight); 1012 REPORTER_ASSERT(reporter, 10 == clipBounds.fRight);
1013 } 1013 }
1014 { 1014 {
1015 SkCanvas* canvas = recorder.beginRecording(10, 10, 1015 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL,
1016 SkPicture::kUsePathBoundsForClip_RecordingFlag); 1016 SkPicture::kUsePathBoundsForClip_RecordingFlag);
1017 canvas->clipPath(path, SkRegion::kReverseDifference_Op); 1017 canvas->clipPath(path, SkRegion::kReverseDifference_Op);
1018 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds); 1018 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
1019 // True clip is actually empty in this case, but the best 1019 // True clip is actually empty in this case, but the best
1020 // determination we can make using only bounds as input is that the 1020 // determination we can make using only bounds as input is that the
1021 // clip is included in the bounds of 'path'. 1021 // clip is included in the bounds of 'path'.
1022 REPORTER_ASSERT(reporter, true == nonEmpty); 1022 REPORTER_ASSERT(reporter, true == nonEmpty);
1023 REPORTER_ASSERT(reporter, 7 == clipBounds.fLeft); 1023 REPORTER_ASSERT(reporter, 7 == clipBounds.fLeft);
1024 REPORTER_ASSERT(reporter, 7 == clipBounds.fTop); 1024 REPORTER_ASSERT(reporter, 7 == clipBounds.fTop);
1025 REPORTER_ASSERT(reporter, 8 == clipBounds.fBottom); 1025 REPORTER_ASSERT(reporter, 8 == clipBounds.fBottom);
1026 REPORTER_ASSERT(reporter, 8 == clipBounds.fRight); 1026 REPORTER_ASSERT(reporter, 8 == clipBounds.fRight);
1027 } 1027 }
1028 { 1028 {
1029 SkCanvas* canvas = recorder.beginRecording(10, 10, 1029 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL,
1030 SkPicture::kUsePathBoundsForClip_RecordingFlag); 1030 SkPicture::kUsePathBoundsForClip_RecordingFlag);
1031 canvas->clipPath(path, SkRegion::kIntersect_Op); 1031 canvas->clipPath(path, SkRegion::kIntersect_Op);
1032 canvas->clipPath(path2, SkRegion::kXOR_Op); 1032 canvas->clipPath(path2, SkRegion::kXOR_Op);
1033 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds); 1033 bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
1034 REPORTER_ASSERT(reporter, true == nonEmpty); 1034 REPORTER_ASSERT(reporter, true == nonEmpty);
1035 REPORTER_ASSERT(reporter, 6 == clipBounds.fLeft); 1035 REPORTER_ASSERT(reporter, 6 == clipBounds.fLeft);
1036 REPORTER_ASSERT(reporter, 6 == clipBounds.fTop); 1036 REPORTER_ASSERT(reporter, 6 == clipBounds.fTop);
1037 REPORTER_ASSERT(reporter, 8 == clipBounds.fBottom); 1037 REPORTER_ASSERT(reporter, 8 == clipBounds.fBottom);
1038 REPORTER_ASSERT(reporter, 8 == clipBounds.fRight); 1038 REPORTER_ASSERT(reporter, 8 == clipBounds.fRight);
1039 } 1039 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 unsigned getClipCount() const { return fClipCount; } 1078 unsigned getClipCount() const { return fClipCount; }
1079 1079
1080 private: 1080 private:
1081 unsigned fClipCount; 1081 unsigned fClipCount;
1082 1082
1083 typedef SkCanvas INHERITED; 1083 typedef SkCanvas INHERITED;
1084 }; 1084 };
1085 1085
1086 static void test_clip_expansion(skiatest::Reporter* reporter) { 1086 static void test_clip_expansion(skiatest::Reporter* reporter) {
1087 SkPictureRecorder recorder; 1087 SkPictureRecorder recorder;
1088 SkCanvas* canvas = recorder.beginRecording(10, 10, 0); 1088 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1089 1089
1090 canvas->clipRect(SkRect::MakeEmpty(), SkRegion::kReplace_Op); 1090 canvas->clipRect(SkRect::MakeEmpty(), SkRegion::kReplace_Op);
1091 // The following expanding clip should not be skipped. 1091 // The following expanding clip should not be skipped.
1092 canvas->clipRect(SkRect::MakeXYWH(4, 4, 3, 3), SkRegion::kUnion_Op); 1092 canvas->clipRect(SkRect::MakeXYWH(4, 4, 3, 3), SkRegion::kUnion_Op);
1093 // Draw something so the optimizer doesn't just fold the world. 1093 // Draw something so the optimizer doesn't just fold the world.
1094 SkPaint p; 1094 SkPaint p;
1095 p.setColor(SK_ColorBLUE); 1095 p.setColor(SK_ColorBLUE);
1096 canvas->drawPaint(p); 1096 canvas->drawPaint(p);
1097 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1097 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1098 1098
1099 ClipCountingCanvas testCanvas(10, 10); 1099 ClipCountingCanvas testCanvas(10, 10);
1100 picture->draw(&testCanvas); 1100 picture->draw(&testCanvas);
1101 1101
1102 // Both clips should be present on playback. 1102 // Both clips should be present on playback.
1103 REPORTER_ASSERT(reporter, testCanvas.getClipCount() == 2); 1103 REPORTER_ASSERT(reporter, testCanvas.getClipCount() == 2);
1104 } 1104 }
1105 1105
1106 static void test_hierarchical(skiatest::Reporter* reporter) { 1106 static void test_hierarchical(skiatest::Reporter* reporter) {
1107 SkBitmap bm; 1107 SkBitmap bm;
1108 make_bm(&bm, 10, 10, SK_ColorRED, true); 1108 make_bm(&bm, 10, 10, SK_ColorRED, true);
1109 1109
1110 SkPictureRecorder recorder; 1110 SkPictureRecorder recorder;
1111 1111
1112 recorder.beginRecording(10, 10); 1112 recorder.beginRecording(10, 10, NULL, 0);
1113 SkAutoTUnref<SkPicture> childPlain(recorder.endRecording()); 1113 SkAutoTUnref<SkPicture> childPlain(recorder.endRecording());
1114 REPORTER_ASSERT(reporter, !childPlain->willPlayBackBitmaps()); // 0 1114 REPORTER_ASSERT(reporter, !childPlain->willPlayBackBitmaps()); // 0
1115 1115
1116 recorder.beginRecording(10, 10)->drawBitmap(bm, 0, 0); 1116 recorder.beginRecording(10, 10, NULL, 0)->drawBitmap(bm, 0, 0);
1117 SkAutoTUnref<SkPicture> childWithBitmap(recorder.endRecording()); 1117 SkAutoTUnref<SkPicture> childWithBitmap(recorder.endRecording());
1118 REPORTER_ASSERT(reporter, childWithBitmap->willPlayBackBitmaps()); // 1 1118 REPORTER_ASSERT(reporter, childWithBitmap->willPlayBackBitmaps()); // 1
1119 1119
1120 { 1120 {
1121 SkCanvas* canvas = recorder.beginRecording(10, 10); 1121 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1122 canvas->drawPicture(*childPlain); 1122 canvas->drawPicture(*childPlain);
1123 SkAutoTUnref<SkPicture> parentPP(recorder.endRecording()); 1123 SkAutoTUnref<SkPicture> parentPP(recorder.endRecording());
1124 REPORTER_ASSERT(reporter, !parentPP->willPlayBackBitmaps()); // 0 1124 REPORTER_ASSERT(reporter, !parentPP->willPlayBackBitmaps()); // 0
1125 } 1125 }
1126 { 1126 {
1127 SkCanvas* canvas = recorder.beginRecording(10, 10); 1127 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1128 canvas->drawPicture(*childWithBitmap); 1128 canvas->drawPicture(*childWithBitmap);
1129 SkAutoTUnref<SkPicture> parentPWB(recorder.endRecording()); 1129 SkAutoTUnref<SkPicture> parentPWB(recorder.endRecording());
1130 REPORTER_ASSERT(reporter, parentPWB->willPlayBackBitmaps()); // 1 1130 REPORTER_ASSERT(reporter, parentPWB->willPlayBackBitmaps()); // 1
1131 } 1131 }
1132 { 1132 {
1133 SkCanvas* canvas = recorder.beginRecording(10, 10); 1133 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1134 canvas->drawBitmap(bm, 0, 0); 1134 canvas->drawBitmap(bm, 0, 0);
1135 canvas->drawPicture(*childPlain); 1135 canvas->drawPicture(*childPlain);
1136 SkAutoTUnref<SkPicture> parentWBP(recorder.endRecording()); 1136 SkAutoTUnref<SkPicture> parentWBP(recorder.endRecording());
1137 REPORTER_ASSERT(reporter, parentWBP->willPlayBackBitmaps()); // 1 1137 REPORTER_ASSERT(reporter, parentWBP->willPlayBackBitmaps()); // 1
1138 } 1138 }
1139 { 1139 {
1140 SkCanvas* canvas = recorder.beginRecording(10, 10); 1140 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1141 canvas->drawBitmap(bm, 0, 0); 1141 canvas->drawBitmap(bm, 0, 0);
1142 canvas->drawPicture(*childWithBitmap); 1142 canvas->drawPicture(*childWithBitmap);
1143 SkAutoTUnref<SkPicture> parentWBWB(recorder.endRecording()); 1143 SkAutoTUnref<SkPicture> parentWBWB(recorder.endRecording());
1144 REPORTER_ASSERT(reporter, parentWBWB->willPlayBackBitmaps()); // 2 1144 REPORTER_ASSERT(reporter, parentWBWB->willPlayBackBitmaps()); // 2
1145 } 1145 }
1146 } 1146 }
1147 1147
1148 static void test_gen_id(skiatest::Reporter* reporter) { 1148 static void test_gen_id(skiatest::Reporter* reporter) {
1149 1149
1150 SkPicture empty; 1150 SkPicture empty;
1151 1151
1152 // Empty pictures should still have a valid ID 1152 // Empty pictures should still have a valid ID
1153 REPORTER_ASSERT(reporter, empty.uniqueID() != SK_InvalidGenID); 1153 REPORTER_ASSERT(reporter, empty.uniqueID() != SK_InvalidGenID);
1154 1154
1155 SkPictureRecorder recorder; 1155 SkPictureRecorder recorder;
1156 1156
1157 SkCanvas* canvas = recorder.beginRecording(1, 1); 1157 SkCanvas* canvas = recorder.beginRecording(1, 1, NULL, 0);
1158 canvas->drawARGB(255, 255, 255, 255); 1158 canvas->drawARGB(255, 255, 255, 255);
1159 SkAutoTUnref<SkPicture> hasData(recorder.endRecording()); 1159 SkAutoTUnref<SkPicture> hasData(recorder.endRecording());
1160 // picture should have a non-zero id after recording 1160 // picture should have a non-zero id after recording
1161 REPORTER_ASSERT(reporter, hasData->uniqueID() != SK_InvalidGenID); 1161 REPORTER_ASSERT(reporter, hasData->uniqueID() != SK_InvalidGenID);
1162 1162
1163 // both pictures should have different ids 1163 // both pictures should have different ids
1164 REPORTER_ASSERT(reporter, hasData->uniqueID() != empty.uniqueID()); 1164 REPORTER_ASSERT(reporter, hasData->uniqueID() != empty.uniqueID());
1165 1165
1166 // test out copy constructor 1166 // test out copy constructor
1167 SkPicture copyWithData(*hasData); 1167 SkPicture copyWithData(*hasData);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 1225
1226 static void test_draw_bitmaps(SkCanvas* canvas) { 1226 static void test_draw_bitmaps(SkCanvas* canvas) {
1227 SkBitmap empty; 1227 SkBitmap empty;
1228 draw_bitmaps(empty, canvas); 1228 draw_bitmaps(empty, canvas);
1229 empty.setConfig(SkImageInfo::MakeN32Premul(10, 10)); 1229 empty.setConfig(SkImageInfo::MakeN32Premul(10, 10));
1230 draw_bitmaps(empty, canvas); 1230 draw_bitmaps(empty, canvas);
1231 } 1231 }
1232 1232
1233 DEF_TEST(Picture_EmptyBitmap, r) { 1233 DEF_TEST(Picture_EmptyBitmap, r) {
1234 SkPictureRecorder recorder; 1234 SkPictureRecorder recorder;
1235 test_draw_bitmaps(recorder.beginRecording(10, 10)); 1235 test_draw_bitmaps(recorder.beginRecording(10, 10, NULL, 0));
1236 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1236 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1237 } 1237 }
1238 1238
1239 DEF_TEST(Canvas_EmptyBitmap, r) { 1239 DEF_TEST(Canvas_EmptyBitmap, r) {
1240 SkBitmap dst; 1240 SkBitmap dst;
1241 dst.allocN32Pixels(10, 10); 1241 dst.allocN32Pixels(10, 10);
1242 SkCanvas canvas(dst); 1242 SkCanvas canvas(dst);
1243 1243
1244 test_draw_bitmaps(&canvas); 1244 test_draw_bitmaps(&canvas);
1245 } 1245 }
OLDNEW
« no previous file with comments | « tests/ImageFilterTest.cpp ('k') | tests/SerializationTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698