| Index: gm/gmmain.cpp
|
| diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
|
| index a06138a0054f6d7a15a795b9de455a622a419ab8..b545aa729557ece33a1de56a7eba528b6e7d012c 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,34 +617,26 @@ 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();
|
| + SkAutoTUnref<SkDocument> pdfDoc(SkDocument::CreatePDF(&pdf, NULL, encode_to_dct_data));
|
|
|
| - SkCanvas c(dev);
|
| - invokeGM(gm, &c, true, false);
|
| + if (!pdfDoc.get()) {
|
| + return false;
|
| + }
|
|
|
| - SkPDFDocument doc;
|
| - doc.appendPage(dev);
|
| - doc.emitPDF(&pdf);
|
| -#endif
|
| + SkCanvas* canvas = NULL;
|
| + canvas = pdfDoc->beginPage(SkIntToScalar(pageISize.width()),
|
| + SkIntToScalar(pageISize.height()));
|
| + canvas->concat(initialTransform);
|
| +
|
| + invokeGM(gm, canvas, true, false);
|
| +
|
| + return pdfDoc->close();
|
| +#endif // SK_SUPPORT_PDF
|
| + return true; // Do not report failure if pdf is not supported.
|
| }
|
|
|
| static void generate_xps(GM* gm, SkDynamicMemoryWStream& xps) {
|
| @@ -1034,43 +1028,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(kGeneratePdfFailed_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);
|
|
|