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

Side by Side Diff: gm/gmmain.cpp

Issue 811863002: Alter GM's --mpd option to write out images (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 *
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 SkString filename = make_shortname_plus_config(shortName, configName); 240 SkString filename = make_shortname_plus_config(shortName, configName);
241 filename.append(renderModeDescriptor); 241 filename.append(renderModeDescriptor);
242 filename.appendUnichar('.'); 242 filename.appendUnichar('.');
243 filename.append(suffix); 243 filename.append(suffix);
244 return SkOSPath::Join(path, filename.c_str()); 244 return SkOSPath::Join(path, filename.c_str());
245 } 245 }
246 246
247 /** 247 /**
248 * Assemble filename suitable for writing out an SkBitmap. 248 * Assemble filename suitable for writing out an SkBitmap.
249 */ 249 */
250 SkString make_bitmap_filename(const char *path, 250 SkString makeBitmapFilename(const char *path,
251 const char *shortName, 251 const char *shortName,
252 const char *configName, 252 const char *configName,
253 const char *renderModeDescriptor, 253 const char *renderModeDescriptor,
254 const GmResultDigest &bitmapDigest) { 254 const GmResultDigest &bitmapDigest) {
255 if (fWriteChecksumBasedFilenames) { 255 if (fWriteChecksumBasedFilenames) {
256 SkString filename; 256 SkString filename;
257 filename.append(bitmapDigest.getHashType()); 257 filename.append(bitmapDigest.getHashType());
258 filename.appendUnichar('_'); 258 filename.appendUnichar('_');
259 filename.append(shortName); 259 filename.append(shortName);
260 filename.appendUnichar('_'); 260 filename.appendUnichar('_');
261 filename.append(bitmapDigest.getDigestValue()); 261 filename.append(bitmapDigest.getDigestValue());
262 filename.appendUnichar('.'); 262 filename.appendUnichar('.');
263 filename.append(kPNG_FileExtension); 263 filename.append(kPNG_FileExtension);
264 return SkOSPath::Join(path, filename.c_str()); 264 return SkOSPath::Join(path, filename.c_str());
(...skipping 24 matching lines...) Expand all
289 289
290 static void force_all_opaque_8888(const SkBitmap& bitmap) { 290 static void force_all_opaque_8888(const SkBitmap& bitmap) {
291 SkAutoLockPixels lock(bitmap); 291 SkAutoLockPixels lock(bitmap);
292 for (int y = 0; y < bitmap.height(); y++) { 292 for (int y = 0; y < bitmap.height(); y++) {
293 for (int x = 0; x < bitmap.width(); x++) { 293 for (int x = 0; x < bitmap.width(); x++) {
294 *bitmap.getAddr32(x, y) |= (SK_A32_MASK << SK_A32_SHIFT); 294 *bitmap.getAddr32(x, y) |= (SK_A32_MASK << SK_A32_SHIFT);
295 } 295 }
296 } 296 }
297 } 297 }
298 298
299 static ErrorCombination write_bitmap(const SkString& path, const SkBitmap& b itmap) { 299 static ErrorCombination WriteBitmap(const SkString& path, const SkBitmap& bi tmap) {
300 // TODO(epoger): Now that we have removed force_all_opaque() 300 // TODO(epoger): Now that we have removed force_all_opaque()
301 // from this method, we should be able to get rid of the 301 // from this method, we should be able to get rid of the
302 // transformation to 8888 format also. 302 // transformation to 8888 format also.
303 SkBitmap copy; 303 SkBitmap copy;
304 bitmap.copyTo(&copy, kN32_SkColorType); 304 bitmap.copyTo(&copy, kN32_SkColorType);
305 if (!SkImageEncoder::EncodeFile(path.c_str(), copy, 305 if (!SkImageEncoder::EncodeFile(path.c_str(), copy,
306 SkImageEncoder::kPNG_Type, 306 SkImageEncoder::kPNG_Type,
307 100)) { 307 100)) {
308 SkDebugf("FAILED to write bitmap: %s\n", path.c_str()); 308 SkDebugf("FAILED to write bitmap: %s\n", path.c_str());
309 return ErrorCombination(kWritingReferenceImage_ErrorType); 309 return ErrorCombination(kWritingReferenceImage_ErrorType);
(...skipping 18 matching lines...) Expand all
328 if (modeAsString.startsWith("-")) { 328 if (modeAsString.startsWith("-")) {
329 modeAsString.remove(0, 1); 329 modeAsString.remove(0, 1);
330 } 330 }
331 modes.push_back(modeAsString); 331 modes.push_back(modeAsString);
332 } 332 }
333 } 333 }
334 334
335 /** 335 /**
336 * Returns true if failures on this test should be ignored. 336 * Returns true if failures on this test should be ignored.
337 */ 337 */
338 bool ShouldIgnoreTest(const char *name) const { 338 bool shouldIgnoreTest(const char *name) const {
339 for (int i = 0; i < fIgnorableTestNames.count(); i++) { 339 for (int i = 0; i < fIgnorableTestNames.count(); i++) {
340 if (fIgnorableTestNames[i].equals(name)) { 340 if (fIgnorableTestNames[i].equals(name)) {
341 return true; 341 return true;
342 } 342 }
343 } 343 }
344 return false; 344 return false;
345 } 345 }
346 346
347 /** 347 /**
348 * Calls RecordTestResults to record that we skipped a test. 348 * Calls RecordTestResults to record that we skipped a test.
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 completeNameString.append("."); 836 completeNameString.append(".");
837 completeNameString.append(kPNG_FileExtension); 837 completeNameString.append(kPNG_FileExtension);
838 const char* completeName = completeNameString.c_str(); 838 const char* completeName = completeNameString.c_str();
839 839
840 if (expectations.empty()) { 840 if (expectations.empty()) {
841 errors.add(kMissingExpectations_ErrorType); 841 errors.add(kMissingExpectations_ErrorType);
842 842
843 // Write out the "actuals" for any tests without expectations, if we have 843 // Write out the "actuals" for any tests without expectations, if we have
844 // been directed to do so. 844 // been directed to do so.
845 if (fMissingExpectationsPath) { 845 if (fMissingExpectationsPath) {
846 SkString path = make_bitmap_filename(fMissingExpectationsPath, s hortName, 846 SkString path = this->makeBitmapFilename(fMissingExpectationsPat h, shortName,
847 configName, renderModeDescr iptor, 847 configName, renderModeD escriptor,
848 actualBitmapAndDigest.fDige st); 848 actualBitmapAndDigest.f Digest);
849 write_bitmap(path, actualBitmapAndDigest.fBitmap); 849 WriteBitmap(path, actualBitmapAndDigest.fBitmap);
850 } 850 }
851 851
852 } else if (!expectations.match(actualBitmapAndDigest.fDigest)) { 852 } else if (!expectations.match(actualBitmapAndDigest.fDigest)) {
853 addToJsonSummary = true; 853 addToJsonSummary = true;
854 // The error mode we record depends on whether this was running 854 // The error mode we record depends on whether this was running
855 // in a non-standard renderMode. 855 // in a non-standard renderMode.
856 if ('\0' == *renderModeDescriptor) { 856 if ('\0' == *renderModeDescriptor) {
857 errors.add(kExpectationsMismatch_ErrorType); 857 errors.add(kExpectationsMismatch_ErrorType);
858 } else { 858 } else {
859 errors.add(kRenderModeMismatch_ErrorType); 859 errors.add(kRenderModeMismatch_ErrorType);
860 } 860 }
861 861
862 // Write out the "actuals" for any mismatches, if we have 862 // Write out the "actuals" for any mismatches, if we have
863 // been directed to do so. 863 // been directed to do so.
864 if (fMismatchPath) { 864 if (fMismatchPath) {
865 SkString path = make_bitmap_filename(fMismatchPath, shortName, c onfigName, 865 SkString path = this->makeBitmapFilename(fMismatchPath, shortNam e, configName,
866 renderModeDescriptor, 866 renderModeDescriptor,
867 actualBitmapAndDigest.fDige st); 867 actualBitmapAndDigest.f Digest);
868 write_bitmap(path, actualBitmapAndDigest.fBitmap); 868 WriteBitmap(path, actualBitmapAndDigest.fBitmap);
869 } 869 }
870 870
871 // If we have access to a single expected bitmap, log more 871 // If we have access to a single expected bitmap, log more
872 // detail about the mismatch. 872 // detail about the mismatch.
873 const SkBitmap *expectedBitmapPtr = expectations.asBitmap(); 873 const SkBitmap *expectedBitmapPtr = expectations.asBitmap();
874 if (expectedBitmapPtr) { 874 if (expectedBitmapPtr) {
875 report_bitmap_diffs(*expectedBitmapPtr, actualBitmapAndDigest.fB itmap, 875 report_bitmap_diffs(*expectedBitmapPtr, actualBitmapAndDigest.fB itmap,
876 completeName); 876 completeName);
877 } 877 }
878 } 878 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 937
938 /** 938 /**
939 * Compare actualBitmap to expectations stored in this->fExpectationsSource. 939 * Compare actualBitmap to expectations stored in this->fExpectationsSource.
940 * 940 *
941 * @param gm which test generated the actualBitmap 941 * @param gm which test generated the actualBitmap
942 * @param gRec 942 * @param gRec
943 * @param configName The config name to look for in the expectation file. 943 * @param configName The config name to look for in the expectation file.
944 * @param actualBitmapAndDigest ptr to bitmap generated by this run, or NULL 944 * @param actualBitmapAndDigest ptr to bitmap generated by this run, or NULL
945 * if we don't have a usable bitmap representation 945 * if we don't have a usable bitmap representation
946 */ 946 */
947 ErrorCombination compare_test_results_to_stored_expectations( 947 ErrorCombination compareTestResultsToStoredExpectations(
948 GM* gm, const ConfigData& gRec, const char* configName, 948 GM* gm, const ConfigData& gRec, const char* configName,
949 const BitmapAndDigest* actualBitmapAndDigest) { 949 const BitmapAndDigest* actualBitmapAndDigest) {
950 ErrorCombination errors; 950 ErrorCombination errors;
951 951
952 if (NULL == actualBitmapAndDigest) { 952 if (NULL == actualBitmapAndDigest) {
953 // Note that we intentionally skipped validating the results for 953 // Note that we intentionally skipped validating the results for
954 // this test, because we don't know how to generate an SkBitmap 954 // this test, because we don't know how to generate an SkBitmap
955 // version of the output. 955 // version of the output.
956 errors.add(ErrorCombination(kIntentionallySkipped_ErrorType)); 956 errors.add(ErrorCombination(kIntentionallySkipped_ErrorType));
957 } else if (!(gRec.fFlags & kWrite_ConfigFlag)) { 957 } else if (!(gRec.fFlags & kWrite_ConfigFlag)) {
(...skipping 17 matching lines...) Expand all
975 * 975 *
976 * TODO(epoger): This relies on the fact that 976 * TODO(epoger): This relies on the fact that
977 * force_all_opaque() was called on the bitmap before it 977 * force_all_opaque() was called on the bitmap before it
978 * was written to disk as a PNG in the first place. If 978 * was written to disk as a PNG in the first place. If
979 * not, the hash digest returned here may not match the 979 * not, the hash digest returned here may not match the
980 * hash digest of actualBitmap, which *has* been run through 980 * hash digest of actualBitmap, which *has* been run through
981 * force_all_opaque(). 981 * force_all_opaque().
982 * See comments above complete_bitmap() for more detail. 982 * See comments above complete_bitmap() for more detail.
983 */ 983 */
984 Expectations expectations = expectationsSource->get(nameWithExte nsion.c_str()); 984 Expectations expectations = expectationsSource->get(nameWithExte nsion.c_str());
985 if (this->ShouldIgnoreTest(gm->getName())) { 985 if (this->shouldIgnoreTest(gm->getName())) {
986 expectations.setIgnoreFailure(true); 986 expectations.setIgnoreFailure(true);
987 } 987 }
988 errors.add(compare_to_expectations(expectations, *actualBitmapAn dDigest, 988 errors.add(compare_to_expectations(expectations, *actualBitmapAn dDigest,
989 gm->getName(), configName, "" , true)); 989 gm->getName(), configName, "" , true));
990 } else { 990 } else {
991 // If we are running without expectations, we still want to 991 // If we are running without expectations, we still want to
992 // record the actual results. 992 // record the actual results.
993 add_actual_results_to_json_summary(nameWithExtension.c_str(), 993 add_actual_results_to_json_summary(nameWithExtension.c_str(),
994 actualBitmapAndDigest->fDiges t, 994 actualBitmapAndDigest->fDiges t,
995 ErrorCombination(kMissingExpe ctations_ErrorType), 995 ErrorCombination(kMissingExpe ctations_ErrorType),
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 // Test: draw into a bitmap or pdf. 1065 // Test: draw into a bitmap or pdf.
1066 // Depending on flags, possibly compare to an expected image. 1066 // Depending on flags, possibly compare to an expected image.
1067 // If writePath is not NULL, also write images (or documents) to the specifi ed path. 1067 // If writePath is not NULL, also write images (or documents) to the specifi ed path.
1068 ErrorCombination test_drawing(GM* gm, const ConfigData& gRec, 1068 ErrorCombination test_drawing(GM* gm, const ConfigData& gRec,
1069 const SkTDArray<const PDFRasterizerData*> &pdf Rasterizers, 1069 const SkTDArray<const PDFRasterizerData*> &pdf Rasterizers,
1070 const char writePath [], 1070 const char writePath [],
1071 GrSurface* gpuTarget, 1071 GrSurface* gpuTarget,
1072 SkBitmap* bitmap) { 1072 SkBitmap* bitmap) {
1073 ErrorCombination errors; 1073 ErrorCombination errors;
1074 SkDynamicMemoryWStream document; 1074 SkDynamicMemoryWStream document;
1075 SkString path;
1076 1075
1077 if (gRec.fBackend == kRaster_Backend || 1076 if (gRec.fBackend == kRaster_Backend ||
1078 gRec.fBackend == kGPU_Backend) { 1077 gRec.fBackend == kGPU_Backend) {
1079 // Early exit if we can't generate the image. 1078 // Early exit if we can't generate the image.
1080 errors.add(generate_image(gm, gRec, gpuTarget, bitmap, false)); 1079 errors.add(generate_image(gm, gRec, gpuTarget, bitmap, false));
1081 if (!errors.isEmpty()) { 1080 if (!errors.isEmpty()) {
1082 // TODO: Add a test to exercise what the stdout and 1081 // TODO: Add a test to exercise what the stdout and
1083 // JSON look like if we get an "early error" while 1082 // JSON look like if we get an "early error" while
1084 // trying to generate the image. 1083 // trying to generate the image.
1085 return errors; 1084 return errors;
1086 } 1085 }
1087 BitmapAndDigest bitmapAndDigest(*bitmap);
1088 errors.add(compare_test_results_to_stored_expectations(
1089 gm, gRec, gRec.fName, &bitmapAndDigest));
1090 1086
1091 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { 1087 errors.add(this->writeBitmap(gm, gRec, gRec.fName, writePath, *bitma p));
1092 path = make_bitmap_filename(writePath, gm->getName(), gRec.fName ,
1093 "", bitmapAndDigest.fDigest);
1094 errors.add(write_bitmap(path, bitmapAndDigest.fBitmap));
1095 }
1096 } else if (gRec.fBackend == kPDF_Backend) { 1088 } else if (gRec.fBackend == kPDF_Backend) {
1097 if (!generate_pdf(gm, document)) { 1089 if (!generate_pdf(gm, document)) {
1098 errors.add(kGeneratePdfFailed_ErrorType); 1090 errors.add(kGeneratePdfFailed_ErrorType);
1099 } else { 1091 } else {
1100 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStre am()); 1092 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStre am());
1101 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { 1093 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1102 path = make_filename(writePath, gm->getName(), gRec.fName, " ", "pdf"); 1094 SkString path = make_filename(writePath, gm->getName(), gRec .fName, "", "pdf");
1103 errors.add(write_document(path, documentStream)); 1095 errors.add(write_document(path, documentStream));
1104 } 1096 }
1105 1097
1106 if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) { 1098 if (!(gm->getFlags() & GM::kSkipPDFRasterization_Flag)) {
1107 for (int i = 0; i < pdfRasterizers.count(); i++) { 1099 for (int i = 0; i < pdfRasterizers.count(); i++) {
1108 SkBitmap pdfBitmap; 1100 SkBitmap pdfBitmap;
1109 documentStream->rewind(); 1101 documentStream->rewind();
1110 bool success = (*pdfRasterizers[i]->fRasterizerFunction) ( 1102 bool success = (*pdfRasterizers[i]->fRasterizerFunction) (
1111 documentStream.get(), &pdfBitmap); 1103 documentStream.get(), &pdfBitmap);
1112 if (!success) { 1104 if (!success) {
1113 SkDebugf("FAILED to render PDF for %s using renderer %s\n", 1105 SkDebugf("FAILED to render PDF for %s using renderer %s\n",
1114 gm->getName(), 1106 gm->getName(),
1115 pdfRasterizers[i]->fName); 1107 pdfRasterizers[i]->fName);
1116 continue; 1108 continue;
1117 } 1109 }
1118 1110
1119 SkString configName(gRec.fName); 1111 SkString configName(gRec.fName);
1120 configName.append("-"); 1112 configName.append("-");
1121 configName.append(pdfRasterizers[i]->fName); 1113 configName.append(pdfRasterizers[i]->fName);
1122 1114
1123 BitmapAndDigest bitmapAndDigest(pdfBitmap); 1115 errors.add(this->writeBitmap(gm, gRec, configName.c_str( ),
1124 errors.add(compare_test_results_to_stored_expectations( 1116 writePath, pdfBitmap));
1125 gm, gRec, configName.c_str(), &bitmapAndDiges t));
1126
1127 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1128 path = make_bitmap_filename(writePath, gm->getName() ,
1129 configName.c_str(),
1130 "", bitmapAndDigest.fDig est);
1131 errors.add(write_bitmap(path, bitmapAndDigest.fBitma p));
1132 }
1133 } 1117 }
1134 } else { 1118 } else {
1135 errors.add(kIntentionallySkipped_ErrorType); 1119 errors.add(kIntentionallySkipped_ErrorType);
1136 } 1120 }
1137 } 1121 }
1138 } else if (gRec.fBackend == kXPS_Backend) { 1122 } else if (gRec.fBackend == kXPS_Backend) {
1139 generate_xps(gm, document); 1123 generate_xps(gm, document);
1140 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream() ); 1124 SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream() );
1141 1125
1142 errors.add(compare_test_results_to_stored_expectations( 1126 errors.add(this->compareTestResultsToStoredExpectations(
1143 gm, gRec, gRec.fName, NULL)); 1127 gm, gRec, gRec.fName, NULL));
1144 1128
1145 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { 1129 if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
1146 path = make_filename(writePath, gm->getName(), gRec.fName, "", " xps"); 1130 SkString path = make_filename(writePath, gm->getName(), gRec.fNa me, "", "xps");
1147 errors.add(write_document(path, documentStream)); 1131 errors.add(write_document(path, documentStream));
1148 } 1132 }
1149 } else { 1133 } else {
1150 SkASSERT(false); 1134 SkASSERT(false);
1151 } 1135 }
1152 return errors; 1136 return errors;
1153 } 1137 }
1154 1138
1155 ErrorCombination test_deferred_drawing(GM* gm, 1139 ErrorCombination test_deferred_drawing(GM* gm,
1156 const ConfigData& gRec, 1140 const ConfigData& gRec,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 uint32_t flags = (config.fFlags & kDFText_ConfigFlag) ? 1183 uint32_t flags = (config.fFlags & kDFText_ConfigFlag) ?
1200 SkSurfaceProps::kUseDistanceFieldFonts_Flag : 0; 1184 SkSurfaceProps::kUseDistanceFieldFonts_Flag : 0;
1201 SkSurfaceProps props(flags, SkSurfaceProps::kLegacyFontHost_InitType ); 1185 SkSurfaceProps props(flags, SkSurfaceProps::kLegacyFontHost_InitType );
1202 return SkSurface::NewRenderTargetDirect(gpuTarget->asRenderTarget(), &props); 1186 return SkSurface::NewRenderTargetDirect(gpuTarget->asRenderTarget(), &props);
1203 } 1187 }
1204 #endif 1188 #endif
1205 1189
1206 return NULL; 1190 return NULL;
1207 } 1191 }
1208 1192
1193 ErrorCombination writeBitmap(GM* gm,
1194 const ConfigData& config,
1195 const char* configName,
1196 const char* writePath,
1197 const SkBitmap& bitmap) {
1198 ErrorCombination errors;
1199
1200 BitmapAndDigest bitmapAndDigest(bitmap);
1201 errors.add(this->compareTestResultsToStoredExpectations(gm, config,
1202 configName, &bit mapAndDigest));
1203
1204 if (writePath && (config.fFlags & kWrite_ConfigFlag)) {
1205 SkString path;
1206
1207 path = this->makeBitmapFilename(writePath, gm->getName(), configName ,
1208 "", bitmapAndDigest.fDigest);
1209 errors.add(WriteBitmap(path, bitmapAndDigest.fBitmap));
1210 }
1211
1212 return errors;
1213 }
1214
1209 ErrorCombination testMPDDrawing(GM* gm, 1215 ErrorCombination testMPDDrawing(GM* gm,
1210 const ConfigData& config, 1216 const ConfigData& config,
1217 const char* writePath,
1211 GrSurface* gpuTarget, 1218 GrSurface* gpuTarget,
1212 const SkBitmap& referenceBitmap) { 1219 const SkBitmap& referenceBitmap) {
1213 SkASSERT(kRaster_Backend == config.fBackend || kGPU_Backend == config.fB ackend); 1220 SkASSERT(kRaster_Backend == config.fBackend || kGPU_Backend == config.fB ackend);
1214 1221
1215 static const uint32_t kMPDFlags = SkPictureRecorder::kComputeSaveLayerIn fo_RecordFlag; 1222 static const uint32_t kMPDFlags = SkPictureRecorder::kComputeSaveLayerIn fo_RecordFlag;
1216 1223
1217 SkAutoTUnref<SkPicture> pict(generate_new_picture(gm, kRTree_BbhType, kM PDFlags)); 1224 SkAutoTUnref<SkPicture> pict(generate_new_picture(gm, kRTree_BbhType, kM PDFlags));
1218 1225
1219 SkAutoTUnref<SkSurface> surf(CreateSurface(config, gm->getISize(), gpuTa rget)); 1226 SkAutoTUnref<SkSurface> surf(CreateSurface(config, gm->getISize(), gpuTa rget));
1220 1227
1221 DrawPictureToSurface(surf, pict, SK_Scalar1, false, true); 1228 DrawPictureToSurface(surf, pict, SK_Scalar1, false, true);
1222 1229
1223 SkBitmap bitmap; 1230 SkBitmap bitmap;
1224 1231
1225 setup_bitmap(config, gm->getISize(), &bitmap); 1232 setup_bitmap(config, gm->getISize(), &bitmap);
1226 1233
1227 surf->readPixels(bitmap.info(), bitmap.getPixels(), bitmap.rowBytes(), 0 , 0); 1234 surf->readPixels(bitmap.info(), bitmap.getPixels(), bitmap.rowBytes(), 0 , 0);
1228 complete_bitmap(&bitmap); 1235 complete_bitmap(&bitmap);
1229 1236
1230 return compare_test_results_to_reference_bitmap( 1237 SkString configName(config.fName);
1231 gm->getName(), config.fName, "-mpd", bitmap, &referenceBitmap); 1238 configName.append("-mpd");
1239
1240 return this->writeBitmap(gm, config, configName.c_str(), writePath, bitm ap);
1232 } 1241 }
1233 1242
1234 ErrorCombination test_pipe_playback(GM* gm, const ConfigData& gRec, 1243 ErrorCombination test_pipe_playback(GM* gm, const ConfigData& gRec,
1235 const SkBitmap& referenceBitmap, bool si mulateFailure) { 1244 const SkBitmap& referenceBitmap, bool si mulateFailure) {
1236 const SkString shortNamePlusConfig = make_shortname_plus_config(gm->getN ame(), 1245 const SkString shortNamePlusConfig = make_shortname_plus_config(gm->getN ame(),
1237 gRec.fNa me); 1246 gRec.fNa me);
1238 ErrorCombination errors; 1247 ErrorCombination errors;
1239 for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) { 1248 for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) {
1240 SkString renderModeDescriptor("-pipe"); 1249 SkString renderModeDescriptor("-pipe");
1241 renderModeDescriptor.append(gPipeWritingFlagCombos[i].name); 1250 renderModeDescriptor.append(gPipeWritingFlagCombos[i].name);
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
1891 } 1900 }
1892 1901
1893 if (FLAGS_mpd && (kGPU_Backend == config.fBackend || kRaster_Backend == config.fBackend)) { 1902 if (FLAGS_mpd && (kGPU_Backend == config.fBackend || kRaster_Backend == config.fBackend)) {
1894 1903
1895 if (gmFlags & GM::kSkipPicture_Flag) { 1904 if (gmFlags & GM::kSkipPicture_Flag) {
1896 gmmain.RecordSkippedTest(shortNamePlusConfig, 1905 gmmain.RecordSkippedTest(shortNamePlusConfig,
1897 renderModeDescriptor, 1906 renderModeDescriptor,
1898 config.fBackend); 1907 config.fBackend);
1899 errorsForThisConfig.add(kIntentionallySkipped_ErrorType); 1908 errorsForThisConfig.add(kIntentionallySkipped_ErrorType);
1900 } else if (!(gmFlags & GM::kGPUOnly_Flag)) { 1909 } else if (!(gmFlags & GM::kGPUOnly_Flag)) {
1901 errorsForThisConfig.add(gmmain.testMPDDrawing(gm, config, gpuTar get, 1910 errorsForThisConfig.add(gmmain.testMPDDrawing(gm, config,
1911 writePath, gpuTarg et,
1902 comparisonBitmap)) ; 1912 comparisonBitmap)) ;
1903 } 1913 }
1904 } 1914 }
1905 1915
1906 errorsForAllConfigs.add(errorsForThisConfig); 1916 errorsForAllConfigs.add(errorsForThisConfig);
1907 } 1917 }
1908 return errorsForAllConfigs; 1918 return errorsForAllConfigs;
1909 } 1919 }
1910 1920
1911 1921
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
2570 if (FLAGS_forceBWtext) { 2580 if (FLAGS_forceBWtext) {
2571 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); 2581 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref();
2572 } 2582 }
2573 } 2583 }
2574 2584
2575 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 2585 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
2576 int main(int argc, char * const argv[]) { 2586 int main(int argc, char * const argv[]) {
2577 return tool_main(argc, (char**) argv); 2587 return tool_main(argc, (char**) argv);
2578 } 2588 }
2579 #endif 2589 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698