Chromium Code Reviews| Index: gm/gmmain.cpp |
| diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp |
| index defd691b52f83259468e80281e25ad625a813c8a..7e7b3a20140e5ae886b7e9a454112276b05bb817 100644 |
| --- a/gm/gmmain.cpp |
| +++ b/gm/gmmain.cpp |
| @@ -23,6 +23,7 @@ |
| #include "SkData.h" |
| #include "SkDeferredCanvas.h" |
| #include "SkDevice.h" |
| +#include "SkDocument.h" |
| #include "SkDrawFilter.h" |
| #include "SkForceLinking.h" |
| #include "SkGPipe.h" |
| @@ -33,6 +34,7 @@ |
| #include "SkPDFRasterizer.h" |
| #include "SkPicture.h" |
| #include "SkRefCnt.h" |
| +#include "SkScalar.h" |
| #include "SkStream.h" |
| #include "SkTArray.h" |
| #include "SkTDict.h" |
| @@ -615,33 +617,20 @@ public: |
| } |
| } |
| - static void generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { |
| + static bool generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { |
| #ifdef SK_SUPPORT_PDF |
| SkMatrix initialTransform = gm->getInitialTransform(); |
| - SkISize pageSize = gm->getISize(); |
| - SkPDFDevice* dev = NULL; |
| - if (initialTransform.isIdentity()) { |
| - dev = new SkPDFDevice(pageSize, pageSize, initialTransform); |
| - } else { |
| - SkRect content = SkRect::MakeWH(SkIntToScalar(pageSize.width()), |
| - SkIntToScalar(pageSize.height())); |
| - initialTransform.mapRect(&content); |
| - content.intersect(0, 0, SkIntToScalar(pageSize.width()), |
| - SkIntToScalar(pageSize.height())); |
| - SkISize contentSize = |
| - SkISize::Make(SkScalarRoundToInt(content.width()), |
| - SkScalarRoundToInt(content.height())); |
| - dev = new SkPDFDevice(pageSize, contentSize, initialTransform); |
| - } |
| - dev->setDCTEncoder(encode_to_dct_data); |
| - SkAutoUnref aur(dev); |
| + SkISize pageISize = gm->getISize(); |
| + SkSize pageSize = SkSize::Make(SkIntToScalar(pageISize.width()), |
| + SkIntToScalar(pageISize.height())); |
| + SkAutoTUnref<SkDocument> pdfDoc(SkDocument::CreatePDF(&pdf, NULL, encode_to_dct_data)); |
|
reed1
2013/10/07 13:24:54
Can we move the SUPPORT_PDF check to inside Create
edisonn
2013/10/07 19:29:06
not really. Sk_SUPPORT_PDF is defined for dependen
|
| + SkCanvas* canvas = NULL; |
| + canvas = pdfDoc->beginPage(pageSize); |
| + canvas->setMatrix(initialTransform); |
|
reed1
2013/10/07 13:24:54
can this be concat instead of setMatrix? The latte
edisonn
2013/10/07 19:29:06
Done.
|
| - SkCanvas c(dev); |
| - invokeGM(gm, &c, true, false); |
| + invokeGM(gm, canvas, true, false); |
| - SkPDFDocument doc; |
| - doc.appendPage(dev); |
| - doc.emitPDF(&pdf); |
| + return pdfDoc->close(); |
| #endif |
| } |
| @@ -1034,43 +1023,46 @@ public: |
| errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); |
| } |
| } else if (gRec.fBackend == kPDF_Backend) { |
| - generate_pdf(gm, document); |
| - |
| - SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream()); |
| - if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
| - path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf"); |
| - errors.add(write_document(path, documentStream)); |
| - } |
| - |
| - if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) { |
| - for (int i = 0; i < pdfRasterizers.count(); i++) { |
| - SkBitmap pdfBitmap; |
| - SkASSERT(documentStream->rewind()); |
| - bool success = (*pdfRasterizers[i]->fRasterizerFunction)( |
| - documentStream.get(), &pdfBitmap); |
| - if (!success) { |
| - gm_fprintf(stderr, "FAILED to render PDF for %s using renderer %s\n", |
| - gm->shortName(), |
| - pdfRasterizers[i]->fName); |
| - continue; |
| - } |
| - |
| - SkString configName(gRec.fName); |
| - configName.append("-"); |
| - configName.append(pdfRasterizers[i]->fName); |
| - |
| - BitmapAndDigest bitmapAndDigest(pdfBitmap); |
| - errors.add(compare_test_results_to_stored_expectations( |
| - gm, gRec, configName.c_str(), &bitmapAndDigest)); |
| + if (!generate_pdf(gm, document)) { |
| + errors.add(kRenderPdfFailed_ErrorType); |
| + } else { |
| + SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream()); |
| + if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
| + path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf"); |
| + errors.add(write_document(path, documentStream)); |
| + } |
| - if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
| - path = make_bitmap_filename(writePath, gm->shortName(), configName.c_str(), |
| - "", bitmapAndDigest.fDigest); |
| - errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); |
| + if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) { |
| + for (int i = 0; i < pdfRasterizers.count(); i++) { |
| + SkBitmap pdfBitmap; |
| + SkASSERT(documentStream->rewind()); |
| + bool success = (*pdfRasterizers[i]->fRasterizerFunction)( |
| + documentStream.get(), &pdfBitmap); |
| + if (!success) { |
| + gm_fprintf(stderr, "FAILED to render PDF for %s using renderer %s\n", |
| + gm->shortName(), |
| + pdfRasterizers[i]->fName); |
| + continue; |
| + } |
| + |
| + SkString configName(gRec.fName); |
| + configName.append("-"); |
| + configName.append(pdfRasterizers[i]->fName); |
| + |
| + BitmapAndDigest bitmapAndDigest(pdfBitmap); |
| + errors.add(compare_test_results_to_stored_expectations( |
| + gm, gRec, configName.c_str(), &bitmapAndDigest)); |
| + |
| + if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
| + path = make_bitmap_filename(writePath, gm->shortName(), |
| + configName.c_str(), |
| + "", bitmapAndDigest.fDigest); |
| + errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); |
| + } |
| } |
| + } else { |
| + errors.add(kIntentionallySkipped_ErrorType); |
| } |
| - } else { |
| - errors.add(kIntentionallySkipped_ErrorType); |
| } |
| } else if (gRec.fBackend == kXPS_Backend) { |
| generate_xps(gm, document); |