Rename SkCodec::kNone to SkCodec::kNoFrame

Add a SK_LEGACY_SKCODEC_NONE_ENUM #define'able to ease transition.

Also rename another internal "kNone" enum in SkWebpCodec.cpp.

The "kNone" name is overloaded:
- include/core/SkImageGenerator.h defines its own kNone.
- include/encode/SkPngEncoder.h defines its own kNone.
- include/private/GrTypesPriv.h defines multiple kNone's.

Bug: skia:
Change-Id: I18c03a74f2f1b0237016e0eef53dcd4478b82609
Reviewed-on: https://skia-review.googlesource.com/146020
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 93877c1..57827e0 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -501,18 +501,18 @@
 
             // Used to cache a frame that future frames will depend on.
             SkAutoMalloc priorFramePixels;
-            int cachedFrame = SkCodec::kNone;
+            int cachedFrame = SkCodec::kNoFrame;
             for (int i = 0; static_cast<size_t>(i) < frameInfos.size(); i++) {
                 options.fFrameIndex = i;
                 // Check for a prior frame
                 const int reqFrame = frameInfos[i].fRequiredFrame;
-                if (reqFrame != SkCodec::kNone && reqFrame == cachedFrame
+                if (reqFrame != SkCodec::kNoFrame && reqFrame == cachedFrame
                         && priorFramePixels.get()) {
                     // Copy into pixels
                     memcpy(pixels.get(), priorFramePixels.get(), safeSize);
                     options.fPriorFrame = reqFrame;
                 } else {
-                    options.fPriorFrame = SkCodec::kNone;
+                    options.fPriorFrame = SkCodec::kNoFrame;
                 }
                 SkCodec::Result result = codec->getPixels(decodeInfo, pixels.get(),
                                                           rowBytes, &options);
diff --git a/gm/animatedGif.cpp b/gm/animatedGif.cpp
index 8b92e94..6e9789e 100644
--- a/gm/animatedGif.cpp
+++ b/gm/animatedGif.cpp
@@ -54,7 +54,7 @@
             SkCodec::Options opts;
             opts.fFrameIndex = frameIndex;
             const int requiredFrame = fFrameInfos[frameIndex].fRequiredFrame;
-            if (requiredFrame != SkCodec::kNone) {
+            if (requiredFrame != SkCodec::kNoFrame) {
                 SkASSERT(requiredFrame >= 0
                          && static_cast<size_t>(requiredFrame) < fFrames.size());
                 SkBitmap& requiredBitmap = fFrames[requiredFrame];
diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h
index 986544a..ecb762e 100644
--- a/include/codec/SkCodec.h
+++ b/include/codec/SkCodec.h
@@ -252,7 +252,7 @@
             : fZeroInitialized(kNo_ZeroInitialized)
             , fSubset(nullptr)
             , fFrameIndex(0)
-            , fPriorFrame(kNone)
+            , fPriorFrame(kNoFrame)
         {}
 
         ZeroInitialized            fZeroInitialized;
@@ -283,7 +283,7 @@
         int                        fFrameIndex;
 
         /**
-         *  If not kNone, the dst already contains the prior frame at this index.
+         *  If not kNoFrame, the dst already contains the prior frame at this index.
          *
          *  Only meaningful for multi-frame images.
          *
@@ -293,7 +293,7 @@
          *  indicate that that frame is already in the dst. Options.fZeroInitialized
          *  is ignored in this case.
          *
-         *  If set to kNone, the codec will decode any necessary required frame(s) first.
+         *  If set to kNoFrame, the codec will decode any necessary required frame(s) first.
          */
         int                        fPriorFrame;
     };
@@ -571,9 +571,17 @@
         return this->onGetFrameCount();
     }
 
-    // The required frame for an independent frame is marked as
-    // kNone.
-    static constexpr int kNone = -1;
+    // Sentinel value used when a frame index implies "no frame":
+    // - FrameInfo::fRequiredFrame set to this value means the frame
+    //   is independent.
+    // - Options::fPriorFrame set to this value means no (relevant) prior frame
+    //   is residing in dst's memory.
+    static constexpr int kNoFrame = -1;
+
+    // This transitional definition was added in August 2018, and will eventually be removed.
+#ifdef SK_LEGACY_SKCODEC_NONE_ENUM
+    static constexpr int kNone = kNoFrame;
+#endif
 
     /**
      *  Information about individual frames in a multi-framed image.
@@ -581,7 +589,7 @@
     struct FrameInfo {
         /**
          *  The frame that this frame needs to be blended with, or
-         *  kNone if this frame is independent.
+         *  kNoFrame if this frame is independent.
          *
          *  Note that this is the *earliest* frame that can be used
          *  for blending. Any frame from [fRequiredFrame, i) can be
diff --git a/src/android/SkAnimatedImage.cpp b/src/android/SkAnimatedImage.cpp
index 6bbea6b..d03040c 100644
--- a/src/android/SkAnimatedImage.cpp
+++ b/src/android/SkAnimatedImage.cpp
@@ -96,7 +96,7 @@
 }
 
 SkAnimatedImage::Frame::Frame()
-    : fIndex(SkCodec::kNone)
+    : fIndex(SkCodec::kNoFrame)
 {}
 
 bool SkAnimatedImage::Frame::init(const SkImageInfo& info, OnInit onInit) {
@@ -140,7 +140,7 @@
     fFinished = false;
     fRepetitionsCompleted = 0;
     if (fDisplayFrame.fIndex != 0) {
-        fDisplayFrame.fIndex = SkCodec::kNone;
+        fDisplayFrame.fIndex = SkCodec::kNoFrame;
         this->decodeNextFrame();
     }
 }
@@ -193,7 +193,7 @@
         animationEnded = true;
         if (0 == frameToDecode) {
             // Static image. This is okay.
-            frameInfo.fRequiredFrame = SkCodec::kNone;
+            frameInfo.fRequiredFrame = SkCodec::kNoFrame;
             frameInfo.fAlphaType = fCodec->getInfo().alphaType();
             frameInfo.fDisposalMethod = SkCodecAnimation::DisposalMethod::kKeep;
             // These fields won't be read.
@@ -233,12 +233,12 @@
     // entire dependency chain.
     SkCodec::Options options;
     options.fFrameIndex = frameToDecode;
-    if (frameInfo.fRequiredFrame == SkCodec::kNone) {
+    if (frameInfo.fRequiredFrame == SkCodec::kNoFrame) {
         if (is_restore_previous(frameInfo.fDisposalMethod)) {
             // frameToDecode will be discarded immediately after drawing, so
             // do not overwrite a frame which could possibly be used in the
             // future.
-            if (fDecodingFrame.fIndex != SkCodec::kNone &&
+            if (fDecodingFrame.fIndex != SkCodec::kNoFrame &&
                     !is_restore_previous(fDecodingFrame.fDisposalMethod)) {
                 using std::swap;
                 swap(fDecodingFrame, fRestoreFrame);
@@ -246,7 +246,8 @@
         }
     } else {
         auto validPriorFrame = [&frameInfo, &frameToDecode](const Frame& frame) {
-            if (SkCodec::kNone == frame.fIndex || is_restore_previous(frame.fDisposalMethod)) {
+            if (SkCodec::kNoFrame == frame.fIndex ||
+                    is_restore_previous(frame.fDisposalMethod)) {
                 return false;
             }
 
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp
index 8bfaae8..5564e89 100644
--- a/src/codec/SkCodec.cpp
+++ b/src/codec/SkCodec.cpp
@@ -280,8 +280,8 @@
     }
 
     const int requiredFrame = frame->getRequiredFrame();
-    if (requiredFrame != kNone) {
-        if (options.fPriorFrame != kNone) {
+    if (requiredFrame != kNoFrame) {
+        if (options.fPriorFrame != kNoFrame) {
             // Check for a valid frame as a starting point. Alternatively, we could
             // treat an invalid frame as not providing one, but rejecting it will
             // make it easier to catch the mistake.
@@ -728,7 +728,7 @@
 }
 
 static bool independent(const SkFrame& frame) {
-    return frame.getRequiredFrame() == SkCodec::kNone;
+    return frame.getRequiredFrame() == SkCodec::kNoFrame;
 }
 
 static bool restore_bg(const SkFrame& frame) {
@@ -743,7 +743,7 @@
     const int i = frame->frameId();
     if (0 == i) {
         frame->setHasAlpha(reportsAlpha || frameRect != screenRect);
-        frame->setRequiredFrame(SkCodec::kNone);
+        frame->setRequiredFrame(SkCodec::kNoFrame);
         return;
     }
 
@@ -751,7 +751,7 @@
     const bool blendWithPrevFrame = frame->getBlend() == SkCodecAnimation::Blend::kPriorFrame;
     if ((!reportsAlpha || !blendWithPrevFrame) && frameRect == screenRect) {
         frame->setHasAlpha(reportsAlpha);
-        frame->setRequiredFrame(SkCodec::kNone);
+        frame->setRequiredFrame(SkCodec::kNoFrame);
         return;
     }
 
@@ -760,7 +760,7 @@
         const int prevId = prevFrame->frameId();
         if (0 == prevId) {
             frame->setHasAlpha(true);
-            frame->setRequiredFrame(SkCodec::kNone);
+            frame->setRequiredFrame(SkCodec::kNoFrame);
             return;
         }
 
@@ -773,7 +773,7 @@
     if (clearPrevFrame) {
         if (prevFrameRect == screenRect || independent(*prevFrame)) {
             frame->setHasAlpha(true);
-            frame->setRequiredFrame(SkCodec::kNone);
+            frame->setRequiredFrame(SkCodec::kNoFrame);
             return;
         }
     }
@@ -790,8 +790,8 @@
 
     while (frameRect.contains(prevFrameRect)) {
         const int prevRequiredFrame = prevFrame->getRequiredFrame();
-        if (prevRequiredFrame == SkCodec::kNone) {
-            frame->setRequiredFrame(SkCodec::kNone);
+        if (prevRequiredFrame == SkCodec::kNoFrame) {
+            frame->setRequiredFrame(SkCodec::kNoFrame);
             frame->setHasAlpha(true);
             return;
         }
@@ -803,7 +803,7 @@
     if (restore_bg(*prevFrame)) {
         frame->setHasAlpha(true);
         if (prevFrameRect == screenRect || independent(*prevFrame)) {
-            frame->setRequiredFrame(SkCodec::kNone);
+            frame->setRequiredFrame(SkCodec::kNoFrame);
         } else {
             // Note: As above, frame could still be independent, e.g. if
             // prevFrame covers its required frame and that frame is
diff --git a/src/codec/SkGifCodec.cpp b/src/codec/SkGifCodec.cpp
index 036ee0b..3ac5ed3 100644
--- a/src/codec/SkGifCodec.cpp
+++ b/src/codec/SkGifCodec.cpp
@@ -343,7 +343,7 @@
         // (or it is already filled for us), so we report rowsDecoded to be the full
         // height.
         bool filledBackground = false;
-        if (frameContext->getRequiredFrame() == kNone) {
+        if (frameContext->getRequiredFrame() == kNoFrame) {
             // We may need to clear to transparent for one of the following reasons:
             // - The frameRect does not cover the full bounds. haveDecodedRow will
             //   only draw inside the frameRect, so we need to clear the rest.
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp
index 0d12dad..a9c0c32 100644
--- a/src/codec/SkWebpCodec.cpp
+++ b/src/codec/SkWebpCodec.cpp
@@ -435,7 +435,7 @@
     SkAssertResult(WebPDemuxGetFrame(fDemux, index + 1, &frame));
 
     const bool independent = index == 0 ? true :
-            (fFrameHolder.frame(index)->getRequiredFrame() == kNone);
+            (fFrameHolder.frame(index)->getRequiredFrame() == kNoFrame);
     // Get the frameRect.  libwebp will have already signaled an error if this is not fully
     // contained by the canvas.
     auto frameRect = SkIRect::MakeXYWH(frame.x_offset, frame.y_offset, frame.width, frame.height);
@@ -545,7 +545,7 @@
 
     // Choose the step when we will perform premultiplication.
     enum {
-        kNone,
+        kNoPremul,
         kBlendLine,
         kColorXform,
         kLibwebp,
@@ -553,7 +553,7 @@
     auto choose_premul_step = [&]() {
         if (!frame.has_alpha) {
             // None necessary.
-            return kNone;
+            return kNoPremul;
         }
         if (blendWithPrevFrame) {
             // Premultiply in blend_line, in a linear space.
@@ -562,7 +562,7 @@
         if (dstInfo.alphaType() != kPremul_SkAlphaType) {
             // No blending is necessary, so we only need to premultiply if the
             // client requested it.
-            return kNone;
+            return kNoPremul;
         }
         if (this->colorXform()) {
             // Premultiply in the colorXform, in a linear space.
diff --git a/tests/AnimatedImageTest.cpp b/tests/AnimatedImageTest.cpp
index 6532b58..fd1438a 100644
--- a/tests/AnimatedImageTest.cpp
+++ b/tests/AnimatedImageTest.cpp
@@ -213,14 +213,14 @@
             SkCodec::Options options;
             options.fFrameIndex = (int) i;
             options.fPriorFrame = frameInfos[i].fRequiredFrame;
-            if (options.fPriorFrame == SkCodec::kNone) {
+            if (options.fPriorFrame == SkCodec::kNoFrame) {
                 bm.allocPixels(info);
                 bm.eraseColor(0);
             } else {
                 const SkBitmap& priorFrame = frames[options.fPriorFrame];
                 if (!sk_tool_utils::copy_to(&bm, priorFrame.colorType(), priorFrame)) {
                     ERRORF(r, "Failed to copy %s frame %i", file, options.fPriorFrame);
-                    options.fPriorFrame = SkCodec::kNone;
+                    options.fPriorFrame = SkCodec::kNoFrame;
                 }
                 REPORTER_ASSERT(r, bm.setAlphaType(frameInfos[i].fAlphaType));
             }
diff --git a/tests/CodecAnimTest.cpp b/tests/CodecAnimTest.cpp
index 4e069c1..6944d25 100644
--- a/tests/CodecAnimTest.cpp
+++ b/tests/CodecAnimTest.cpp
@@ -48,7 +48,7 @@
 
     SkCodec::Options options;
     options.fFrameIndex = 1;
-    options.fPriorFrame = SkCodec::kNone;
+    options.fPriorFrame = SkCodec::kNoFrame;
 
     const auto result = codec->getPixels(info, bm.getPixels(), bm.rowBytes(),
                                          &options);
@@ -60,11 +60,16 @@
 }
 
 DEF_TEST(Codec_frames, r) {
-    #define kOpaque         kOpaque_SkAlphaType
-    #define kUnpremul       kUnpremul_SkAlphaType
-    #define kKeep           SkCodecAnimation::DisposalMethod::kKeep
-    #define kRestoreBG      SkCodecAnimation::DisposalMethod::kRestoreBGColor
-    #define kRestorePrev    SkCodecAnimation::DisposalMethod::kRestorePrevious
+    constexpr int kNoFrame = SkCodec::kNoFrame;
+    constexpr SkAlphaType kOpaque = kOpaque_SkAlphaType;
+    constexpr SkAlphaType kUnpremul = kUnpremul_SkAlphaType;
+    constexpr SkCodecAnimation::DisposalMethod kKeep =
+            SkCodecAnimation::DisposalMethod::kKeep;
+    constexpr SkCodecAnimation::DisposalMethod kRestoreBG =
+            SkCodecAnimation::DisposalMethod::kRestoreBGColor;
+    constexpr SkCodecAnimation::DisposalMethod kRestorePrev =
+            SkCodecAnimation::DisposalMethod::kRestorePrevious;
+
     static const struct {
         const char*                                   fName;
         int                                           fFrameCount;
@@ -86,8 +91,7 @@
             0,
             { kKeep, kRestoreBG, kKeep, kKeep, kKeep, kRestoreBG, kKeep } },
         { "images/alphabetAnim.gif", 13,
-            { SkCodec::kNone, 0, 0, 0, 0, 5, 6, SkCodec::kNone,
-              SkCodec::kNone, 9, 10, 11 },
+            { kNoFrame, 0, 0, 0, 0, 5, 6, kNoFrame, kNoFrame, 9, 10, 11 },
             { kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul,
               kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul },
             { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 },
@@ -139,23 +143,18 @@
         { "images/webp-animated.webp", 3, { 0, 1 }, { kOpaque, kOpaque },
             { 1000, 500, 1000 }, SkCodec::kRepetitionCountInfinite,
             { kKeep, kKeep, kKeep } },
-        { "images/blendBG.webp", 7, { 0, SkCodec::kNone, SkCodec::kNone, SkCodec::kNone,
-                               4, 4 },
+        { "images/blendBG.webp", 7,
+            { 0, kNoFrame, kNoFrame, kNoFrame, 4, 4 },
             { kOpaque, kOpaque, kUnpremul, kOpaque, kUnpremul, kUnpremul },
             { 525, 500, 525, 437, 609, 729, 444 }, 7,
             { kKeep, kKeep, kKeep, kKeep, kKeep, kKeep, kKeep } },
         { "images/required.webp", 7,
-            { 0, 1, 1, SkCodec::kNone, 4, 4 },
+            { 0, 1, 1, kNoFrame, 4, 4 },
             { kOpaque, kUnpremul, kUnpremul, kOpaque, kOpaque, kOpaque },
             { 100, 100, 100, 100, 100, 100, 100 },
             1,
             { kKeep, kRestoreBG, kKeep, kKeep, kKeep, kRestoreBG, kKeep } },
     };
-    #undef kOpaque
-    #undef kUnpremul
-    #undef kKeep
-    #undef kRestorePrev
-    #undef kRestoreBG
 
     for (const auto& rec : gRecs) {
         sk_sp<SkData> data(GetResourceAsData(rec.fName));
@@ -281,7 +280,7 @@
                 }
 
                 if (0 == i) {
-                    REPORTER_ASSERT(r, frameInfo.fRequiredFrame == SkCodec::kNone);
+                    REPORTER_ASSERT(r, frameInfo.fRequiredFrame == SkCodec::kNoFrame);
                 } else if (rec.fRequiredFrames[i-1] != frameInfo.fRequiredFrame) {
                     ERRORF(r, "%s's frame %i has wrong dependency! expected: %i\tactual: %i",
                            rec.fName, i, rec.fRequiredFrames[i-1], frameInfo.fRequiredFrame);
@@ -311,7 +310,7 @@
                     decodeInfo = info.makeAlphaType(frameInfos[index].fAlphaType);
                 }
                 bm->allocPixels(decodeInfo);
-                if (cachedIndex != SkCodec::kNone) {
+                if (cachedIndex != SkCodec::kNoFrame) {
                     // First copy the pixels from the cached frame
                     const bool success = sk_tool_utils::copy_to(bm, kN32_SkColorType,
                             cachedFrames[cachedIndex]);
@@ -322,7 +321,8 @@
                 opts.fPriorFrame = cachedIndex;
                 const auto result = codec->getPixels(decodeInfo, bm->getPixels(), bm->rowBytes(),
                                                      &opts);
-                if (cachedIndex != SkCodec::kNone && restore_previous(frameInfos[cachedIndex])) {
+                if (cachedIndex != SkCodec::kNoFrame &&
+                        restore_previous(frameInfos[cachedIndex])) {
                     if (result == SkCodec::kInvalidParameters) {
                         return true;
                     }
@@ -338,11 +338,11 @@
 
             for (int i = 0; i < frameCount; i++) {
                 SkBitmap& cachedFrame = cachedFrames[i];
-                if (!decode(&cachedFrame, i, SkCodec::kNone)) {
+                if (!decode(&cachedFrame, i, SkCodec::kNoFrame)) {
                     continue;
                 }
                 const auto reqFrame = frameInfos[i].fRequiredFrame;
-                if (reqFrame == SkCodec::kNone) {
+                if (reqFrame == SkCodec::kNoFrame) {
                     // Nothing to compare against.
                     continue;
                 }
@@ -430,7 +430,7 @@
             SkBitmap bm2;
             bm2.allocPixels(info);
 
-            options.fPriorFrame = SkCodec::kNone;
+            options.fPriorFrame = SkCodec::kNoFrame;
             result = codec->codec()->getPixels(info, bm2.getPixels(), bm2.rowBytes(),
                                                &options);
             REPORTER_ASSERT(r, result == SkCodec::kSuccess);
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp
index 742436d..9bbadc6 100644
--- a/tests/CodecTest.cpp
+++ b/tests/CodecTest.cpp
@@ -1443,7 +1443,7 @@
     for (int i = 0; static_cast<size_t>(i) < frameInfos.size(); i++) {
         opts.fFrameIndex = i;
         const auto reqFrame = frameInfos[i].fRequiredFrame;
-        opts.fPriorFrame = reqFrame == i - 1 ? reqFrame : SkCodec::kNone;
+        opts.fPriorFrame = reqFrame == i - 1 ? reqFrame : SkCodec::kNoFrame;
         auto result = codec->startIncrementalDecode(info, bm.getPixels(), bm.rowBytes(), &opts);
         if (result != SkCodec::kSuccess) {
             ERRORF(r, "Failed to start decoding frame %i (out of %i) with error %i\n", i,
diff --git a/third_party/gif/SkGifImageReader.cpp b/third_party/gif/SkGifImageReader.cpp
index c62b788..0cb77ba 100644
--- a/third_party/gif/SkGifImageReader.cpp
+++ b/third_party/gif/SkGifImageReader.cpp
@@ -157,7 +157,8 @@
         return;
 
     // CALLBACK: Let the client know we have decoded a row.
-    const bool writeTransparentPixels = (SkCodec::kNone == m_frameContext->getRequiredFrame());
+    const bool writeTransparentPixels =
+            SkCodec::kNoFrame == m_frameContext->getRequiredFrame();
     m_client->haveDecodedRow(m_frameContext->frameId(), rowBegin,
             drowStart, drowEnd - drowStart + 1, writeTransparentPixels);