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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 /* 8 /*
9 * Code for the "gm" (Golden Master) rendering comparison tool. 9 * Code for the "gm" (Golden Master) rendering comparison tool.
10 * 10 *
11 * If you make changes to this, re-run the self-tests at gm/tests/run.sh 11 * If you make changes to this, re-run the self-tests at gm/tests/run.sh
12 * to make sure they still pass... you may need to change the expected 12 * to make sure they still pass... you may need to change the expected
13 * results of the self-test. 13 * results of the self-test.
14 */ 14 */
15 15
16 #include "gm.h" 16 #include "gm.h"
17 #include "gm_error.h" 17 #include "gm_error.h"
18 #include "gm_expectations.h" 18 #include "gm_expectations.h"
19 #include "system_preferences.h" 19 #include "system_preferences.h"
20 #include "SkBitmap.h" 20 #include "SkBitmap.h"
21 #include "SkColorPriv.h" 21 #include "SkColorPriv.h"
22 #include "SkCommandLineFlags.h" 22 #include "SkCommandLineFlags.h"
23 #include "SkData.h" 23 #include "SkData.h"
24 #include "SkDeferredCanvas.h" 24 #include "SkDeferredCanvas.h"
25 #include "SkDevice.h" 25 #include "SkDevice.h"
26 #include "SkDocument.h"
26 #include "SkDrawFilter.h" 27 #include "SkDrawFilter.h"
27 #include "SkForceLinking.h" 28 #include "SkForceLinking.h"
28 #include "SkGPipe.h" 29 #include "SkGPipe.h"
29 #include "SkGraphics.h" 30 #include "SkGraphics.h"
30 #include "SkImageDecoder.h" 31 #include "SkImageDecoder.h"
31 #include "SkImageEncoder.h" 32 #include "SkImageEncoder.h"
32 #include "SkOSFile.h" 33 #include "SkOSFile.h"
33 #include "SkPDFRasterizer.h" 34 #include "SkPDFRasterizer.h"
34 #include "SkPicture.h" 35 #include "SkPicture.h"
35 #include "SkRefCnt.h" 36 #include "SkRefCnt.h"
37 #include "SkScalar.h"
36 #include "SkStream.h" 38 #include "SkStream.h"
37 #include "SkTArray.h" 39 #include "SkTArray.h"
38 #include "SkTDict.h" 40 #include "SkTDict.h"
39 #include "SkTileGridPicture.h" 41 #include "SkTileGridPicture.h"
40 #include "SamplePipeControllers.h" 42 #include "SamplePipeControllers.h"
41 43
42 #ifdef SK_DEBUG 44 #ifdef SK_DEBUG
43 static const bool kDebugOnly = true; 45 static const bool kDebugOnly = true;
44 #else 46 #else
45 static const bool kDebugOnly = false; 47 static const bool kDebugOnly = false;
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 } 610 }
609 } else { 611 } else {
610 SkCanvas canvas(*bitmap); 612 SkCanvas canvas(*bitmap);
611 installFilter(&canvas); 613 installFilter(&canvas);
612 canvas.scale(scale, scale); 614 canvas.scale(scale, scale);
613 canvas.drawPicture(*pict); 615 canvas.drawPicture(*pict);
614 complete_bitmap(bitmap); 616 complete_bitmap(bitmap);
615 } 617 }
616 } 618 }
617 619
618 static void generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { 620 static bool generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) {
619 #ifdef SK_SUPPORT_PDF 621 #ifdef SK_SUPPORT_PDF
620 SkMatrix initialTransform = gm->getInitialTransform(); 622 SkMatrix initialTransform = gm->getInitialTransform();
621 SkISize pageSize = gm->getISize(); 623 SkISize pageISize = gm->getISize();
622 SkPDFDevice* dev = NULL; 624 SkSize pageSize = SkSize::Make(SkIntToScalar(pageISize.width()),
623 if (initialTransform.isIdentity()) { 625 SkIntToScalar(pageISize.height()));
624 dev = new SkPDFDevice(pageSize, pageSize, initialTransform); 626 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
625 } else { 627 SkCanvas* canvas = NULL;
626 SkRect content = SkRect::MakeWH(SkIntToScalar(pageSize.width()), 628 canvas = pdfDoc->beginPage(pageSize);
627 SkIntToScalar(pageSize.height())); 629 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.
628 initialTransform.mapRect(&content);
629 content.intersect(0, 0, SkIntToScalar(pageSize.width()),
630 SkIntToScalar(pageSize.height()));
631 SkISize contentSize =
632 SkISize::Make(SkScalarRoundToInt(content.width()),
633 SkScalarRoundToInt(content.height()));
634 dev = new SkPDFDevice(pageSize, contentSize, initialTransform);
635 }
636 dev->setDCTEncoder(encode_to_dct_data);
637 SkAutoUnref aur(dev);
638 630
639 SkCanvas c(dev); 631 invokeGM(gm, canvas, true, false);
640 invokeGM(gm, &c, true, false);
641 632
642 SkPDFDocument doc; 633 return pdfDoc->close();
643 doc.appendPage(dev);
644 doc.emitPDF(&pdf);
645 #endif 634 #endif
646 } 635 }
647 636
648 static void generate_xps(GM* gm, SkDynamicMemoryWStream& xps) { 637 static void generate_xps(GM* gm, SkDynamicMemoryWStream& xps) {
649 #ifdef SK_SUPPORT_XPS 638 #ifdef SK_SUPPORT_XPS
650 SkISize size = gm->getISize(); 639 SkISize size = gm->getISize();
651 640
652 SkSize trimSize = SkSize::Make(SkIntToScalar(size.width()), 641 SkSize trimSize = SkSize::Make(SkIntToScalar(size.width()),
653 SkIntToScalar(size.height())); 642 SkIntToScalar(size.height()));
654 static const SkScalar inchesPerMeter = SkScalarDiv(10000, 254); 643 static const SkScalar inchesPerMeter = SkScalarDiv(10000, 254);
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 BitmapAndDigest bitmapAndDigest(*bitmap); 1016 BitmapAndDigest bitmapAndDigest(*bitmap);
1028 errors.add(compare_test_results_to_stored_expectations( 1017 errors.add(compare_test_results_to_stored_expectations(
1029 gm, gRec, gRec.fName, &bitmapAndDigest)); 1018 gm, gRec, gRec.fName, &bitmapAndDigest));
1030 1019
1031 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { 1020 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1032 path = make_bitmap_filename(writePath, gm->shortName(), gRec.fNa me, 1021 path = make_bitmap_filename(writePath, gm->shortName(), gRec.fNa me,
1033 "", bitmapAndDigest.fDigest); 1022 "", bitmapAndDigest.fDigest);
1034 errors.add(write_bitmap(path, bitmapAndDigest.fBitmap)); 1023 errors.add(write_bitmap(path, bitmapAndDigest.fBitmap));
1035 } 1024 }
1036 } else if (gRec.fBackend == kPDF_Backend) { 1025 } else if (gRec.fBackend == kPDF_Backend) {
1037 generate_pdf(gm, document); 1026 if (!generate_pdf(gm, document)) {
1027 errors.add(kRenderPdfFailed_ErrorType);
1028 } else {
1029 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStre am());
1030 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1031 path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf");
1032 errors.add(write_document(path, documentStream));
1033 }
1038 1034
1039 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream() ); 1035 if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) {
1040 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { 1036 for (int i = 0; i < pdfRasterizers.count(); i++) {
1041 path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf"); 1037 SkBitmap pdfBitmap;
1042 errors.add(write_document(path, documentStream)); 1038 SkASSERT(documentStream->rewind());
1043 } 1039 bool success = (*pdfRasterizers[i]->fRasterizerFunction) (
1040 documentStream.get(), &pdfBitmap);
1041 if (!success) {
1042 gm_fprintf(stderr, "FAILED to render PDF for %s usin g renderer %s\n",
1043 gm->shortName(),
1044 pdfRasterizers[i]->fName);
1045 continue;
1046 }
1044 1047
1045 if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) { 1048 SkString configName(gRec.fName);
1046 for (int i = 0; i < pdfRasterizers.count(); i++) { 1049 configName.append("-");
1047 SkBitmap pdfBitmap; 1050 configName.append(pdfRasterizers[i]->fName);
1048 SkASSERT(documentStream->rewind()); 1051
1049 bool success = (*pdfRasterizers[i]->fRasterizerFunction)( 1052 BitmapAndDigest bitmapAndDigest(pdfBitmap);
1050 documentStream.get(), &pdfBitmap); 1053 errors.add(compare_test_results_to_stored_expectations(
1051 if (!success) { 1054 gm, gRec, configName.c_str(), &bitmapAndDiges t));
1052 gm_fprintf(stderr, "FAILED to render PDF for %s using re nderer %s\n", 1055
1053 gm->shortName(), 1056 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1054 pdfRasterizers[i]->fName); 1057 path = make_bitmap_filename(writePath, gm->shortName (),
1055 continue; 1058 configName.c_str(),
1059 "", bitmapAndDigest.fDig est);
1060 errors.add(write_bitmap(path, bitmapAndDigest.fBitma p));
1061 }
1056 } 1062 }
1057 1063 } else {
1058 SkString configName(gRec.fName); 1064 errors.add(kIntentionallySkipped_ErrorType);
1059 configName.append("-");
1060 configName.append(pdfRasterizers[i]->fName);
1061
1062 BitmapAndDigest bitmapAndDigest(pdfBitmap);
1063 errors.add(compare_test_results_to_stored_expectations(
1064 gm, gRec, configName.c_str(), &bitmapAndDigest));
1065
1066 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1067 path = make_bitmap_filename(writePath, gm->shortName(), configName.c_str(),
1068 "", bitmapAndDigest.fDigest) ;
1069 errors.add(write_bitmap(path, bitmapAndDigest.fBitmap));
1070 }
1071 } 1065 }
1072 } else {
1073 errors.add(kIntentionallySkipped_ErrorType);
1074 } 1066 }
1075 } else if (gRec.fBackend == kXPS_Backend) { 1067 } else if (gRec.fBackend == kXPS_Backend) {
1076 generate_xps(gm, document); 1068 generate_xps(gm, document);
1077 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream() ); 1069 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream() );
1078 1070
1079 errors.add(compare_test_results_to_stored_expectations( 1071 errors.add(compare_test_results_to_stored_expectations(
1080 gm, gRec, gRec.fName, NULL)); 1072 gm, gRec, gRec.fName, NULL));
1081 1073
1082 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { 1074 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1083 path = make_filename(writePath, gm->shortName(), gRec.fName, "", "xps"); 1075 path = make_filename(writePath, gm->shortName(), gRec.fName, "", "xps");
(...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2271 if (FLAGS_forceBWtext) { 2263 if (FLAGS_forceBWtext) {
2272 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); 2264 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref();
2273 } 2265 }
2274 } 2266 }
2275 2267
2276 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 2268 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
2277 int main(int argc, char * const argv[]) { 2269 int main(int argc, char * const argv[]) {
2278 return tool_main(argc, (char**) argv); 2270 return tool_main(argc, (char**) argv);
2279 } 2271 }
2280 #endif 2272 #endif
OLDNEW
« 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