aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-03-19 08:31:14 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-19 08:31:14 -0700
commit3ef71e343bf075888fb50892350390b4dd47de24 (patch)
treed4765ef144928600322cf21bdb41b37f05a55697
parent647211f1243f2dc925588e75038be49cad7b5431 (diff)
guarded change to SkImageGenerator to make getInfo() const
-rw-r--r--dm/DMSrcSink.cpp13
-rw-r--r--include/codec/SkCodec.h4
-rw-r--r--include/core/SkImageGenerator.h31
-rw-r--r--src/codec/SkCodec.cpp3
-rw-r--r--src/core/SkImageGenerator.cpp14
-rw-r--r--src/images/SkDecodingImageGenerator.cpp5
-rw-r--r--src/lazy/SkCachingPixelRef.cpp9
-rw-r--r--src/lazy/SkDiscardablePixelRef.cpp10
-rw-r--r--src/ports/SkImageGenerator_skia.cpp8
-rw-r--r--tests/CachedDecodingPixelRefTest.cpp31
-rw-r--r--tests/DrawBitmapRectTest.cpp6
-rw-r--r--tests/ImageGeneratorTest.cpp7
-rw-r--r--tests/SurfaceTest.cpp7
-rw-r--r--tools/LazyDecodeBitmap.cpp8
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.