diff --git a/dm/DMPDFRasterizeTask.cpp b/dm/DMPDFRasterizeTask.cpp
index 43be6e5..40b9d8b 100644
--- a/dm/DMPDFRasterizeTask.cpp
+++ b/dm/DMPDFRasterizeTask.cpp
@@ -16,18 +16,20 @@
 namespace DM {
 
 PDFRasterizeTask::PDFRasterizeTask(const Task& parent,
-                                   SkData* pdf,
+                                   SkStreamAsset* pdf,
                                    RasterizePdfProc proc)
     : CpuTask(parent)
     , fName(UnderJoin(parent.name().c_str(), "rasterize"))
-    , fPdf(SkRef(pdf))
-    , fRasterize(proc) {}
+    , fPdf(pdf)
+    , fRasterize(proc) {
+    SkASSERT(fPdf.get());
+    SkASSERT(fPdf->unique());
+}
 
 void PDFRasterizeTask::draw() {
-    SkMemoryStream pdfStream(fPdf.get());
     SkBitmap bitmap;
 
-    if (fRasterize(&pdfStream, &bitmap)) {
+    if (fRasterize(fPdf.get(), &bitmap)) {
         this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
     } else {
         this->fail();
diff --git a/dm/DMPDFRasterizeTask.h b/dm/DMPDFRasterizeTask.h
index 2cc1ef7..7231950 100644
--- a/dm/DMPDFRasterizeTask.h
+++ b/dm/DMPDFRasterizeTask.h
@@ -21,8 +21,9 @@
 
 class PDFRasterizeTask : public CpuTask {
 public:
+    // takes ownership of SkStreamAsset.
     PDFRasterizeTask(const Task& parent,
-                     SkData* pdf,
+                     SkStreamAsset* pdf,
                      RasterizePdfProc);
 
     virtual void draw() SK_OVERRIDE;
@@ -31,7 +32,7 @@
 
 private:
     const SkString fName;
-    SkAutoTUnref<SkData> fPdf;
+    SkAutoTDelete<SkStreamAsset> fPdf;
     RasterizePdfProc fRasterize;
 };
 
diff --git a/dm/DMPDFTask.cpp b/dm/DMPDFTask.cpp
index 5fee403..81fd307 100644
--- a/dm/DMPDFTask.cpp
+++ b/dm/DMPDFTask.cpp
@@ -50,11 +50,11 @@
 
     SkCanvas* canvas() { return fCanvas; }
 
-    SkData* end() {
+    SkStreamAsset* end() {
         fCanvas->flush();
         fDocument->endPage();
         fDocument->close();
-        return fWriteStream.copyToData();
+        return fWriteStream.detachAsStream();
     }
 
 private:
@@ -66,7 +66,7 @@
 }  // namespace
 
 void PDFTask::draw() {
-    SkAutoTUnref<SkData> pdfData;
+    SkAutoTDelete<SkStreamAsset> pdfData;
     bool rasterize = true;
     if (fGM.get()) {
         rasterize = 0 == (fGM->getFlags() & skiagm::GM::kSkipPDFRasterization_Flag);
@@ -83,9 +83,11 @@
 
     SkASSERT(pdfData.get());
     if (rasterize) {
-        this->spawnChild(SkNEW_ARGS(PDFRasterizeTask, (*this, pdfData.get(), fRasterize)));
+        this->spawnChild(SkNEW_ARGS(PDFRasterizeTask,
+                                    (*this, pdfData->duplicate(), fRasterize)));
     }
-    this->spawnChild(SkNEW_ARGS(WriteTask, (*this, pdfData.get(), ".pdf")));
+    this->spawnChild(SkNEW_ARGS(WriteTask,
+                                (*this, pdfData->duplicate(), ".pdf")));
 }
 
 bool PDFTask::shouldSkip() const {
diff --git a/dm/DMWriteTask.cpp b/dm/DMWriteTask.cpp
index b8ce318..5a07e46 100644
--- a/dm/DMWriteTask.cpp
+++ b/dm/DMWriteTask.cpp
@@ -41,11 +41,14 @@
     , fData(NULL)
     , fExtension(".png") {}
 
-WriteTask::WriteTask(const Task& parent, SkData *data, const char* ext)
+WriteTask::WriteTask(const Task& parent, SkStreamAsset *data, const char* ext)
     : CpuTask(parent)
     , fGmName(find_gm_name(parent, &fSuffixes))
-    , fData(SkRef(data))
-    , fExtension(ext) {}
+    , fData(data)
+    , fExtension(ext) {
+    SkASSERT(fData.get());
+    SkASSERT(fData->unique());
+}
 
 void WriteTask::makeDirOrFail(SkString dir) {
     if (!sk_mkdir(dir.c_str())) {
@@ -115,9 +118,10 @@
 };
 
 // Does not take ownership of data.
-bool save_data_to_file(const SkData* data, const char* path) {
+bool save_data_to_file(SkStreamAsset* data, const char* path) {
+    data->rewind();
     SkFILEWStream stream(path);
-    if (!stream.isValid() || !stream.write(data->data(), data->size())) {
+    if (!stream.isValid() || !stream.writeStream(data, data->getLength())) {
         SkDebugf("Can't write %s.\n", path);
         return false;
     }
@@ -142,7 +146,7 @@
     SkString path = SkOSPath::Join(dir.c_str(), fGmName.c_str());
     path.append(fExtension);
 
-    const bool ok = fData.get() ? save_data_to_file(fData,   path.c_str())
+    const bool ok = fData.get() ? save_data_to_file(fData.get(), path.c_str())
                                 : PngAndRaw::Encode(fBitmap, path.c_str());
     if (!ok) {
         this->fail();
diff --git a/dm/DMWriteTask.h b/dm/DMWriteTask.h
index c2c1d9f..15e1300 100644
--- a/dm/DMWriteTask.h
+++ b/dm/DMWriteTask.h
@@ -18,8 +18,9 @@
     WriteTask(const Task& parent,  // WriteTask must be a child task.
               SkBitmap bitmap);    // Bitmap to encode to PNG and write to disk.
 
+    // Takes ownership of SkStreamAsset
     WriteTask(const Task& parent,   // WriteTask must be a child task.
-              SkData *data,         // Pre-encoded data to write to disk.
+              SkStreamAsset* data,  // Pre-encoded data to write to disk.
               const char* ext);     // File extension.
 
     virtual void draw() SK_OVERRIDE;
@@ -40,7 +41,7 @@
     SkTArray<SkString> fSuffixes;
     const SkString fGmName;
     const SkBitmap fBitmap;
-    SkAutoTUnref<SkData> fData;
+    SkAutoTDelete<SkStreamAsset> fData;
     const char* fExtension;
 
     void makeDirOrFail(SkString dir);
