| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 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 "Resources.h" | 
| 8 #include "SkBitmap.h" | 9 #include "SkBitmap.h" | 
| 9 #include "SkCanvas.h" | 10 #include "SkCanvas.h" | 
| 10 #include "SkColor.h" | 11 #include "SkColor.h" | 
| 11 #include "SkColorPriv.h" | 12 #include "SkColorPriv.h" | 
| 12 #include "SkData.h" | 13 #include "SkData.h" | 
| 13 #include "SkDecodingImageGenerator.h" | 14 #include "SkDecodingImageGenerator.h" | 
| 14 #include "SkDiscardableMemoryPool.h" | 15 #include "SkDiscardableMemoryPool.h" | 
| 15 #include "SkForceLinking.h" | 16 #include "SkForceLinking.h" | 
| 16 #include "SkGradientShader.h" | 17 #include "SkGradientShader.h" | 
| 17 #include "SkImageDecoder.h" | 18 #include "SkImageDecoder.h" | 
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 141             // Color components may not match exactly due to rounding error. | 142             // Color components may not match exactly due to rounding error. | 
| 142             REPORTER_ASSERT(reporter, dr <= 1); | 143             REPORTER_ASSERT(reporter, dr <= 1); | 
| 143             REPORTER_ASSERT(reporter, dg <= 1); | 144             REPORTER_ASSERT(reporter, dg <= 1); | 
| 144             REPORTER_ASSERT(reporter, db <= 1); | 145             REPORTER_ASSERT(reporter, db <= 1); | 
| 145         } | 146         } | 
| 146     } | 147     } | 
| 147 } | 148 } | 
| 148 | 149 | 
| 149 static void test_unpremul(skiatest::Reporter* reporter) { | 150 static void test_unpremul(skiatest::Reporter* reporter) { | 
| 150     // This test cannot run if there is no resource path. | 151     // This test cannot run if there is no resource path. | 
| 151     SkString resourcePath = skiatest::Test::GetResourcePath(); | 152     SkString resourcePath = GetResourcePath(); | 
| 152     if (resourcePath.isEmpty()) { | 153     if (resourcePath.isEmpty()) { | 
| 153         SkDebugf("Could not run unpremul test because resourcePath not specified
     ."); | 154         SkDebugf("Could not run unpremul test because resourcePath not specified
     ."); | 
| 154         return; | 155         return; | 
| 155     } | 156     } | 
| 156     SkOSFile::Iter iter(resourcePath.c_str()); | 157     SkOSFile::Iter iter(resourcePath.c_str()); | 
| 157     SkString basename; | 158     SkString basename; | 
| 158     if (iter.next(&basename)) { | 159     if (iter.next(&basename)) { | 
| 159         do { | 160         do { | 
| 160             SkString filename = SkOSPath::SkPathJoin(resourcePath.c_str(), basen
     ame.c_str()); | 161             SkString filename = SkOSPath::SkPathJoin(resourcePath.c_str(), basen
     ame.c_str()); | 
| 161             // SkDebugf("about to decode \"%s\"\n", filename.c_str()); | 162             // SkDebugf("about to decode \"%s\"\n", filename.c_str()); | 
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 223     } | 224     } | 
| 224 | 225 | 
| 225     // When decoding the full image, the alpha type should match the one | 226     // When decoding the full image, the alpha type should match the one | 
| 226     // returned by the bounds decode, unless the full decode determined that | 227     // returned by the bounds decode, unless the full decode determined that | 
| 227     // the alpha type is actually opaque. | 228     // the alpha type is actually opaque. | 
| 228     REPORTER_ASSERT(reporter, bm.alphaType() == boundsAlphaType | 229     REPORTER_ASSERT(reporter, bm.alphaType() == boundsAlphaType | 
| 229                               || bm.alphaType() == kOpaque_SkAlphaType); | 230                               || bm.alphaType() == kOpaque_SkAlphaType); | 
| 230 } | 231 } | 
| 231 | 232 | 
| 232 DEF_TEST(ImageDecoding_alphaType, reporter) { | 233 DEF_TEST(ImageDecoding_alphaType, reporter) { | 
| 233     SkString resourcePath = skiatest::Test::GetResourcePath(); | 234     SkString resourcePath = GetResourcePath(); | 
| 234     if (resourcePath.isEmpty()) { | 235     if (resourcePath.isEmpty()) { | 
| 235         SkDebugf("Could not run alphaType test because resourcePath not specifie
     d."); | 236         SkDebugf("Could not run alphaType test because resourcePath not specifie
     d."); | 
| 236         return; | 237         return; | 
| 237     } | 238     } | 
| 238 | 239 | 
| 239     SkOSFile::Iter iter(resourcePath.c_str()); | 240     SkOSFile::Iter iter(resourcePath.c_str()); | 
| 240     SkString basename; | 241     SkString basename; | 
| 241     if (iter.next(&basename)) { | 242     if (iter.next(&basename)) { | 
| 242         do { | 243         do { | 
| 243             SkString filename = SkOSPath::SkPathJoin(resourcePath.c_str(), basen
     ame.c_str()); | 244             SkString filename = SkOSPath::SkPathJoin(resourcePath.c_str(), basen
     ame.c_str()); | 
| 244             for (int truth = 0; truth <= 1; ++truth) { | 245             for (int truth = 0; truth <= 1; ++truth) { | 
| 245                 test_alphaType(reporter, filename, SkToBool(truth)); | 246                 test_alphaType(reporter, filename, SkToBool(truth)); | 
| 246             } | 247             } | 
| 247         } while (iter.next(&basename)); | 248         } while (iter.next(&basename)); | 
| 248     } else { | 249     } else { | 
| 249         SkDebugf("Failed to find any files :(\n"); | 250         SkDebugf("Failed to find any files :(\n"); | 
| 250     } | 251     } | 
| 251 | 252 | 
| 252 } | 253 } | 
| 253 | 254 | 
| 254 // Using known images, test that decoding into unpremul and premul behave as exp
     ected. | 255 // Using known images, test that decoding into unpremul and premul behave as exp
     ected. | 
| 255 DEF_TEST(ImageDecoding_unpremul, reporter) { | 256 DEF_TEST(ImageDecoding_unpremul, reporter) { | 
| 256     SkString resourcePath = skiatest::Test::GetResourcePath(); | 257     SkString resourcePath = GetResourcePath(); | 
| 257     if (resourcePath.isEmpty()) { | 258     if (resourcePath.isEmpty()) { | 
| 258         SkDebugf("Could not run unpremul test because resourcePath not specified
     ."); | 259         SkDebugf("Could not run unpremul test because resourcePath not specified
     ."); | 
| 259         return; | 260         return; | 
| 260     } | 261     } | 
| 261     const char* root = "half-transparent-white-pixel"; | 262     const char* root = "half-transparent-white-pixel"; | 
| 262     const char* suffixes[] = { ".png", ".webp" }; | 263     const char* suffixes[] = { ".png", ".webp" }; | 
| 263 | 264 | 
| 264     for (size_t i = 0; i < SK_ARRAY_COUNT(suffixes); ++i) { | 265     for (size_t i = 0; i < SK_ARRAY_COUNT(suffixes); ++i) { | 
| 265         SkString basename = SkStringPrintf("%s%s", root, suffixes[i]); | 266         SkString basename = SkStringPrintf("%s%s", root, suffixes[i]); | 
| 266         SkString fullName = SkOSPath::SkPathJoin(resourcePath.c_str(), basename.
     c_str()); | 267         SkString fullName = SkOSPath::SkPathJoin(resourcePath.c_str(), basename.
     c_str()); | 
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 495                 SkDecodingImageGenerator::Create(stream, opts), bitmap)) { | 496                 SkDecodingImageGenerator::Create(stream, opts), bitmap)) { | 
| 496         return bitmap->pixelRef(); | 497         return bitmap->pixelRef(); | 
| 497     } | 498     } | 
| 498     return NULL; | 499     return NULL; | 
| 499 } | 500 } | 
| 500 /** | 501 /** | 
| 501  *  A test for the SkDecodingImageGenerator::Create and | 502  *  A test for the SkDecodingImageGenerator::Create and | 
| 502  *  SkInstallDiscardablePixelRef functions. | 503  *  SkInstallDiscardablePixelRef functions. | 
| 503  */ | 504  */ | 
| 504 DEF_TEST(ImprovedBitmapFactory, reporter) { | 505 DEF_TEST(ImprovedBitmapFactory, reporter) { | 
| 505     SkString resourcePath = skiatest::Test::GetResourcePath(); | 506     SkString resourcePath = GetResourcePath(); | 
| 506     SkString path = SkOSPath::SkPathJoin( | 507     SkString path = SkOSPath::SkPathJoin( | 
| 507             resourcePath.c_str(), "randPixels.png"); | 508             resourcePath.c_str(), "randPixels.png"); | 
| 508     SkAutoTUnref<SkStreamRewindable> stream( | 509     SkAutoTUnref<SkStreamRewindable> stream( | 
| 509         SkStream::NewFromFile(path.c_str())); | 510         SkStream::NewFromFile(path.c_str())); | 
| 510     if (sk_exists(path.c_str())) { | 511     if (sk_exists(path.c_str())) { | 
| 511         SkBitmap bm; | 512         SkBitmap bm; | 
| 512         SkAssertResult(bm.setInfo(SkImageInfo::MakeN32Premul(1, 1))); | 513         SkAssertResult(bm.setInfo(SkImageInfo::MakeN32Premul(1, 1))); | 
| 513         REPORTER_ASSERT(reporter, | 514         REPORTER_ASSERT(reporter, | 
| 514             NULL != install_pixel_ref(&bm, stream.detach(), 1, true)); | 515             NULL != install_pixel_ref(&bm, stream.detach(), 1, true)); | 
| 515         SkAutoLockPixels alp(bm); | 516         SkAutoLockPixels alp(bm); | 
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 669         "randPixels.bmp", | 670         "randPixels.bmp", | 
| 670         "randPixels.jpg", | 671         "randPixels.jpg", | 
| 671         "randPixels.png", | 672         "randPixels.png", | 
| 672         "randPixels.webp", | 673         "randPixels.webp", | 
| 673         #if !defined(SK_BUILD_FOR_WIN) | 674         #if !defined(SK_BUILD_FOR_WIN) | 
| 674         // TODO(halcanary): Find out why this fails sometimes. | 675         // TODO(halcanary): Find out why this fails sometimes. | 
| 675         "randPixels.gif", | 676         "randPixels.gif", | 
| 676         #endif | 677         #endif | 
| 677     }; | 678     }; | 
| 678 | 679 | 
| 679     SkString resourceDir = skiatest::Test::GetResourcePath(); | 680     SkString resourceDir = GetResourcePath(); | 
| 680     if (!sk_exists(resourceDir.c_str())) { | 681     if (!sk_exists(resourceDir.c_str())) { | 
| 681         return; | 682         return; | 
| 682     } | 683     } | 
| 683 | 684 | 
| 684     int scaleList[] = {1, 2, 3, 4}; | 685     int scaleList[] = {1, 2, 3, 4}; | 
| 685     bool ditherList[] = {true, false}; | 686     bool ditherList[] = {true, false}; | 
| 686     SkColorType colorList[] = { | 687     SkColorType colorList[] = { | 
| 687         kAlpha_8_SkColorType, | 688         kAlpha_8_SkColorType, | 
| 688         kRGB_565_SkColorType, | 689         kRGB_565_SkColorType, | 
| 689         kARGB_4444_SkColorType,  // Most decoders will fail on 4444. | 690         kARGB_4444_SkColorType,  // Most decoders will fail on 4444. | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 718                     } | 719                     } | 
| 719                     SkDecodingImageGenerator::Options options(scaleList[i], | 720                     SkDecodingImageGenerator::Options options(scaleList[i], | 
| 720                                                               ditherList[j]); | 721                                                               ditherList[j]); | 
| 721                     test_options(reporter, options, encodedStream, encodedData, | 722                     test_options(reporter, options, encodedStream, encodedData, | 
| 722                                  useDataList[m], path); | 723                                  useDataList[m], path); | 
| 723                 } | 724                 } | 
| 724             } | 725             } | 
| 725         } | 726         } | 
| 726     } | 727     } | 
| 727 } | 728 } | 
| OLD | NEW | 
|---|