| OLD | NEW |
| 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 "SkBBoxHierarchy.h" | 8 #include "SkBBoxHierarchy.h" |
| 9 #include "SkBlurImageFilter.h" | 9 #include "SkBlurImageFilter.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| 11 #include "SkColorMatrixFilter.h" | 11 #include "SkColorMatrixFilter.h" |
| 12 #include "SkColorPriv.h" | 12 #include "SkColorPriv.h" |
| 13 #include "SkDashPathEffect.h" | 13 #include "SkDashPathEffect.h" |
| 14 #include "SkData.h" | 14 #include "SkData.h" |
| 15 #include "SkImageGenerator.h" | 15 #include "SkImageGenerator.h" |
| 16 #include "SkError.h" | 16 #include "SkError.h" |
| 17 #include "SkImageEncoder.h" | 17 #include "SkImageEncoder.h" |
| 18 #include "SkImageGenerator.h" | 18 #include "SkImageGenerator.h" |
| 19 #include "SkLayerInfo.h" | 19 #include "SkLayerInfo.h" |
| 20 #include "SkMD5.h" | |
| 21 #include "SkPaint.h" | 20 #include "SkPaint.h" |
| 22 #include "SkPicture.h" | 21 #include "SkPicture.h" |
| 23 #include "SkPictureRecorder.h" | 22 #include "SkPictureRecorder.h" |
| 24 #include "SkPictureUtils.h" | 23 #include "SkPictureUtils.h" |
| 25 #include "SkPixelRef.h" | 24 #include "SkPixelRef.h" |
| 26 #include "SkPixelSerializer.h" | 25 #include "SkPixelSerializer.h" |
| 27 #include "SkMiniRecorder.h" | 26 #include "SkMiniRecorder.h" |
| 28 #include "SkRRect.h" | 27 #include "SkRRect.h" |
| 29 #include "SkRandom.h" | 28 #include "SkRandom.h" |
| 30 #include "SkRecord.h" | 29 #include "SkRecord.h" |
| (...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 ErrorContext* errorContext = static_cast<ErrorContext*>(context); | 864 ErrorContext* errorContext = static_cast<ErrorContext*>(context); |
| 866 errorContext->fErrors++; | 865 errorContext->fErrors++; |
| 867 // This test only expects one error, and that is a kParseError. If there are
others, | 866 // This test only expects one error, and that is a kParseError. If there are
others, |
| 868 // there is some unknown problem. | 867 // there is some unknown problem. |
| 869 REPORTER_ASSERT_MESSAGE(errorContext->fReporter, 1 == errorContext->fErrors, | 868 REPORTER_ASSERT_MESSAGE(errorContext->fReporter, 1 == errorContext->fErrors, |
| 870 "This threw more errors than expected."); | 869 "This threw more errors than expected."); |
| 871 REPORTER_ASSERT_MESSAGE(errorContext->fReporter, kParseError_SkError == erro
r, | 870 REPORTER_ASSERT_MESSAGE(errorContext->fReporter, kParseError_SkError == erro
r, |
| 872 SkGetLastErrorString()); | 871 SkGetLastErrorString()); |
| 873 } | 872 } |
| 874 | 873 |
| 875 static void md5(const SkBitmap& bm, SkMD5::Digest* digest) { | 874 static void test_bitmap_with_encoded_data(skiatest::Reporter* reporter) { |
| 876 SkAutoLockPixels autoLockPixels(bm); | |
| 877 SkASSERT(bm.getPixels()); | |
| 878 SkMD5 md5; | |
| 879 size_t rowLen = bm.info().bytesPerPixel() * bm.width(); | |
| 880 for (int y = 0; y < bm.height(); ++y) { | |
| 881 md5.update(static_cast<uint8_t*>(bm.getAddr(0, y)), rowLen); | |
| 882 } | |
| 883 md5.finish(*digest); | |
| 884 } | |
| 885 | |
| 886 DEF_TEST(Picture_EncodedData, reporter) { | |
| 887 // Create a bitmap that will be encoded. | 875 // Create a bitmap that will be encoded. |
| 888 SkBitmap original; | 876 SkBitmap original; |
| 889 make_bm(&original, 100, 100, SK_ColorBLUE, true); | 877 make_bm(&original, 100, 100, SK_ColorBLUE, true); |
| 890 SkDynamicMemoryWStream wStream; | 878 SkDynamicMemoryWStream wStream; |
| 891 if (!SkImageEncoder::EncodeStream(&wStream, original, SkImageEncoder::kPNG_T
ype, 100)) { | 879 if (!SkImageEncoder::EncodeStream(&wStream, original, SkImageEncoder::kPNG_T
ype, 100)) { |
| 892 return; | 880 return; |
| 893 } | 881 } |
| 894 SkAutoDataUnref data(wStream.copyToData()); | 882 SkAutoDataUnref data(wStream.copyToData()); |
| 895 | 883 |
| 896 SkBitmap bm; | 884 SkBitmap bm; |
| 897 bool installSuccess = SkDEPRECATED_InstallDiscardablePixelRef(data, &bm); | 885 bool installSuccess = SkDEPRECATED_InstallDiscardablePixelRef(data, &bm); |
| 898 REPORTER_ASSERT(reporter, installSuccess); | 886 REPORTER_ASSERT(reporter, installSuccess); |
| 899 | 887 |
| 900 // Write both bitmaps to pictures, and ensure that the resulting data stream
s are the same. | 888 // Write both bitmaps to pictures, and ensure that the resulting data stream
s are the same. |
| 901 // Flattening original will follow the old path of performing an encode, whi
le flattening bm | 889 // Flattening original will follow the old path of performing an encode, whi
le flattening bm |
| 902 // will use the already encoded data. | 890 // will use the already encoded data. |
| 903 SkAutoDataUnref picture1(serialized_picture_from_bitmap(original)); | 891 SkAutoDataUnref picture1(serialized_picture_from_bitmap(original)); |
| 904 SkAutoDataUnref picture2(serialized_picture_from_bitmap(bm)); | 892 SkAutoDataUnref picture2(serialized_picture_from_bitmap(bm)); |
| 905 REPORTER_ASSERT(reporter, picture1->equals(picture2)); | 893 REPORTER_ASSERT(reporter, picture1->equals(picture2)); |
| 906 | |
| 907 // Now test that a parse error was generated when trying to create a new SkP
icture without | 894 // Now test that a parse error was generated when trying to create a new SkP
icture without |
| 908 // providing a function to decode the bitmap. | 895 // providing a function to decode the bitmap. |
| 909 ErrorContext context; | 896 ErrorContext context; |
| 910 context.fErrors = 0; | 897 context.fErrors = 0; |
| 911 context.fReporter = reporter; | 898 context.fReporter = reporter; |
| 912 SkSetErrorCallback(assert_one_parse_error_cb, &context); | 899 SkSetErrorCallback(assert_one_parse_error_cb, &context); |
| 913 SkMemoryStream pictureStream(picture1); | 900 SkMemoryStream pictureStream(picture1); |
| 914 SkClearLastError(); | 901 SkClearLastError(); |
| 915 SkAutoTUnref<SkPicture> pictureFromStream(SkPicture::CreateFromStream(&pictu
reStream, nullptr)); | 902 SkAutoTUnref<SkPicture> pictureFromStream(SkPicture::CreateFromStream(&pictu
reStream, nullptr)); |
| 916 REPORTER_ASSERT(reporter, pictureFromStream.get() != nullptr); | 903 REPORTER_ASSERT(reporter, pictureFromStream.get() != nullptr); |
| 917 SkClearLastError(); | 904 SkClearLastError(); |
| 918 SkSetErrorCallback(nullptr, nullptr); | 905 SkSetErrorCallback(nullptr, nullptr); |
| 919 | |
| 920 // Test that using the version of CreateFromStream that just takes a stream
also decodes the | |
| 921 // bitmap. Drawing this picture should look exactly like the original bitmap
. | |
| 922 SkMD5::Digest referenceDigest; | |
| 923 md5(original, &referenceDigest); | |
| 924 | |
| 925 SkBitmap dst; | |
| 926 dst.allocPixels(original.info()); | |
| 927 dst.eraseColor(SK_ColorRED); | |
| 928 SkCanvas canvas(dst); | |
| 929 | |
| 930 pictureStream.rewind(); | |
| 931 pictureFromStream.reset(SkPicture::CreateFromStream(&pictureStream)); | |
| 932 canvas.drawPicture(pictureFromStream.get()); | |
| 933 | |
| 934 SkMD5::Digest digest2; | |
| 935 md5(dst, &digest2); | |
| 936 REPORTER_ASSERT(reporter, referenceDigest == digest2); | |
| 937 } | 906 } |
| 938 | 907 |
| 939 static void test_clip_bound_opt(skiatest::Reporter* reporter) { | 908 static void test_clip_bound_opt(skiatest::Reporter* reporter) { |
| 940 // Test for crbug.com/229011 | 909 // Test for crbug.com/229011 |
| 941 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(4), SkIntToScalar(4), | 910 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(4), SkIntToScalar(4), |
| 942 SkIntToScalar(2), SkIntToScalar(2)); | 911 SkIntToScalar(2), SkIntToScalar(2)); |
| 943 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(7), SkIntToScalar(7), | 912 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(7), SkIntToScalar(7), |
| 944 SkIntToScalar(1), SkIntToScalar(1)); | 913 SkIntToScalar(1), SkIntToScalar(1)); |
| 945 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(6), SkIntToScalar(6), | 914 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(6), SkIntToScalar(6), |
| 946 SkIntToScalar(1), SkIntToScalar(1)); | 915 SkIntToScalar(1), SkIntToScalar(1)); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1198 test_bad_bitmap(); | 1167 test_bad_bitmap(); |
| 1199 #endif | 1168 #endif |
| 1200 test_unbalanced_save_restores(reporter); | 1169 test_unbalanced_save_restores(reporter); |
| 1201 test_peephole(); | 1170 test_peephole(); |
| 1202 #if SK_SUPPORT_GPU | 1171 #if SK_SUPPORT_GPU |
| 1203 test_gpu_veto(reporter); | 1172 test_gpu_veto(reporter); |
| 1204 #endif | 1173 #endif |
| 1205 test_has_text(reporter); | 1174 test_has_text(reporter); |
| 1206 test_images_are_found_by_willPlayBackBitmaps(reporter); | 1175 test_images_are_found_by_willPlayBackBitmaps(reporter); |
| 1207 test_analysis(reporter); | 1176 test_analysis(reporter); |
| 1177 test_bitmap_with_encoded_data(reporter); |
| 1208 test_clip_bound_opt(reporter); | 1178 test_clip_bound_opt(reporter); |
| 1209 test_clip_expansion(reporter); | 1179 test_clip_expansion(reporter); |
| 1210 test_hierarchical(reporter); | 1180 test_hierarchical(reporter); |
| 1211 test_gen_id(reporter); | 1181 test_gen_id(reporter); |
| 1212 test_savelayer_extraction(reporter); | 1182 test_savelayer_extraction(reporter); |
| 1213 test_cull_rect_reset(reporter); | 1183 test_cull_rect_reset(reporter); |
| 1214 } | 1184 } |
| 1215 | 1185 |
| 1216 static void draw_bitmaps(const SkBitmap bitmap, SkCanvas* canvas) { | 1186 static void draw_bitmaps(const SkBitmap bitmap, SkCanvas* canvas) { |
| 1217 const SkPaint paint; | 1187 const SkPaint paint; |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1408 | 1378 |
| 1409 SkAutoTDelete<SkStream> rstream(wstream.detachAsStream()); | 1379 SkAutoTDelete<SkStream> rstream(wstream.detachAsStream()); |
| 1410 SkAutoTUnref<SkPicture> deserializedPicture(SkPicture::CreateFromStream(rstr
eam)); | 1380 SkAutoTUnref<SkPicture> deserializedPicture(SkPicture::CreateFromStream(rstr
eam)); |
| 1411 | 1381 |
| 1412 REPORTER_ASSERT(r, SkToBool(deserializedPicture)); | 1382 REPORTER_ASSERT(r, SkToBool(deserializedPicture)); |
| 1413 REPORTER_ASSERT(r, deserializedPicture->cullRect().left() == 1); | 1383 REPORTER_ASSERT(r, deserializedPicture->cullRect().left() == 1); |
| 1414 REPORTER_ASSERT(r, deserializedPicture->cullRect().top() == 2); | 1384 REPORTER_ASSERT(r, deserializedPicture->cullRect().top() == 2); |
| 1415 REPORTER_ASSERT(r, deserializedPicture->cullRect().right() == 3); | 1385 REPORTER_ASSERT(r, deserializedPicture->cullRect().right() == 3); |
| 1416 REPORTER_ASSERT(r, deserializedPicture->cullRect().bottom() == 4); | 1386 REPORTER_ASSERT(r, deserializedPicture->cullRect().bottom() == 4); |
| 1417 } | 1387 } |
| OLD | NEW |