Revert of https://codereview.chromium.org/132643007/
Reason for revert: broken tests

TBR=
NOTREECHECKS=true
NOTRY=true
BUG=

Author: reed@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@13058 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h
index 1cb4fd7..b8117bd 100644
--- a/include/core/SkBitmap.h
+++ b/include/core/SkBitmap.h
@@ -268,16 +268,6 @@
     */
     void setPixels(void* p, SkColorTable* ctable = NULL);
 
-    /**
-     *  Install the specified pixelref into the bitmap, with an optional rect
-     *  for referencing a subset of the pixels in the pixelref. This sets the
-     *  config/width/height/alphatype of the bitmap to match the pixelref.
-     *
-     *  The subset rect, if not null, is intersected with the bounds of the
-     *  pixelref (taken from its SkImageInfo).
-     */
-    SkPixelRef* installPixelRef(SkPixelRef*, const SkIRect* subset = NULL);
-
     /** Copies the bitmap's pixels to the location pointed at by dst and returns
         true if possible, returns false otherwise.
 
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index e0bce2a..1165479 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -109,60 +109,6 @@
     SkColorType fColorType;
     SkAlphaType fAlphaType;
 
-    static SkImageInfo Make(int width, int height, SkColorType ct, SkAlphaType at) {
-        SkASSERT(width >= 0);
-        SkASSERT(height >= 0);
-        SkImageInfo info = {
-            width, height, ct, at
-        };
-        return info;
-    }
-
-    /**
-     *  Sets colortype to the native ARGB32 type.
-     */
-    static SkImageInfo MakeN32(int width, int height, SkAlphaType at) {
-        SkASSERT(width >= 0);
-        SkASSERT(height >= 0);
-        SkImageInfo info = {
-            width, height, kPMColor_SkColorType, at
-        };
-        return info;
-    }
-
-    /**
-     *  Sets colortype to the native ARGB32 type, and the alphatype to premul.
-     */
-    static SkImageInfo MakeN32Premul(int width, int height) {
-        SkASSERT(width >= 0);
-        SkASSERT(height >= 0);
-        SkImageInfo info = {
-            width, height, kPMColor_SkColorType, kPremul_SkAlphaType
-        };
-        return info;
-    }
-
-    /**
-     *  Sets colortype to the native ARGB32 type, and the alphatype to opaque.
-     */
-    static SkImageInfo MakeN32Opaque(int width, int height) {
-        SkASSERT(width >= 0);
-        SkASSERT(height >= 0);
-        SkImageInfo info = {
-            width, height, kPMColor_SkColorType, kOpaque_SkAlphaType
-        };
-        return info;
-    }
-    
-    static SkImageInfo MakeA8(int width, int height) {
-        SkASSERT(width >= 0);
-        SkASSERT(height >= 0);
-        SkImageInfo info = {
-            width, height, kAlpha_8_SkColorType, kPremul_SkAlphaType
-        };
-        return info;
-    }
-    
     bool isOpaque() const {
         return SkAlphaTypeIsOpaque(fAlphaType);
     }
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 6615b1c..f950e28 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -333,30 +333,6 @@
     return true;
 }
 
-SkPixelRef* SkBitmap::installPixelRef(SkPixelRef* pr, const SkIRect* subset) {
-    if (NULL == pr) {
-        this->reset();
-        return NULL;
-    }
-
-    const SkImageInfo& info = pr->info();
-
-    fConfig = SkColorTypeToBitmapConfig(info.fColorType);
-    fAlphaType = info.fAlphaType;
-    fBytesPerPixel = info.bytesPerPixel();
-    // not known until we're locked
-    fRowBytes = 0;
-    
-    SkIRect bounds = { 0, 0, info.fWidth, info.fHeight };
-    if (subset && !bounds.intersect(*subset)) {
-        bounds.setEmpty();
-    }
-
-    fWidth = bounds.width();
-    fHeight = bounds.height();
-    return this->setPixelRef(pr, bounds.left(), bounds.top());
-}
-
 void SkBitmap::updatePixelsFromRef() const {
     if (NULL != fPixelRef) {
         if (fPixelLockCount > 0) {
diff --git a/src/core/SkImageFilterUtils.cpp b/src/core/SkImageFilterUtils.cpp
index 076ef9b..92fe67e 100644
--- a/src/core/SkImageFilterUtils.cpp
+++ b/src/core/SkImageFilterUtils.cpp
@@ -15,8 +15,14 @@
 #include "SkGr.h"
 
 bool SkImageFilterUtils::WrapTexture(GrTexture* texture, int width, int height, SkBitmap* result) {
-    SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
-    result->installPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref();
+    SkImageInfo info = {
+        width,
+        height,
+        kPMColor_SkColorType,
+        kPremul_SkAlphaType,
+    };
+    result->setConfig(info);
+    result->setPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref();
     return true;
 }
 
diff --git a/src/core/SkScaledImageCache.cpp b/src/core/SkScaledImageCache.cpp
index 68663f0..fc3148b 100644
--- a/src/core/SkScaledImageCache.cpp
+++ b/src/core/SkScaledImageCache.cpp
@@ -293,10 +293,14 @@
         return false;
     }
 
-    SkImageInfo info = SkImageInfo::MakeN32(bitmap->width(), bitmap->height(),
-                                            bitmap->alphaType());
+    SkImageInfo info = {
+        bitmap->width(),
+        bitmap->height(),
+        kPMColor_SkColorType,
+        bitmap->alphaType()
+    };
 
-    bitmap->installPixelRef(SkNEW_ARGS(SkOneShotDiscardablePixelRef,
+    bitmap->setPixelRef(SkNEW_ARGS(SkOneShotDiscardablePixelRef,
                                    (info, dm, bitmap->rowBytes())))->unref();
     bitmap->lockPixels();
     return bitmap->readyToDraw();
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 8ed40a7..6925ad2 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -583,7 +583,8 @@
     if (fMapper) {
         // force our cahce32pixelref to be built
         (void)this->getCache32();
-        bitmap->installPixelRef(fCache32PixelRef);
+        bitmap->setConfig(SkBitmap::kARGB_8888_Config, kCache32Count, 1);
+        bitmap->setPixelRef(fCache32PixelRef);
         return;
     }
 
@@ -623,7 +624,8 @@
     if (!gCache->find(storage.get(), size, bitmap)) {
         // force our cahce32pixelref to be built
         (void)this->getCache32();
-        bitmap->installPixelRef(fCache32PixelRef);
+        bitmap->setConfig(SkBitmap::kARGB_8888_Config, kCache32Count, 1);
+        bitmap->setPixelRef(fCache32PixelRef);
 
         gCache->add(storage.get(), size, *bitmap);
     }
diff --git a/src/image/SkImagePriv.cpp b/src/image/SkImagePriv.cpp
index af15a75..43cc44b 100644
--- a/src/image/SkImagePriv.cpp
+++ b/src/image/SkImagePriv.cpp
@@ -74,7 +74,7 @@
 
     SkImage* image = NULL;
     if (canSharePixelRef || bm.isImmutable()) {
-        image = SkNewImageFromPixelRef(bm.pixelRef());
+        image = SkNewImageFromPixelRef(info, bm.pixelRef(), bm.rowBytes());
     } else {
         bm.lockPixels();
         if (bm.getPixels()) {
diff --git a/src/image/SkImagePriv.h b/src/image/SkImagePriv.h
index 2812a8f..7c19c73 100644
--- a/src/image/SkImagePriv.h
+++ b/src/image/SkImagePriv.h
@@ -18,7 +18,8 @@
 extern bool SkBitmapConfigToColorType(SkBitmap::Config, SkColorType* ctOut);
 
 // Call this if you explicitly want to use/share this pixelRef in the image
-extern SkImage* SkNewImageFromPixelRef(SkPixelRef*);
+extern SkImage* SkNewImageFromPixelRef(const SkImageInfo&, SkPixelRef*,
+                                       size_t rowBytes);
 
 /**
  *  Examines the bitmap to decide if it can share the existing pixelRef, or
diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h
index 5574f45..7bd1f7e 100644
--- a/src/image/SkImage_Base.h
+++ b/src/image/SkImage_Base.h
@@ -13,7 +13,6 @@
 class SkImage_Base : public SkImage {
 public:
     SkImage_Base(int width, int height) : INHERITED(width, height) {}
-    SkImage_Base(const SkImageInfo& info) : INHERITED(info.fWidth, info.fHeight) {}
 
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) = 0;
     virtual void onDrawRectToRect(SkCanvas*, const SkRect* src,
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index b80fbb3..32d53fc 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -58,7 +58,7 @@
     virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE;
 
     // exposed for SkSurface_Raster via SkNewImageFromPixelRef
-    SkImage_Raster(SkPixelRef*);
+    SkImage_Raster(const SkImageInfo&, SkPixelRef*, size_t rowBytes);
 
     SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); }
 
@@ -84,16 +84,18 @@
 
 SkImage_Raster::SkImage_Raster(const Info& info, SkData* data, size_t rowBytes)
         : INHERITED(info.fWidth, info.fHeight) {
+    fBitmap.setConfig(info, rowBytes);
     SkAutoTUnref<SkPixelRef> ref(
         SkMallocPixelRef::NewWithData(info, rowBytes, NULL, data, 0));
-    fBitmap.installPixelRef(ref);
+    fBitmap.setPixelRef(ref);
     fBitmap.setImmutable();
 }
 
-SkImage_Raster::SkImage_Raster(SkPixelRef* pr)
-    : INHERITED(pr->info())
+SkImage_Raster::SkImage_Raster(const Info& info, SkPixelRef* pr, size_t rowBytes)
+    : INHERITED(info.fWidth, info.fHeight)
 {
-    fBitmap.installPixelRef(pr);
+    fBitmap.setConfig(info, rowBytes);
+    fBitmap.setPixelRef(pr);
 }
 
 SkImage_Raster::~SkImage_Raster() {}
@@ -153,8 +155,9 @@
     return SkNEW_ARGS(SkImage_Raster, (info, data, rowBytes));
 }
 
-SkImage* SkNewImageFromPixelRef(SkPixelRef* pr) {
-    return SkNEW_ARGS(SkImage_Raster, (pr));
+SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr,
+                                size_t rowBytes) {
+    return SkNEW_ARGS(SkImage_Raster, (info, pr, rowBytes));
 }
 
 SkPixelRef* SkBitmapImageGetPixelRef(SkImage* image) {
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp
index 7010b5f..1b218eb 100644
--- a/src/image/SkSurface_Raster.cpp
+++ b/src/image/SkSurface_Raster.cpp
@@ -85,12 +85,15 @@
 }
 
 SkSurface_Raster::SkSurface_Raster(SkPixelRef* pr)
-    : INHERITED(pr->info())
+    : INHERITED(pr->info().fWidth, pr->info().fHeight)
 {
-    fBitmap.installPixelRef(pr);
+    const SkImageInfo& info = pr->info();
+
+    fBitmap.setConfig(info, info.minRowBytes());
+    fBitmap.setPixelRef(pr);
     fWeOwnThePixels = true;
 
-    if (!pr->info().isOpaque()) {
+    if (!info.isOpaque()) {
         fBitmap.eraseColor(SK_ColorTRANSPARENT);
     }
 }
diff --git a/src/lazy/SkCachingPixelRef.cpp b/src/lazy/SkCachingPixelRef.cpp
index f5026c7..f1510fb 100644
--- a/src/lazy/SkCachingPixelRef.cpp
+++ b/src/lazy/SkCachingPixelRef.cpp
@@ -12,13 +12,15 @@
                                 SkBitmap* dst) {
     SkImageInfo info;
     SkASSERT(dst != NULL);
-    if (!generator || !generator->getInfo(&info)) {
+    if ((NULL == generator)
+        || !(generator->getInfo(&info))
+        || !dst->setConfig(info, 0)) {
         SkDELETE(generator);
         return false;
     }
     SkAutoTUnref<SkCachingPixelRef> ref(SkNEW_ARGS(SkCachingPixelRef,
                                            (info, generator, dst->rowBytes())));
-    dst->installPixelRef(ref);
+    dst->setPixelRef(ref);
     return true;
 }
 
diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp
index eb5c2f9..abd80f2 100644
--- a/src/lazy/SkDiscardablePixelRef.cpp
+++ b/src/lazy/SkDiscardablePixelRef.cpp
@@ -94,6 +94,6 @@
     SkAutoTUnref<SkDiscardablePixelRef> ref(
         SkNEW_ARGS(SkDiscardablePixelRef,
                    (info, autoGenerator.detach(), dst->rowBytes(), factory)));
-    dst->installPixelRef(ref);
+    dst->setPixelRef(ref);
     return true;
 }
diff --git a/tests/MallocPixelRefTest.cpp b/tests/MallocPixelRefTest.cpp
index 4f14f60..e169763 100644
--- a/tests/MallocPixelRefTest.cpp
+++ b/tests/MallocPixelRefTest.cpp
@@ -23,7 +23,7 @@
  */
 DEF_TEST(MallocPixelRef, reporter) {
     REPORTER_ASSERT(reporter, true);
-    SkImageInfo info = SkImageInfo::MakeN32Premul(10, 13);
+    SkImageInfo info = {10, 13, kPMColor_SkColorType, kPremul_SkAlphaType};
     {
         SkAutoTUnref<SkMallocPixelRef> pr(
             SkMallocPixelRef::NewAllocate(info, info.minRowBytes() - 1, NULL));
diff --git a/tests/PixelRefTest.cpp b/tests/PixelRefTest.cpp
index f2df03b..e0ffd7a 100644
--- a/tests/PixelRefTest.cpp
+++ b/tests/PixelRefTest.cpp
@@ -51,7 +51,7 @@
 }  // namespace
 
 DEF_TEST(PixelRef_GenIDChange, r) {
-    SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10);
+    SkImageInfo info = { 10, 10, kPMColor_SkColorType, kPremul_SkAlphaType };
 
     SkAutoTUnref<SkPixelRef> pixelRef(SkMallocPixelRef::NewAllocate(info, 0, NULL));