Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: gm/gmmain.cpp

Issue 24811002: Update the SkDocument interface to allow for 1) abort won't emit pdf, 2) close can report success/f… (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: update comments Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
« no previous file with comments | « gm/gm_error.h ('k') | include/core/SkDocument.h » ('j') | include/core/SkDocument.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698