Add GrSurface::savePixels().

R=bsalomon@google.com

Author: jvanverth@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk/src@11528 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/GrSurface.cpp b/gpu/GrSurface.cpp
index 47d9959..e14987f 100644
--- a/gpu/GrSurface.cpp
+++ b/gpu/GrSurface.cpp
@@ -7,4 +7,31 @@
 
 #include "GrSurface.h"
 
+#include "SkBitmap.h"
+#include "SkImageEncoder.h"
+
 SK_DEFINE_INST_COUNT(GrSurface)
+
+bool GrSurface::savePixels(const char* filename) {
+    SkBitmap bm;
+    bm.setConfig(SkBitmap::kARGB_8888_Config, this->width(), this->height());
+    bm.allocPixels();
+
+    bool result = readPixels(0, 0, this->width(), this->height(), kSkia8888_GrPixelConfig, 
+                             bm.getPixels());
+    if (!result) {
+        SkDebugf("------ failed to read pixels for %s\n", filename);
+        return false;
+    }
+    
+    // remove any previous version of this file
+    remove(filename);
+
+    if (!SkImageEncoder::EncodeFile(filename, bm, SkImageEncoder::kPNG_Type, 100)) {
+        SkDebugf("------ failed to encode %s\n", filename);
+        remove(filename);   // remove any partial file
+        return false;
+    }
+
+    return true;
+}