diff options
author | reed <reed@google.com> | 2015-03-19 08:31:14 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-19 08:31:14 -0700 |
commit | 3ef71e343bf075888fb50892350390b4dd47de24 (patch) | |
tree | d4765ef144928600322cf21bdb41b37f05a55697 | |
parent | 647211f1243f2dc925588e75038be49cad7b5431 (diff) |
guarded change to SkImageGenerator to make getInfo() const
BUG=skia:
Review URL: https://codereview.chromium.org/1017293002
-rw-r--r-- | dm/DMSrcSink.cpp | 13 | ||||
-rw-r--r-- | include/codec/SkCodec.h | 4 | ||||
-rw-r--r-- | include/core/SkImageGenerator.h | 31 | ||||
-rw-r--r-- | src/codec/SkCodec.cpp | 3 | ||||
-rw-r--r-- | src/core/SkImageGenerator.cpp | 14 | ||||
-rw-r--r-- | src/images/SkDecodingImageGenerator.cpp | 5 | ||||
-rw-r--r-- | src/lazy/SkCachingPixelRef.cpp | 9 | ||||
-rw-r--r-- | src/lazy/SkDiscardablePixelRef.cpp | 10 | ||||
-rw-r--r-- | src/ports/SkImageGenerator_skia.cpp | 8 | ||||
-rw-r--r-- | tests/CachedDecodingPixelRefTest.cpp | 31 | ||||
-rw-r--r-- | tests/DrawBitmapRectTest.cpp | 6 | ||||
-rw-r--r-- | tests/ImageGeneratorTest.cpp | 7 | ||||
-rw-r--r-- | tests/SurfaceTest.cpp | 7 | ||||
-rw-r--r-- | tools/LazyDecodeBitmap.cpp | 8 |
14 files changed, 85 insertions, 71 deletions
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index 7bbdff73bc..638f670834 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -57,12 +57,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { return SkStringPrintf("Couldn't decode %s.", fPath.c_str()); } - SkImageInfo decodeInfo; - if (!codec->getInfo(&decodeInfo)) { - return SkStringPrintf("Couldn't getInfo %s.", fPath.c_str()); - } - - decodeInfo = decodeInfo.makeColorType(canvasInfo.colorType()); + SkImageInfo decodeInfo = codec->getInfo().makeColorType(canvasInfo.colorType()); if (decodeInfo.alphaType() == kUnpremul_SkAlphaType) { // FIXME: Currently we cannot draw unpremultiplied sources. decodeInfo = decodeInfo.makeAlphaType(kPremul_SkAlphaType); @@ -93,11 +88,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { SkISize CodecSrc::size() const { SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); - SkImageInfo info; - if (codec && codec->getInfo(&info)) { - return info.dimensions(); - } - return SkISize::Make(0,0); + return codec->getInfo().dimensions(); } Name CodecSrc::name() const { diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h index 6d0557cb28..3550bb1831 100644 --- a/include/codec/SkCodec.h +++ b/include/codec/SkCodec.h @@ -58,10 +58,12 @@ protected: * initially returns a non-opaque answer, but completing the decode * reveals that the image is actually opaque. */ +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO bool onGetInfo(SkImageInfo* info) SK_OVERRIDE { *info = fInfo; return true; } +#endif // Helper for subclasses. const SkImageInfo& getOriginalInfo() { return fInfo; } @@ -99,5 +101,7 @@ private: const SkImageInfo fInfo; SkAutoTDelete<SkStream> fStream; bool fNeedsRewind; + + typedef SkImageGenerator INHERITED; }; #endif // SkCodec_DEFINED diff --git a/include/core/SkImageGenerator.h b/include/core/SkImageGenerator.h index a5440bd3b4..5f8f5ba8fb 100644 --- a/include/core/SkImageGenerator.h +++ b/include/core/SkImageGenerator.h @@ -65,15 +65,19 @@ public: SkData* refEncodedData() { return this->onRefEncodedData(); } /** - * Return some information about the image, allowing the owner of - * this object to allocate pixels. - * - * Repeated calls to this function should give the same results, - * allowing the PixelRef to be immutable. - * - * @return false if anything goes wrong. + * Return the ImageInfo associated with this generator. */ - bool getInfo(SkImageInfo* info); +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO + SkImageInfo getInfo(); + bool getInfo(SkImageInfo* info) { + if (info) { + *info = this->getInfo(); + } + return true; + } +#else + const SkImageInfo& getInfo() const { return fInfo; } +#endif /** * Used to describe the result of a call to getPixels(). @@ -206,8 +210,14 @@ public: static SkImageGenerator* NewFromData(SkData*); protected: - virtual SkData* onRefEncodedData(); +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO + SkImageGenerator() : fInfo(SkImageInfo::MakeUnknown(0, 0) ) {} virtual bool onGetInfo(SkImageInfo* info); +#endif + SkImageGenerator(const SkImageInfo& info) : fInfo(info) {} + + virtual SkData* onRefEncodedData(); + #ifdef SK_SUPPORT_LEGACY_OPTIONLESS_GET_PIXELS virtual Result onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, @@ -219,6 +229,9 @@ protected: virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3]); virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], SkYUVColorSpace* colorSpace); + +private: + const SkImageInfo fInfo; }; #endif // SkImageGenerator_DEFINED diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp index d557087c01..12341f5929 100644 --- a/src/codec/SkCodec.cpp +++ b/src/codec/SkCodec.cpp @@ -46,7 +46,8 @@ SkCodec* SkCodec::NewFromData(SkData* data) { } SkCodec::SkCodec(const SkImageInfo& info, SkStream* stream) - : fInfo(info) + : INHERITED(info) + , fInfo(info) , fStream(stream) , fNeedsRewind(false) {} diff --git a/src/core/SkImageGenerator.cpp b/src/core/SkImageGenerator.cpp index 4c69fd2a0b..27bc141d57 100644 --- a/src/core/SkImageGenerator.cpp +++ b/src/core/SkImageGenerator.cpp @@ -7,13 +7,15 @@ #include "SkImageGenerator.h" -bool SkImageGenerator::getInfo(SkImageInfo* info) { - SkImageInfo dummy; - if (NULL == info) { - info = &dummy; +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO +SkImageInfo SkImageGenerator::getInfo() { + SkImageInfo info; + if (!this->onGetInfo(&info)) { + info = SkImageInfo::MakeUnknown(0, 0); } - return this->onGetInfo(info); + return info; } +#endif SkImageGenerator::Result SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options* options, @@ -120,9 +122,11 @@ SkData* SkImageGenerator::onRefEncodedData() { return NULL; } +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO bool SkImageGenerator::onGetInfo(SkImageInfo*) { return false; } +#endif #ifdef SK_SUPPORT_LEGACY_OPTIONLESS_GET_PIXELS SkImageGenerator::Result SkImageGenerator::onGetPixels(const SkImageInfo&, void*, size_t, diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp index 170397dda1..337a96407b 100644 --- a/src/images/SkDecodingImageGenerator.cpp +++ b/src/images/SkDecodingImageGenerator.cpp @@ -38,10 +38,12 @@ public: protected: SkData* onRefEncodedData() SK_OVERRIDE; +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO bool onGetInfo(SkImageInfo* info) SK_OVERRIDE { *info = fInfo; return true; } +#endif virtual Result onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&, SkPMColor ctable[], int* ctableCount) SK_OVERRIDE; @@ -116,7 +118,8 @@ DecodingImageGenerator::DecodingImageGenerator( const SkImageInfo& info, int sampleSize, bool ditherImage) - : fData(data) + : INHERITED(info) + , fData(data) , fStream(stream) , fInfo(info) , fSampleSize(sampleSize) diff --git a/src/lazy/SkCachingPixelRef.cpp b/src/lazy/SkCachingPixelRef.cpp index dc53a5d6c7..5fc0d2a87f 100644 --- a/src/lazy/SkCachingPixelRef.cpp +++ b/src/lazy/SkCachingPixelRef.cpp @@ -11,11 +11,12 @@ bool SkCachingPixelRef::Install(SkImageGenerator* generator, SkBitmap* dst) { - SkImageInfo info; SkASSERT(dst != NULL); - if ((NULL == generator) - || !(generator->getInfo(&info)) - || !dst->setInfo(info)) { + if (NULL == generator) { + return false; + } + const SkImageInfo info = generator->getInfo(); + if (!dst->setInfo(info)) { SkDELETE(generator); return false; } diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp index b810c2b183..1e42042fb6 100644 --- a/src/lazy/SkDiscardablePixelRef.cpp +++ b/src/lazy/SkDiscardablePixelRef.cpp @@ -109,12 +109,12 @@ void SkDiscardablePixelRef::onUnlockPixels() { bool SkInstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst, SkDiscardableMemory::Factory* factory) { - SkImageInfo info; SkAutoTDelete<SkImageGenerator> autoGenerator(generator); - if ((NULL == autoGenerator.get()) - || (!autoGenerator->getInfo(&info)) - || info.isEmpty() - || (!dst->setInfo(info))) { + if (NULL == autoGenerator.get()) { + return false; + } + SkImageInfo info = autoGenerator->getInfo(); + if (info.isEmpty() || !dst->setInfo(info)) { return false; } // Since dst->setInfo() may have changed/fixed-up info, we copy it back from that bitmap diff --git a/src/ports/SkImageGenerator_skia.cpp b/src/ports/SkImageGenerator_skia.cpp index 1448d57ce5..6938880357 100644 --- a/src/ports/SkImageGenerator_skia.cpp +++ b/src/ports/SkImageGenerator_skia.cpp @@ -39,7 +39,7 @@ class SkImageDecoderGenerator : public SkImageGenerator { public: SkImageDecoderGenerator(const SkImageInfo& info, SkImageDecoder* decoder, SkData* data) - : fInfo(info), fDecoder(decoder), fData(SkRef(data)) + : INHERITED(info), fInfo(info), fDecoder(decoder), fData(SkRef(data)) {} protected: @@ -47,10 +47,12 @@ protected: return SkRef(fData.get()); } +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO virtual bool onGetInfo(SkImageInfo* info) SK_OVERRIDE { *info = fInfo; return true; } +#endif virtual Result onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&, @@ -92,7 +94,9 @@ protected: SkMemoryStream stream(fData->data(), fData->size(), false); return fDecoder->decodeYUV8Planes(&stream, sizes, planes, rowBytes, colorSpace); } - + +private: + typedef SkImageGenerator INHERITED; }; SkImageGenerator* SkImageGenerator::NewFromData(SkData* data) { diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp index d6edda75cb..ddc0994e56 100644 --- a/tests/CachedDecodingPixelRefTest.cpp +++ b/tests/CachedDecodingPixelRefTest.cpp @@ -163,7 +163,6 @@ DEF_TEST(DecodingImageGenerator, reporter) { class TestImageGenerator : public SkImageGenerator { public: enum TestType { - kFailGetInfo_TestType, kFailGetPixels_TestType, kSucceedGetPixels_TestType, kLast_TestType = kSucceedGetPixels_TestType @@ -172,22 +171,24 @@ public: static int Height() { return 10; } static uint32_t Color() { return 0xff123456; } TestImageGenerator(TestType type, skiatest::Reporter* reporter) - : fType(type), fReporter(reporter) { + : INHERITED(GetMyInfo()), fType(type), fReporter(reporter) { SkASSERT((fType <= kLast_TestType) && (fType >= 0)); } virtual ~TestImageGenerator() { } protected: + static SkImageInfo GetMyInfo() { + return SkImageInfo::MakeN32(TestImageGenerator::Width(), TestImageGenerator::Height(), + kOpaque_SkAlphaType); + } + +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO bool onGetInfo(SkImageInfo* info) SK_OVERRIDE { REPORTER_ASSERT(fReporter, info); - if ((NULL == info) || (kFailGetInfo_TestType == fType)) { - return false; - } - *info = SkImageInfo::MakeN32(TestImageGenerator::Width(), - TestImageGenerator::Height(), - kOpaque_SkAlphaType); + *info = GetMyInfo(); return true; } +#endif virtual Result onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&, @@ -212,6 +213,8 @@ protected: private: const TestType fType; skiatest::Reporter* const fReporter; + + typedef SkImageGenerator INHERITED; }; static void check_test_image_generator_bitmap(skiatest::Reporter* reporter, @@ -256,8 +259,7 @@ static void check_pixelref(TestImageGenerator::TestType type, } else { success = SkInstallDiscardablePixelRef(gen.detach(), &lazy, factory); } - REPORTER_ASSERT(reporter, success - == (TestImageGenerator::kFailGetInfo_TestType != type)); + REPORTER_ASSERT(reporter, success); if (TestImageGenerator::kSucceedGetPixels_TestType == type) { check_test_image_generator_bitmap(reporter, lazy); } else if (TestImageGenerator::kFailGetPixels_TestType == type) { @@ -283,15 +285,11 @@ static void test_newlockdelete(skiatest::Reporter* reporter) { DEF_TEST(DiscardableAndCachingPixelRef, reporter) { test_newlockdelete(reporter); - check_pixelref(TestImageGenerator::kFailGetInfo_TestType, - reporter, kSkCaching_PixelRefType, NULL); check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, kSkCaching_PixelRefType, NULL); check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, kSkCaching_PixelRefType, NULL); - check_pixelref(TestImageGenerator::kFailGetInfo_TestType, - reporter, kSkDiscardable_PixelRefType, NULL); check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, kSkDiscardable_PixelRefType, NULL); check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, @@ -321,7 +319,6 @@ DEF_TEST(DiscardableAndCachingPixelRef, reporter) { DEF_TEST(Image_NewFromGenerator, r) { TestImageGenerator::TestType testTypes[] = { - TestImageGenerator::kFailGetInfo_TestType, TestImageGenerator::kFailGetPixels_TestType, TestImageGenerator::kSucceedGetPixels_TestType, }; @@ -329,10 +326,6 @@ DEF_TEST(Image_NewFromGenerator, r) { TestImageGenerator::TestType test = testTypes[i]; SkImageGenerator* gen = SkNEW_ARGS(TestImageGenerator, (test, r)); SkAutoTUnref<SkImage> image(SkImage::NewFromGenerator(gen)); - if (TestImageGenerator::kFailGetInfo_TestType == test) { - REPORTER_ASSERT(r, NULL == image.get()); - continue; - } if (NULL == image.get()) { ERRORF(r, "SkImage::NewFromGenerator unexpecedly failed [" SK_SIZE_T_SPECIFIER "]", i); diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp index 9c0c6839b2..bde0095df9 100644 --- a/tests/DrawBitmapRectTest.cpp +++ b/tests/DrawBitmapRectTest.cpp @@ -20,14 +20,14 @@ // A BitmapFactory that always fails when asked to return pixels. class FailureImageGenerator : public SkImageGenerator { public: - FailureImageGenerator() { } - virtual ~FailureImageGenerator() { } - + FailureImageGenerator() : SkImageGenerator(SkImageInfo::MakeN32Premul(100, 100)) {} protected: +#ifdef SK_SUPPORT_LEGACY_BOOL_ONGETINFO bool onGetInfo(SkImageInfo* info) SK_OVERRIDE { *info = SkImageInfo::MakeN32Premul(100, 100); return true; } +#endif // default onGetPixels() returns kUnimplemented, which is what we want. }; diff --git a/tests/ImageGeneratorTest.cpp b/tests/ImageGeneratorTest.cpp index 1f960ea9e9..94867bc945 100644 --- a/tests/ImageGeneratorTest.cpp +++ b/tests/ImageGeneratorTest.cpp @@ -8,8 +8,13 @@ #include "SkImageGenerator.h" #include "Test.h" +class MyImageGenerator : public SkImageGenerator { +public: + MyImageGenerator() : SkImageGenerator(SkImageInfo::MakeN32Premul(0, 0)) {} +}; + DEF_TEST(ImageGenerator, reporter) { - SkImageGenerator ig; + MyImageGenerator ig; SkISize sizes[3]; sizes[0] = SkISize::Make(200, 200); sizes[1] = SkISize::Make(100, 100); diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp index 9ce9d5fbe8..6142af9ed1 100644 --- a/tests/SurfaceTest.cpp +++ b/tests/SurfaceTest.cpp @@ -67,11 +67,8 @@ enum ImageType { #include "SkImageGenerator.h" class EmptyGenerator : public SkImageGenerator { -protected: - bool onGetInfo(SkImageInfo* info) SK_OVERRIDE { - *info = SkImageInfo::Make(0, 0, kN32_SkColorType, kPremul_SkAlphaType); - return true; - } +public: + EmptyGenerator() : SkImageGenerator(SkImageInfo::MakeN32Premul(0, 0)) {} }; static void test_empty_image(skiatest::Reporter* reporter) { diff --git a/tools/LazyDecodeBitmap.cpp b/tools/LazyDecodeBitmap.cpp index 0dca16b3f1..3b6f17e741 100644 --- a/tools/LazyDecodeBitmap.cpp +++ b/tools/LazyDecodeBitmap.cpp @@ -22,19 +22,17 @@ DEFINE_bool(useVolatileCache, false, "Use a volatile cache for deferred image de // Fits SkPicture::InstallPixelRefProc call signature. // Used in SkPictureData::CreateFromStream -bool sk_tools::LazyDecodeBitmap(const void* src, - size_t length, - SkBitmap* dst) { +bool sk_tools::LazyDecodeBitmap(const void* src, size_t length, SkBitmap* dst) { SkAutoDataUnref data(SkData::NewWithCopy(src, length)); if (NULL == data.get()) { return false; } SkAutoTDelete<SkImageGenerator> gen(SkImageGenerator::NewFromData(data)); - SkImageInfo info; - if ((NULL == gen.get()) || !gen->getInfo(&info)) { + if (NULL == gen.get()) { return false; } + const SkImageInfo info = gen->getInfo(); SkDiscardableMemory::Factory* pool = NULL; if ((!FLAGS_useVolatileCache) || (info.width() * info.height() < 32 * 1024)) { // how to do switching with SkDiscardableMemory. |