guarded change to SkImageGenerator to make getInfo() const

BUG=skia:

Review URL: https://codereview.chromium.org/1017293002
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 7bbdff7..638f670 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -57,12 +57,7 @@
         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 @@
 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 6d0557c..3550bb1 100644
--- a/include/codec/SkCodec.h
+++ b/include/codec/SkCodec.h
@@ -58,10 +58,12 @@
      *  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 @@
     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 a5440bd..5f8f5ba 100644
--- a/include/core/SkImageGenerator.h
+++ b/include/core/SkImageGenerator.h
@@ -65,15 +65,19 @@
     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 @@
     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 @@
     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 d557087..12341f5 100644
--- a/src/codec/SkCodec.cpp
+++ b/src/codec/SkCodec.cpp
@@ -46,7 +46,8 @@
 }
 
 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 4c69fd2..27bc141 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 @@
     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 170397d..337a964 100644
--- a/src/images/SkDecodingImageGenerator.cpp
+++ b/src/images/SkDecodingImageGenerator.cpp
@@ -38,10 +38,12 @@
 
 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 @@
         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 dc53a5d..5fc0d2a 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 b810c2b..1e42042 100644
--- a/src/lazy/SkDiscardablePixelRef.cpp
+++ b/src/lazy/SkDiscardablePixelRef.cpp
@@ -109,12 +109,12 @@
 
 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 1448d57..6938880 100644
--- a/src/ports/SkImageGenerator_skia.cpp
+++ b/src/ports/SkImageGenerator_skia.cpp
@@ -39,7 +39,7 @@
 
 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 @@
         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 @@
         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 d6edda7..ddc0994 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -163,7 +163,6 @@
 class TestImageGenerator : public SkImageGenerator {
 public:
     enum TestType {
-        kFailGetInfo_TestType,
         kFailGetPixels_TestType,
         kSucceedGetPixels_TestType,
         kLast_TestType = kSucceedGetPixels_TestType
@@ -172,22 +171,24 @@
     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 @@
 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 @@
     } 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 @@
 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(Image_NewFromGenerator, r) {
     TestImageGenerator::TestType testTypes[] = {
-        TestImageGenerator::kFailGetInfo_TestType,
         TestImageGenerator::kFailGetPixels_TestType,
         TestImageGenerator::kSucceedGetPixels_TestType,
     };
@@ -329,10 +326,6 @@
         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 9c0c683..bde0095 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 1f960ea..94867bc 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 9ce9d5f..6142af9 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -67,11 +67,8 @@
 #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 0dca16b..3b6f17e 100644
--- a/tools/LazyDecodeBitmap.cpp
+++ b/tools/LazyDecodeBitmap.cpp
@@ -22,19 +22,17 @@
 
 //  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.