| Index: src/core/SkBitmapController.cpp | 
| diff --git a/src/core/SkBitmapController.cpp b/src/core/SkBitmapController.cpp | 
| index c75d2ea6bc825c497862c7193b7d74815b105669..5cfa5252d6fcfbc2a0b33b21bfc8d12490696207 100644 | 
| --- a/src/core/SkBitmapController.cpp | 
| +++ b/src/core/SkBitmapController.cpp | 
| @@ -7,7 +7,7 @@ | 
|  | 
| #include "SkBitmap.h" | 
| #include "SkBitmapController.h" | 
| -#include "SkImage_Base.h" | 
| +#include "SkBitmapProvider.h" | 
| #include "SkMatrix.h" | 
| #include "SkPixelRef.h" | 
| #include "SkTemplates.h" | 
| @@ -17,76 +17,6 @@ | 
|  | 
| /////////////////////////////////////////////////////////////////////////////////////////////////// | 
|  | 
| -int SkBitmapProvider::width() const { | 
| -    return fImage ? fImage->width() : fBitmap.width(); | 
| -} | 
| - | 
| -int SkBitmapProvider::height() const { | 
| -    return fImage ? fImage->height() : fBitmap.height(); | 
| -} | 
| - | 
| -uint32_t SkBitmapProvider::getID() const { | 
| -    return fImage ? fImage->uniqueID() : fBitmap.getGenerationID(); | 
| -} | 
| - | 
| -bool SkBitmapProvider::validForDrawing() const { | 
| -    if (!fImage) { | 
| -        if (0 == fBitmap.width() || 0 == fBitmap.height()) { | 
| -            return false; | 
| -        } | 
| -        if (nullptr == fBitmap.pixelRef()) { | 
| -            return false;   // no pixels to read | 
| -        } | 
| -        if (fBitmap.getTexture()) { | 
| -            // we can handle texture (ugh) since lockPixels will perform a read-back | 
| -            return true; | 
| -        } | 
| -        if (kIndex_8_SkColorType == fBitmap.colorType()) { | 
| -            SkAutoLockPixels alp(fBitmap); // but we need to call it before getColorTable() is safe. | 
| -            if (!fBitmap.getColorTable()) { | 
| -                return false; | 
| -            } | 
| -        } | 
| -    } | 
| -    return true; | 
| -} | 
| - | 
| -SkImageInfo SkBitmapProvider::info() const { | 
| -    if (fImage) { | 
| -        SkAlphaType at = fImage->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaType; | 
| -        return SkImageInfo::MakeN32(fImage->width(), fImage->height(), at); | 
| -    } else { | 
| -        return fBitmap.info(); | 
| -    } | 
| -} | 
| - | 
| -SkBitmapCacheDesc SkBitmapProvider::makeCacheDesc(int w, int h) const { | 
| -    return fImage ? SkBitmapCacheDesc::Make(fImage, w, h) : SkBitmapCacheDesc::Make(fBitmap, w, h); | 
| -} | 
| - | 
| -SkBitmapCacheDesc SkBitmapProvider::makeCacheDesc() const { | 
| -    return fImage ? SkBitmapCacheDesc::Make(fImage) : SkBitmapCacheDesc::Make(fBitmap); | 
| -} | 
| - | 
| -void SkBitmapProvider::notifyAddedToCache() const { | 
| -    if (fImage) { | 
| -        // TODO | 
| -    } else { | 
| -        fBitmap.pixelRef()->notifyAddedToCache(); | 
| -    } | 
| -} | 
| - | 
| -bool SkBitmapProvider::asBitmap(SkBitmap* bm) const { | 
| -    if (fImage) { | 
| -        return as_IB(fImage)->getROPixels(bm); | 
| -    } else { | 
| -        *bm = fBitmap; | 
| -        return true; | 
| -    } | 
| -} | 
| - | 
| -/////////////////////////////////////////////////////////////////////////////////////////////////// | 
| - | 
| SkBitmapController::State* SkBitmapController::requestBitmap(const SkBitmapProvider& provider, | 
| const SkMatrix& inv, | 
| SkFilterQuality quality, | 
|  |