diff --git a/dm/DMReplayTask.cpp b/dm/DMReplayTask.cpp
index 0d6780e..a0ecf5f 100644
--- a/dm/DMReplayTask.cpp
+++ b/dm/DMReplayTask.cpp
@@ -1,54 +1,38 @@
 #include "DMReplayTask.h"
+#include "DMWriteTask.h"
 #include "DMUtil.h"
 
+#include "SkCommandLineFlags.h"
 #include "SkPicture.h"
 
+DEFINE_bool(replay, false, "If true, run picture replay tests.");
+
 namespace DM {
 
-ReplayTask::ReplayTask(const char* suffix,
-                       const Task& parent,
+ReplayTask::ReplayTask(const Task& parent,
                        skiagm::GM* gm,
                        SkBitmap reference)
     : Task(parent)
-    , fName(underJoin(parent.name().c_str(), suffix))
+    , fName(UnderJoin(parent.name().c_str(), "replay"))
     , fGM(gm)
     , fReference(reference)
     {}
 
 void ReplayTask::draw() {
-    SkPicture picture;
-    SkCanvas* canvas = picture.beginRecording(SkScalarCeilToInt(fGM->width()),
-                                              SkScalarCeilToInt(fGM->height()),
-                                              0 /*flags*/);
-
-    canvas->concat(fGM->getInitialTransform());
-    fGM->draw(canvas);
-    canvas->flush();
-
-    picture.endRecording();
+    SkPicture recorded;
+    RecordPicture(fGM.get(), &recorded);
 
     SkBitmap bitmap;
-    bitmap.setConfig(fReference.config(),
-                     SkScalarCeilToInt(fGM->width()),
-                     SkScalarCeilToInt(fGM->height()));
-    bitmap.allocPixels();
-    bitmap.eraseColor(0x00000000);
-
-    SkCanvas replay(bitmap);
-    replay.drawPicture(picture);
-    replay.flush();
-
-    const SkAutoLockPixels mine(bitmap), theirs(fReference);
-    if (bitmap.getSize() != fReference.getSize() ||
-        0 != memcmp(bitmap.getPixels(), fReference.getPixels(), bitmap.getSize()))
-    {
+    SetupBitmap(fReference.config(), fGM.get(), &bitmap);
+    DrawPicture(&recorded, &bitmap);
+    if (!BitmapsEqual(bitmap, fReference)) {
         this->fail();
+        this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
     }
 }
 
 bool ReplayTask::shouldSkip() const {
-    return fGM->getFlags() & skiagm::GM::kGPUOnly_Flag ||
-           fGM->getFlags() & skiagm::GM::kSkipPicture_Flag;
+    return !FLAGS_replay || fGM->getFlags() & skiagm::GM::kSkipPicture_Flag;
 }
 
 }  // namespace DM
