diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 5c9dcab..17ed8e4 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -181,12 +181,13 @@
 
 static const struct {
 	SkBitmap::Config	fConfig;
-	bool				fUsePicture;
+	bool				fUseGPU;
 	const char*			fName;
 } gRec[] = {
 	{ SkBitmap::kARGB_8888_Config,	false,	"8888" },
 	{ SkBitmap::kARGB_4444_Config,	false,	"4444" },
 	{ SkBitmap::kRGB_565_Config,	false,	"565" },
+	{ SkBitmap::kARGB_8888_Config,  true,	"gpu" },
 };
 
 int main (int argc, char * const argv[]) {
@@ -242,12 +243,14 @@
 			bitmap.eraseColor(0);
 			SkCanvas canvas(bitmap);
 
-			gm->draw(&canvas);
-            {
+            if (gRec[i].fUseGPU) {
                 SkGpuCanvas gc(context);
                 gc.setDevice(gc.createDevice(bitmap.config(), bitmap.width(), bitmap.height(),
                                              bitmap.isOpaque(), false))->unref(); 
                 gm->draw(&gc);
+                gc.readPixels(&bitmap); // overwrite our previous allocation
+            } else {
+                gm->draw(&canvas);
             }
             SkString name = make_name(gm->shortName(), gRec[i].fName);
 
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index ad5706b..25b2743 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -111,6 +111,20 @@
      */
     SkDevice* setBitmapDevice(const SkBitmap& bitmap, bool forLayer = false);
 
+    /**
+     *  Copy the pixels from the device into bitmap. Returns true on success.
+     *  If false is returned, then the bitmap parameter is left unchanged.
+     */
+    bool readPixels(const SkIRect& srcRect, SkBitmap* bitmap);
+    bool readPixels(SkBitmap* bitmap);
+
+    /**
+     *  Similar to draw sprite, this method will copy the pixels in bitmap onto
+     *  the device, with the top/left corner specified by (x, y). The pixel
+     *  values in the device are completely replaced: there is no blending.
+     */
+    void writePixels(const SkBitmap& bitmap, int x, int y);
+    
     ///////////////////////////////////////////////////////////////////////////
 
     enum SaveFlags {
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 764e063..0761641 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -549,6 +549,31 @@
     return device;
 }
 
+bool SkCanvas::readPixels(const SkIRect& srcRect, SkBitmap* bitmap) {
+    SkDevice* device = this->getDevice();
+    if (!device) {
+        return false;
+    }
+    return device->readPixels(srcRect, bitmap);
+}
+
+bool SkCanvas::readPixels(SkBitmap* bitmap) {
+    SkDevice* device = this->getDevice();
+    if (!device) {
+        return false;
+    }
+    SkIRect bounds;
+    bounds.set(0, 0, device->width(), device->height());
+    return this->readPixels(bounds, bitmap);
+}
+
+void SkCanvas::writePixels(const SkBitmap& bitmap, int x, int y) {
+    SkDevice* device = this->getDevice();
+    if (device) {
+        device->writePixels(bitmap, x, y);
+    }
+}
+
 //////////////////////////////////////////////////////////////////////////////
 
 bool SkCanvas::getViewport(SkIPoint* size) const {
