Chromium Code Reviews| 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 { |