Simplify SkBitmapProvider
authorFlorin Malita <fmalita@chromium.org>
Thu, 10 Nov 2016 16:10:30 +0000 (11:10 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Thu, 10 Nov 2016 17:05:07 +0000 (17:05 +0000)
We're no longer using SkBitmap sources for SkBitmapProvider, so we can
restrict it to SkImage only.

At this point we could also remove it, but I think it'll come in handy
when we add shader subset support.

BUG=skia:5806
R=reed@google.com

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4655

Change-Id: I298da253cc8f7c1205b543521e62060a202a9f78
Reviewed-on: https://skia-review.googlesource.com/4655
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>

src/core/SkBitmapController.cpp
src/core/SkBitmapProcState.cpp
src/core/SkBitmapProcState.h
src/core/SkBitmapProvider.cpp
src/core/SkBitmapProvider.h

index 435940b..4fee11d 100644 (file)
@@ -21,10 +21,6 @@ SkBitmapController::State* SkBitmapController::requestBitmap(const SkBitmapProvi
                                                              const SkMatrix& inv,
                                                              SkFilterQuality quality,
                                                              void* storage, size_t storageSize) {
-    if (!provider.validForDrawing()) {
-        return nullptr;
-    }
-
     State* state = this->onRequestBitmap(provider, inv, quality, storage, storageSize);
     if (state) {
         if (nullptr == state->fPixmap.addr()) {
index 7b88ab6..33ab736 100644 (file)
@@ -46,16 +46,6 @@ SkBitmapProcInfo::SkBitmapProcInfo(const SkBitmapProvider& provider,
     , fBMState(nullptr)
 {}
 
-SkBitmapProcInfo::SkBitmapProcInfo(const SkBitmap& bm,
-                                   SkShader::TileMode tmx, SkShader::TileMode tmy,
-                                   SkDestinationSurfaceColorMode colorMode)
-    : fProvider(SkBitmapProvider(bm))
-    , fTileModeX(tmx)
-    , fTileModeY(tmy)
-    ,fColorMode(colorMode)
-    , fBMState(nullptr)
-{}
-
 SkBitmapProcInfo::~SkBitmapProcInfo() {
     SkInPlaceDeleteCheck(fBMState, fBMStateStorage.get());
 }
index 1818406..6b4317e 100644 (file)
@@ -30,8 +30,6 @@ class SkPaint;
 struct SkBitmapProcInfo {
     SkBitmapProcInfo(const SkBitmapProvider&, SkShader::TileMode tmx, SkShader::TileMode tmy,
                      SkDestinationSurfaceColorMode);
-    SkBitmapProcInfo(const SkBitmap&, SkShader::TileMode tmx, SkShader::TileMode tmy,
-                     SkDestinationSurfaceColorMode);
     ~SkBitmapProcInfo();
 
     const SkBitmapProvider        fProvider;
@@ -61,9 +59,6 @@ struct SkBitmapProcState : public SkBitmapProcInfo {
     SkBitmapProcState(const SkBitmapProvider& prov, SkShader::TileMode tmx, SkShader::TileMode tmy,
                       SkDestinationSurfaceColorMode colorMode)
         : SkBitmapProcInfo(prov, tmx, tmy, colorMode) {}
-    SkBitmapProcState(const SkBitmap& bitmap, SkShader::TileMode tmx, SkShader::TileMode tmy,
-                      SkDestinationSurfaceColorMode colorMode)
-        : SkBitmapProcInfo(bitmap, tmx, tmy, colorMode) {}
 
     bool setup(const SkMatrix& inv, const SkPaint& paint) {
         return this->init(inv, paint) && this->chooseProcs();
index 37f8dc9..8347d32 100644 (file)
 #include "SkPixelRef.h"
 
 int SkBitmapProvider::width() const {
-    return fImage ? fImage->width() : fBitmap.width();
+    return fImage->width();
 }
 
 int SkBitmapProvider::height() const {
-    return fImage ? fImage->height() : fBitmap.height();
+    return fImage->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 (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;
+    return fImage->uniqueID();
 }
 
 SkImageInfo SkBitmapProvider::info() const {
-    if (fImage) {
-        return as_IB(fImage)->onImageInfo();
-    } else {
-        return fBitmap.info();
-    }
+    return as_IB(fImage)->onImageInfo();
 }
 
 bool SkBitmapProvider::isVolatile() const {
-    if (fImage) {
-        // add flag to images?
-        const SkBitmap* bm = as_IB(fImage)->onPeekBitmap();
-        return bm ? bm->isVolatile() : false;
-    } else {
-        return fBitmap.isVolatile();
-    }
+    // add flag to images?
+    const SkBitmap* bm = as_IB(fImage)->onPeekBitmap();
+    return bm ? bm->isVolatile() : false;
 }
 
 SkBitmapCacheDesc SkBitmapProvider::makeCacheDesc(int w, int h) const {
-    return fImage ? SkBitmapCacheDesc::Make(fImage, w, h) : SkBitmapCacheDesc::Make(fBitmap, w, h);
+    return SkBitmapCacheDesc::Make(fImage, w, h);
 }
 
 SkBitmapCacheDesc SkBitmapProvider::makeCacheDesc() const {
-    return fImage ? SkBitmapCacheDesc::Make(fImage) : SkBitmapCacheDesc::Make(fBitmap);
+    return SkBitmapCacheDesc::Make(fImage);
 }
 
 void SkBitmapProvider::notifyAddedToCache() const {
-    if (fImage) {
-        as_IB(fImage)->notifyAddedToCache();
-    } else {
-        fBitmap.pixelRef()->notifyAddedToCache();
-    }
+    as_IB(fImage)->notifyAddedToCache();
 }
 
 bool SkBitmapProvider::asBitmap(SkBitmap* bm) const {
-    if (fImage) {
-        return as_IB(fImage)->getROPixels(bm, SkImage::kAllow_CachingHint);
-    } else {
-        *bm = fBitmap;
-        return true;
-    }
+    return as_IB(fImage)->getROPixels(bm, SkImage::kAllow_CachingHint);
 }
index 2080104..2e878b1 100644 (file)
@@ -8,24 +8,20 @@
 #ifndef SkBitmapProvider_DEFINED
 #define SkBitmapProvider_DEFINED
 
-#include "SkBitmap.h"
 #include "SkImage.h"
 #include "SkBitmapCache.h"
 
 class SkBitmapProvider {
 public:
-    explicit SkBitmapProvider(const SkBitmap& bm) : fBitmap(bm) {}
-    explicit SkBitmapProvider(const SkImage* img) : fImage(img) {}
+    explicit SkBitmapProvider(const SkImage* img) : fImage(img) { SkASSERT(img); }
     SkBitmapProvider(const SkBitmapProvider& other)
-        : fBitmap(other.fBitmap)
-        , fImage(other.fImage)
+        : fImage(other.fImage)
     {}
 
     int width() const;
     int height() const;
     uint32_t getID() const;
 
-    bool validForDrawing() const;
     SkImageInfo info() const;
     bool isVolatile() const;
 
@@ -42,7 +38,6 @@ private:
     void* operator new(size_t) = delete;
     void* operator new(size_t, void*) = delete;
 
-    SkBitmap       fBitmap;
     // SkBitmapProvider is always short-lived/stack allocated, and the source image is guaranteed
     // to outlive its scope => we can store a raw ptr to avoid ref churn.
     const SkImage* fImage;