remove unused (by clients) SkUnitMapper

BUG=skia:
R=robertphillips@google.com, scroggo@google.com, george@mozilla.com

Author: reed@google.com

Review URL: https://codereview.chromium.org/283273002

git-svn-id: http://skia.googlecode.com/svn/trunk@14761 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/animator/SkDrawGradient.cpp b/src/animator/SkDrawGradient.cpp
index c115595..70e5e44 100644
--- a/src/animator/SkDrawGradient.cpp
+++ b/src/animator/SkDrawGradient.cpp
@@ -11,49 +11,6 @@
 #include "SkAnimateMaker.h"
 #include "SkAnimatorScript.h"
 #include "SkGradientShader.h"
-#include "SkUnitMapper.h"
-
-static SkScalar SkUnitToScalar(U16CPU x) {
-    return x / 65535.0f;
-}
-
-static U16CPU SkScalarToUnit(SkScalar x) {
-    SkScalar pin =  SkScalarPin(x, 0, SK_Scalar1);
-    return (int) (pin * 65535.0f);
-}
-
-class SkDrawGradientUnitMapper : public SkUnitMapper {
-public:
-    SkDrawGradientUnitMapper(SkAnimateMaker* maker, const char* script) : fMaker(maker), fScript(script) {
-    }
-
-    SK_DECLARE_UNFLATTENABLE_OBJECT()
-
-protected:
-    virtual uint16_t mapUnit16(uint16_t x) {
-        fUnit = SkUnitToScalar(x);
-        SkScriptValue value;
-        SkAnimatorScript engine(*fMaker, NULL, SkType_Float);
-        engine.propertyCallBack(GetUnitValue, &fUnit);
-        if (engine.evaluate(fScript, &value, SkType_Float))
-            x = SkScalarToUnit(value.fOperand.fScalar);
-        return x;
-    }
-
-    static bool GetUnitValue(const char* token, size_t len, void* unitPtr, SkScriptValue* value) {
-        if (SK_LITERAL_STR_EQUAL("unit", token, len)) {
-            value->fOperand.fScalar = *(SkScalar*) unitPtr;
-            value->fType = SkType_Float;
-            return true;
-        }
-        return false;
-    }
-
-    SkAnimateMaker* fMaker;
-    const char* fScript;
-    SkScalar fUnit;
-};
-
 
 #if SK_USE_CONDENSED_INFO == 0
 
@@ -67,13 +24,12 @@
 
 DEFINE_GET_MEMBER(SkDrawGradient);
 
-SkDrawGradient::SkDrawGradient() : fUnitMapper(NULL) {
+SkDrawGradient::SkDrawGradient() {
 }
 
 SkDrawGradient::~SkDrawGradient() {
     for (int index = 0; index < fDrawColors.count(); index++)
         delete fDrawColors[index];
-    delete fUnitMapper;
 }
 
 bool SkDrawGradient::addChild(SkAnimateMaker& , SkDisplayable* child) {
@@ -138,8 +94,6 @@
             }
         }
     }
-    if (unitMapper.size() > 0)
-        fUnitMapper = new SkDrawGradientUnitMapper(&maker, unitMapper.c_str());
     INHERITED::onEndElement(maker);
 }
 
@@ -176,7 +130,7 @@
         return NULL;
     SkShader* shader = SkGradientShader::CreateLinear((SkPoint*)points.begin(),
         fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode,
-        fUnitMapper, 0, getMatrix());
+        0, getMatrix());
     SkAutoTDelete<SkShader> autoDel(shader);
     (void)autoDel.detach();
     return shader;
@@ -211,7 +165,7 @@
         return NULL;
     SkShader* shader = SkGradientShader::CreateRadial(center,
         radius, fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode,
-        fUnitMapper, 0, getMatrix());
+        0, getMatrix());
     SkAutoTDelete<SkShader> autoDel(shader);
     (void)autoDel.detach();
     return shader;
diff --git a/src/animator/SkDrawGradient.h b/src/animator/SkDrawGradient.h
index ff79e3f..fa46a9e 100644
--- a/src/animator/SkDrawGradient.h
+++ b/src/animator/SkDrawGradient.h
@@ -14,8 +14,6 @@
 #include "SkDrawShader.h"
 #include "SkIntArray.h"
 
-class SkUnitMapper;
-
 class SkDrawGradient : public SkDrawShader {
     DECLARE_PRIVATE_MEMBER_INFO(DrawGradient);
     SkDrawGradient();
@@ -30,7 +28,6 @@
     SkString unitMapper;
     SkTDColorArray fColors;
     SkTDDrawColorArray fDrawColors;
-    SkUnitMapper* fUnitMapper;
     int addPrelude();
 private:
     typedef SkDrawShader INHERITED;
diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
index b4bc875..28a8876 100644
--- a/src/core/SkReadBuffer.cpp
+++ b/src/core/SkReadBuffer.cpp
@@ -335,3 +335,25 @@
     }
     return obj;
 }
+
+/**
+ *  Needs to follow the same pattern as readFlattenable(), but explicitly skip whatever data
+ *  has been written.
+ */
+void SkReadBuffer::skipFlattenable() {
+    if (fFactoryCount > 0) {
+        if (0 == fReader.readU32()) {
+            return;
+        }
+    } else if (fFactoryTDArray) {
+        if (0 == fReader.readU32()) {
+            return;
+        }
+    } else {
+        if (NULL == this->readFunctionPtr()) {
+            return;
+        }
+    }
+    uint32_t sizeRecorded = fReader.readU32();
+    fReader.skip(sizeRecorded);
+}
diff --git a/src/core/SkValidatingReadBuffer.cpp b/src/core/SkValidatingReadBuffer.cpp
index 0112f18..96f20a2 100644
--- a/src/core/SkValidatingReadBuffer.cpp
+++ b/src/core/SkValidatingReadBuffer.cpp
@@ -273,3 +273,15 @@
     }
     return obj;
 }
+
+void SkValidatingReadBuffer::skipFlattenable() {
+    SkString name;
+    this->readString(&name);
+    if (fError) {
+        return;
+    }
+    uint32_t sizeRecorded = this->readUInt();
+    this->skip(sizeRecorded);
+}
+
+
diff --git a/src/core/SkValidatingReadBuffer.h b/src/core/SkValidatingReadBuffer.h
index d5e192e..12f5413 100644
--- a/src/core/SkValidatingReadBuffer.h
+++ b/src/core/SkValidatingReadBuffer.h
@@ -40,6 +40,7 @@
 
     // common data structures
     virtual SkFlattenable* readFlattenable(SkFlattenable::Type type) SK_OVERRIDE;
+    virtual void skipFlattenable() SK_OVERRIDE;
     virtual void readPoint(SkPoint* point) SK_OVERRIDE;
     virtual void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
     virtual void readIRect(SkIRect* rect) SK_OVERRIDE;
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index d376b22..ec0f542 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -17,8 +17,6 @@
 {
     SkASSERT(desc.fCount > 1);
 
-    fMapper = desc.fMapper;
-    SkSafeRef(fMapper);
     fGradFlags = SkToU8(desc.fGradFlags);
 
     SkASSERT((unsigned)desc.fTileMode < SkShader::kTileModeCount);
@@ -142,7 +140,10 @@
 }
 
 SkGradientShaderBase::SkGradientShaderBase(SkReadBuffer& buffer) : INHERITED(buffer) {
-    fMapper = buffer.readUnitMapper();
+    if (0 != buffer.pictureVersion() && buffer.pictureVersion() < 27) {
+        // skip the old SkUnitMapper slot
+        buffer.skipFlattenable();
+    }
 
     int colorCount = fColorCount = buffer.getArrayCount();
     if (colorCount > kColorStorageCount) {
@@ -181,7 +182,6 @@
     if (fOrigColors != fStorage) {
         sk_free(fOrigColors);
     }
-    SkSafeUnref(fMapper);
 }
 
 void SkGradientShaderBase::initCommon() {
@@ -194,7 +194,6 @@
 
 void SkGradientShaderBase::flatten(SkWriteBuffer& buffer) const {
     this->INHERITED::flatten(buffer);
-    buffer.writeFlattenable(fMapper);
     buffer.writeColorArray(fOrigColors, fColorCount);
     buffer.writeUInt(pack_mode_flags(fTileMode, fGradFlags));
     if (fColorCount > 2) {
@@ -528,20 +527,6 @@
             prevIndex = nextIndex;
         }
     }
-
-    if (cache->fShader.fMapper) {
-        cache->fCache16Storage = (uint16_t*)sk_malloc_throw(allocSize);
-        uint16_t* linear = cache->fCache16;         // just computed linear data
-        uint16_t* mapped = cache->fCache16Storage;  // storage for mapped data
-        SkUnitMapper* map = cache->fShader.fMapper;
-        for (int i = 0; i < kCache16Count; i++) {
-            int index = map->mapUnit16(bitsTo16(i, kCache16Bits)) >> kCache16Shift;
-            mapped[i] = linear[index];
-            mapped[i + kCache16Count] = linear[index + kCache16Count];
-        }
-        sk_free(cache->fCache16);
-        cache->fCache16 = cache->fCache16Storage;
-    }
 }
 
 const SkPMColor* SkGradientShaderBase::GradientShaderCache::getCache32() {
@@ -579,23 +564,6 @@
             prevIndex = nextIndex;
         }
     }
-
-    if (cache->fShader.fMapper) {
-        SkMallocPixelRef* newPR = SkMallocPixelRef::NewAllocate(info, 0, NULL);
-        SkPMColor* linear = cache->fCache32;           // just computed linear data
-        SkPMColor* mapped = (SkPMColor*)newPR->getAddr();    // storage for mapped data
-        SkUnitMapper* map = cache->fShader.fMapper;
-        for (int i = 0; i < kCache32Count; i++) {
-            int index = map->mapUnit16((i << 8) | i) >> 8;
-            mapped[i + kCache32Count*0] = linear[index + kCache32Count*0];
-            mapped[i + kCache32Count*1] = linear[index + kCache32Count*1];
-            mapped[i + kCache32Count*2] = linear[index + kCache32Count*2];
-            mapped[i + kCache32Count*3] = linear[index + kCache32Count*3];
-        }
-        cache->fCache32PixelRef->unref();
-        cache->fCache32PixelRef = newPR;
-        cache->fCache32 = (SkPMColor*)newPR->getAddr();
-    }
 }
 
 /*
@@ -627,15 +595,6 @@
     // built with 0xFF
     SkAutoTUnref<GradientShaderCache> cache(this->refCache(0xFF));
 
-    // don't have a way to put the mapper into our cache-key yet
-    if (fMapper) {
-        // force our cache32pixelref to be built
-        (void)cache->getCache32();
-        bitmap->setConfig(SkImageInfo::MakeN32Premul(kCache32Count, 1));
-        bitmap->setPixelRef(cache->getCache32PixelRef());
-        return;
-    }
-
     // build our key: [numColors + colors[] + {positions[]} + flags ]
     int count = 1 + fColorCount + 1;
     if (fColorCount > 2) {
@@ -744,8 +703,6 @@
     str->append(" ");
     str->append(gTileModeName[fTileMode]);
 
-    // TODO: add "fMapper->toString(str);" when SkUnitMapper::toString is added
-
     this->INHERITED::toString(str);
 }
 #endif
@@ -770,13 +727,11 @@
 static void desc_init(SkGradientShaderBase::Descriptor* desc,
                       const SkColor colors[],
                       const SkScalar pos[], int colorCount,
-                      SkShader::TileMode mode,
-                      SkUnitMapper* mapper, uint32_t flags) {
+                      SkShader::TileMode mode, uint32_t flags) {
     desc->fColors       = colors;
     desc->fPos          = pos;
     desc->fCount        = colorCount;
     desc->fTileMode     = mode;
-    desc->fMapper       = mapper;
     desc->fGradFlags    = flags;
 }
 
@@ -784,7 +739,6 @@
                                          const SkColor colors[],
                                          const SkScalar pos[], int colorCount,
                                          SkShader::TileMode mode,
-                                         SkUnitMapper* mapper,
                                          uint32_t flags,
                                          const SkMatrix* localMatrix) {
     if (NULL == pts || NULL == colors || colorCount < 1) {
@@ -793,7 +747,7 @@
     EXPAND_1_COLOR(colorCount);
 
     SkGradientShaderBase::Descriptor desc;
-    desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
+    desc_init(&desc, colors, pos, colorCount, mode, flags);
     return SkNEW_ARGS(SkLinearGradient, (pts, desc, localMatrix));
 }
 
@@ -801,7 +755,6 @@
                                          const SkColor colors[],
                                          const SkScalar pos[], int colorCount,
                                          SkShader::TileMode mode,
-                                         SkUnitMapper* mapper,
                                          uint32_t flags,
                                          const SkMatrix* localMatrix) {
     if (radius <= 0 || NULL == colors || colorCount < 1) {
@@ -810,7 +763,7 @@
     EXPAND_1_COLOR(colorCount);
 
     SkGradientShaderBase::Descriptor desc;
-    desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
+    desc_init(&desc, colors, pos, colorCount, mode, flags);
     return SkNEW_ARGS(SkRadialGradient, (center, radius, desc, localMatrix));
 }
 
@@ -822,7 +775,6 @@
                                                  const SkScalar pos[],
                                                  int colorCount,
                                                  SkShader::TileMode mode,
-                                                 SkUnitMapper* mapper,
                                                  uint32_t flags,
                                                  const SkMatrix* localMatrix) {
     if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) {
@@ -831,7 +783,7 @@
     EXPAND_1_COLOR(colorCount);
 
     SkGradientShaderBase::Descriptor desc;
-    desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
+    desc_init(&desc, colors, pos, colorCount, mode, flags);
     return SkNEW_ARGS(SkTwoPointRadialGradient,
                       (start, startRadius, end, endRadius, desc, localMatrix));
 }
@@ -844,7 +796,6 @@
                                                   const SkScalar pos[],
                                                   int colorCount,
                                                   SkShader::TileMode mode,
-                                                  SkUnitMapper* mapper,
                                                   uint32_t flags,
                                                   const SkMatrix* localMatrix) {
     if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) {
@@ -861,7 +812,7 @@
     SkGradientShaderBase::Descriptor desc;
 
     if (!flipGradient) {
-        desc_init(&desc, colors, pos, colorCount, mode, mapper, flags);
+        desc_init(&desc, colors, pos, colorCount, mode, flags);
         return SkNEW_ARGS(SkTwoPointConicalGradient,
                           (start, startRadius, end, endRadius, flipGradient, desc, localMatrix));
     } else {
@@ -875,9 +826,9 @@
             for (int i = 0; i < colorCount; ++i) {
                 posNew[i] = 1 - pos[colorCount - i - 1];
             }
-            desc_init(&desc, colorsNew.get(), posNew.get(), colorCount, mode, mapper, flags);
+            desc_init(&desc, colorsNew.get(), posNew.get(), colorCount, mode, flags);
         } else {
-            desc_init(&desc, colorsNew.get(), NULL, colorCount, mode, mapper, flags);
+            desc_init(&desc, colorsNew.get(), NULL, colorCount, mode, flags);
         }
 
         return SkNEW_ARGS(SkTwoPointConicalGradient,
@@ -888,7 +839,7 @@
 SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy,
                                         const SkColor colors[],
                                         const SkScalar pos[],
-                                        int colorCount, SkUnitMapper* mapper,
+                                        int colorCount,
                                         uint32_t flags,
                                         const SkMatrix* localMatrix) {
     if (NULL == colors || colorCount < 1) {
@@ -897,7 +848,7 @@
     EXPAND_1_COLOR(colorCount);
 
     SkGradientShaderBase::Descriptor desc;
-    desc_init(&desc, colors, pos, colorCount, SkShader::kClamp_TileMode, mapper, flags);
+    desc_init(&desc, colors, pos, colorCount, SkShader::kClamp_TileMode, flags);
     return SkNEW_ARGS(SkSweepGradient, (cx, cy, desc, localMatrix));
 }
 
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index a699c4c..9613537 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -14,7 +14,6 @@
 #include "SkReadBuffer.h"
 #include "SkWriteBuffer.h"
 #include "SkMallocPixelRef.h"
-#include "SkUnitMapper.h"
 #include "SkUtils.h"
 #include "SkTemplates.h"
 #include "SkBitmapCache.h"
@@ -94,7 +93,6 @@
         const SkScalar*     fPos;
         int                 fCount;
         SkShader::TileMode  fTileMode;
-        SkUnitMapper*       fMapper;
         uint32_t            fGradFlags;
     };
 
@@ -201,7 +199,6 @@
     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
     SK_TO_STRING_OVERRIDE()
 
-    SkUnitMapper* fMapper;
     SkMatrix    fPtsToUnit;     // set by subclass
     TileMode    fTileMode;
     TileProc    fTileProc;
diff --git a/src/utils/SkUnitMappers.cpp b/src/utils/SkUnitMappers.cpp
deleted file mode 100644
index 336a26e..0000000
--- a/src/utils/SkUnitMappers.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkUnitMappers.h"
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
-
-
-SkDiscreteMapper::SkDiscreteMapper(int segments) {
-    if (segments < 2) {
-        fSegments = 0;
-        fScale = 0;
-    } else {
-        if (segments > 0xFFFF) {
-            segments = 0xFFFF;
-        }
-        fSegments = segments;
-        fScale = (1 << 30) / (segments - 1);
-    }
-}
-
-uint16_t SkDiscreteMapper::mapUnit16(uint16_t input) {
-    SkFixed x = input * fSegments >> 16;
-    x = x * fScale >> 14;
-    x += x << 15 >> 31; // map 0x10000 to 0xFFFF
-    return SkToU16(x);
-}
-
-SkDiscreteMapper::SkDiscreteMapper(SkReadBuffer& rb)
-        : SkUnitMapper(rb) {
-    fSegments = rb.readInt();
-    fScale = rb.read32();
-}
-
-void SkDiscreteMapper::flatten(SkWriteBuffer& wb) const {
-    this->INHERITED::flatten(wb);
-
-    wb.writeInt(fSegments);
-    wb.write32(fScale);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-uint16_t SkCosineMapper::mapUnit16(uint16_t input)
-{
-    /*  we want to call cosine(input * pi/2) treating input as [0...1)
-        however, the straight multitply would overflow 32bits since input is
-        16bits and pi/2 is 17bits, so we shift down our pi const before we mul
-    */
-    SkFixed rads = (unsigned)(input * (SK_FixedPI >> 2)) >> 15;
-    SkFixed x = SkFixedCos(rads);
-    x += x << 15 >> 31; // map 0x10000 to 0xFFFF
-    return SkToU16(x);
-}
-
-SkCosineMapper::SkCosineMapper(SkReadBuffer& rb)
-    : SkUnitMapper(rb) {}