new image from backend desc

BUG=485243

Review URL: https://codereview.chromium.org/1121813002
diff --git a/src/image/SkImage_Gpu.h b/src/image/SkImage_Gpu.h
index 7b38e60..972cd3c 100644
--- a/src/image/SkImage_Gpu.h
+++ b/src/image/SkImage_Gpu.h
@@ -19,32 +19,38 @@
 public:
     SK_DECLARE_INST_COUNT(SkImage_Gpu)
 
-    SkImage_Gpu(const SkBitmap&, int sampleCountForNewSurfaces, SkSurface::Budgeted);
-
-    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override;
-    GrTexture* onGetTexture() const override;
-    bool getROPixels(SkBitmap*) const override;
-
-    GrTexture* getTexture() const { return fBitmap.getTexture(); }
-
-    SkShader* onNewShader(SkShader::TileMode,
-                                  SkShader::TileMode,
-                                  const SkMatrix* localMatrix) const override;
-
-    bool isOpaque() const override;
+    /**
+     *  An "image" can be a subset/window into a larger texture, so we explicit take the
+     *  width and height.
+     */
+    SkImage_Gpu(int w, int h, SkAlphaType, GrTexture*, int sampleCountForNewSurfaces,
+                SkSurface::Budgeted);
 
     void applyBudgetDecision() const {
+        GrTexture* tex = this->getTexture();
+        SkASSERT(tex);
         if (fBudgeted) {
-            fBitmap.getTexture()->resourcePriv().makeBudgeted();
+            tex->resourcePriv().makeBudgeted();
         } else {
-            fBitmap.getTexture()->resourcePriv().makeUnbudgeted();
+            tex->resourcePriv().makeUnbudgeted();
         }
     }
 
+    bool getROPixels(SkBitmap*) const override;
+    GrTexture* onGetTexture() const override { return fTexture; }
+    SkShader* onNewShader(SkShader::TileMode,
+                          SkShader::TileMode,
+                          const SkMatrix* localMatrix) const override;
+    bool isOpaque() const override;
+    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override;
+    bool onReadPixels(const SkImageInfo&, void* dstPixels, size_t dstRowBytes,
+                      int srcX, int srcY) const override;
+
 private:
-    SkBitmap            fBitmap;
-    const int           fSampleCountForNewSurfaces;   // 0 if we don't know
-    SkSurface::Budgeted fBudgeted;
+    SkAutoTUnref<GrTexture> fTexture;
+    const int               fSampleCountForNewSurfaces;   // 0 if we don't know
+    const SkAlphaType       fAlphaType;
+    SkSurface::Budgeted     fBudgeted;
 
     typedef SkImage_Base INHERITED;
 };