1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkData.h" 9 #include "SkGraphics.h" 10 #include "SkImageGenerator.h" 11 #include "Test.h" 12 13 static bool gMyFactoryWasCalled; 14 15 static SkImageGenerator* my_factory(SkData*) { 16 gMyFactoryWasCalled = true; 17 return nullptr; 18 } 19 20 static void test_imagegenerator_factory(skiatest::Reporter* reporter) { 21 // just need a non-empty data to test things 22 SkAutoTUnref<SkData> data(SkData::NewWithCString("test_imagegenerator_factory")); 23 24 gMyFactoryWasCalled = false; 25 26 SkImageGenerator* gen; 27 REPORTER_ASSERT(reporter, !gMyFactoryWasCalled); 28 29 gen = SkImageGenerator::NewFromEncoded(data); 30 REPORTER_ASSERT(reporter, nullptr == gen); 31 REPORTER_ASSERT(reporter, !gMyFactoryWasCalled); 32 33 // Test is racy, in that it hopes no other thread is changing this global... 34 SkGraphics::ImageGeneratorFromEncodedFactory prev = 35 SkGraphics::SetImageGeneratorFromEncodedFactory(my_factory); 36 gen = SkImageGenerator::NewFromEncoded(data); 37 REPORTER_ASSERT(reporter, nullptr == gen); 38 REPORTER_ASSERT(reporter, gMyFactoryWasCalled); 39 SkGraphics::SetImageGeneratorFromEncodedFactory(prev); 40 } 41 42 class MyImageGenerator : public SkImageGenerator { 43 public: 44 MyImageGenerator() : SkImageGenerator(SkImageInfo::MakeN32Premul(0, 0)) {} 45 }; 46 47 DEF_TEST(ImageGenerator, reporter) { 48 MyImageGenerator ig; 49 SkISize sizes[3]; 50 sizes[0] = SkISize::Make(200, 200); 51 sizes[1] = SkISize::Make(100, 100); 52 sizes[2] = SkISize::Make( 50, 50); 53 void* planes[3] = { nullptr }; 54 size_t rowBytes[3] = { 0 }; 55 SkYUVColorSpace colorSpace; 56 57 // Check that the YUV decoding API does not cause any crashes 58 ig.getYUV8Planes(sizes, nullptr, nullptr, &colorSpace); 59 ig.getYUV8Planes(sizes, nullptr, nullptr, nullptr); 60 ig.getYUV8Planes(sizes, planes, nullptr, nullptr); 61 ig.getYUV8Planes(sizes, nullptr, rowBytes, nullptr); 62 ig.getYUV8Planes(sizes, planes, rowBytes, nullptr); 63 ig.getYUV8Planes(sizes, planes, rowBytes, &colorSpace); 64 65 int dummy; 66 planes[0] = planes[1] = planes[2] = &dummy; 67 rowBytes[0] = rowBytes[1] = rowBytes[2] = 250; 68 69 ig.getYUV8Planes(sizes, planes, rowBytes, &colorSpace); 70 71 // Suppressed due to https://code.google.com/p/skia/issues/detail?id=4339 72 if (false) { 73 test_imagegenerator_factory(reporter); 74 } 75 } 76