add SkImage::newSurface

BUG=skia:

Review URL: https://codereview.chromium.org/741763002
diff --git a/gm/surface.cpp b/gm/surface.cpp
index dbcced2..f84c5ab 100644
--- a/gm/surface.cpp
+++ b/gm/surface.cpp
@@ -105,5 +105,55 @@
 private:
     typedef GM INHERITED;
 };
-
 DEF_GM( return new SurfacePropsGM )
+
+#ifdef SK_DEBUG
+static bool equal(const SkSurfaceProps& a, const SkSurfaceProps& b) {
+    return a.flags() == b.flags() && a.pixelGeometry() == b.pixelGeometry();
+}
+#endif
+
+class NewSurfaceGM : public skiagm::GM {
+public:
+    NewSurfaceGM() {}
+
+protected:
+    SkString onShortName() SK_OVERRIDE {
+        return SkString("surfacenew");
+    }
+
+    virtual SkISize onISize() SK_OVERRIDE {
+        return SkISize::Make(300, 140);
+    }
+
+    static void drawInto(SkCanvas* canvas) {
+        canvas->drawColor(SK_ColorRED);
+    }
+
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+        SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
+
+        SkAutoTUnref<SkSurface> surf(canvas->newSurface(info, NULL));
+        if (!surf.get()) {
+            surf.reset(SkSurface::NewRaster(info));
+        }
+        drawInto(surf->getCanvas());
+
+        SkAutoTUnref<SkImage> image(surf->newImageSnapshot());
+        canvas->drawImage(image, 10, 10, NULL);
+
+        SkAutoTUnref<SkSurface> surf2(image->newSurface(info, NULL));
+        drawInto(surf2->getCanvas());
+
+        // Assert that the props were communicated transitively through the first image
+        SkASSERT(equal(surf->props(), surf2->props()));
+
+        SkAutoTUnref<SkImage> image2(surf2->newImageSnapshot());
+        canvas->drawImage(image2, 10 + SkIntToScalar(image->width()) + 10, 10, NULL);
+    }
+
+private:
+    typedef GM INHERITED;
+};
+DEF_GM( return new NewSurfaceGM )
+