Index: dm/DMPDFTask.cpp |
diff --git a/dm/DMPDFTask.cpp b/dm/DMPDFTask.cpp |
index 5fee403a5b9b5247fc18a58059c80848f1266c11..48919ba40b09545267ab53a3708acecaa21b33e8 100644 |
--- a/dm/DMPDFTask.cpp |
+++ b/dm/DMPDFTask.cpp |
@@ -50,11 +50,11 @@ public: |
SkCanvas* canvas() { return fCanvas; } |
- SkData* end() { |
+ SkStreamAsset* end() { |
fCanvas->flush(); |
fDocument->endPage(); |
fDocument->close(); |
- return fWriteStream.copyToData(); |
mtklein
2014/08/25 21:44:34
Is this the copy we're avoiding?
hal.canary
2014/08/26 15:20:50
Yes. copyToData() is O(N) while detachAsStream()
|
+ return fWriteStream.detachAsStream(); |
} |
private: |
@@ -66,7 +66,7 @@ private: |
} // namespace |
void PDFTask::draw() { |
- SkAutoTUnref<SkData> pdfData; |
+ SkAutoTUnref<SkStreamAsset> pdfData; |
bool rasterize = true; |
if (fGM.get()) { |
rasterize = 0 == (fGM->getFlags() & skiagm::GM::kSkipPDFRasterization_Flag); |
@@ -83,9 +83,10 @@ void PDFTask::draw() { |
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.detach(), ".pdf"))); |
mtklein
2014/08/25 21:44:33
What's the cost of duplicate()? It's weird one ki
hal.canary
2014/08/26 15:20:51
The duplicate is cheap. It's only a SkNEW SkBlock
mtklein
2014/08/26 15:30:54
Just to make it a little more consistent and resil
|
} |
bool PDFTask::shouldSkip() const { |