| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 #include "LazyDecodeBitmap.h" | 8 #include "LazyDecodeBitmap.h" |
| 9 #include "CopyTilesRenderer.h" | 9 #include "CopyTilesRenderer.h" |
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 SkBitmap* bitmap = NULL; | 266 SkBitmap* bitmap = NULL; |
| 267 renderer.setJsonSummaryPtr(jsonSummaryPtr); | 267 renderer.setJsonSummaryPtr(jsonSummaryPtr); |
| 268 bool success = render_picture_internal(inputPath, | 268 bool success = render_picture_internal(inputPath, |
| 269 FLAGS_writeWholeImage ? NULL : writePath, | 269 FLAGS_writeWholeImage ? NULL : writePath, |
| 270 FLAGS_writeWholeImage ? NULL : mismatchPath, | 270 FLAGS_writeWholeImage ? NULL : mismatchPath, |
| 271 renderer, | 271 renderer, |
| 272 FLAGS_validate || FLAGS_writeWholeImage ? &bitmap : NULL); | 272 FLAGS_validate || FLAGS_writeWholeImage ? &bitmap : NULL); |
| 273 | 273 |
| 274 if (!success || ((FLAGS_validate || FLAGS_writeWholeImage) && bitmap == NULL
)) { | 274 if (!success || ((FLAGS_validate || FLAGS_writeWholeImage) && bitmap == NULL
)) { |
| 275 SkDebugf("Failed to draw the picture.\n"); | 275 SkDebugf("Failed to draw the picture.\n"); |
| 276 SkDELETE(bitmap); | 276 delete bitmap; |
| 277 return false; | 277 return false; |
| 278 } | 278 } |
| 279 | 279 |
| 280 if (FLAGS_validate) { | 280 if (FLAGS_validate) { |
| 281 SkBitmap* referenceBitmap = NULL; | 281 SkBitmap* referenceBitmap = NULL; |
| 282 sk_tools::PictureRenderer* referenceRenderer; | 282 sk_tools::PictureRenderer* referenceRenderer; |
| 283 // If the renderer uses a BBoxHierarchy, then the reference renderer | 283 // If the renderer uses a BBoxHierarchy, then the reference renderer |
| 284 // will be the same renderer, without the bbh. | 284 // will be the same renderer, without the bbh. |
| 285 AutoRestoreBbhType arbbh; | 285 AutoRestoreBbhType arbbh; |
| 286 if (sk_tools::PictureRenderer::kNone_BBoxHierarchyType != | 286 if (sk_tools::PictureRenderer::kNone_BBoxHierarchyType != |
| 287 renderer.getBBoxHierarchyType()) { | 287 renderer.getBBoxHierarchyType()) { |
| 288 referenceRenderer = &renderer; | 288 referenceRenderer = &renderer; |
| 289 referenceRenderer->ref(); // to match auto unref below | 289 referenceRenderer->ref(); // to match auto unref below |
| 290 arbbh.set(referenceRenderer, sk_tools::PictureRenderer::kNone_BBoxHi
erarchyType); | 290 arbbh.set(referenceRenderer, sk_tools::PictureRenderer::kNone_BBoxHi
erarchyType); |
| 291 } else { | 291 } else { |
| 292 #if SK_SUPPORT_GPU | 292 #if SK_SUPPORT_GPU |
| 293 referenceRenderer = SkNEW_ARGS(sk_tools::SimplePictureRenderer, | 293 referenceRenderer = new sk_tools::SimplePictureRenderer(renderer.get
GrContextOptions()); |
| 294 (renderer.getGrContextOptions())); | |
| 295 #else | 294 #else |
| 296 referenceRenderer = SkNEW(sk_tools::SimplePictureRenderer); | 295 referenceRenderer = new sk_tools::SimplePictureRenderer; |
| 297 #endif | 296 #endif |
| 298 } | 297 } |
| 299 SkAutoTUnref<sk_tools::PictureRenderer> aurReferenceRenderer(referenceRe
nderer); | 298 SkAutoTUnref<sk_tools::PictureRenderer> aurReferenceRenderer(referenceRe
nderer); |
| 300 | 299 |
| 301 success = render_picture_internal(inputPath, NULL, NULL, *referenceRende
rer, | 300 success = render_picture_internal(inputPath, NULL, NULL, *referenceRende
rer, |
| 302 &referenceBitmap); | 301 &referenceBitmap); |
| 303 | 302 |
| 304 if (!success || NULL == referenceBitmap || NULL == referenceBitmap->getP
ixels()) { | 303 if (!success || NULL == referenceBitmap || NULL == referenceBitmap->getP
ixels()) { |
| 305 SkDebugf("Failed to draw the reference picture.\n"); | 304 SkDebugf("Failed to draw the reference picture.\n"); |
| 306 SkDELETE(bitmap); | 305 delete bitmap; |
| 307 SkDELETE(referenceBitmap); | 306 delete referenceBitmap; |
| 308 return false; | 307 return false; |
| 309 } | 308 } |
| 310 | 309 |
| 311 if (success && (bitmap->width() != referenceBitmap->width())) { | 310 if (success && (bitmap->width() != referenceBitmap->width())) { |
| 312 SkDebugf("Expected image width: %i, actual image width %i.\n", | 311 SkDebugf("Expected image width: %i, actual image width %i.\n", |
| 313 referenceBitmap->width(), bitmap->width()); | 312 referenceBitmap->width(), bitmap->width()); |
| 314 SkDELETE(bitmap); | 313 delete bitmap; |
| 315 SkDELETE(referenceBitmap); | 314 delete referenceBitmap; |
| 316 return false; | 315 return false; |
| 317 } | 316 } |
| 318 if (success && (bitmap->height() != referenceBitmap->height())) { | 317 if (success && (bitmap->height() != referenceBitmap->height())) { |
| 319 SkDebugf("Expected image height: %i, actual image height %i", | 318 SkDebugf("Expected image height: %i, actual image height %i", |
| 320 referenceBitmap->height(), bitmap->height()); | 319 referenceBitmap->height(), bitmap->height()); |
| 321 SkDELETE(bitmap); | 320 delete bitmap; |
| 322 SkDELETE(referenceBitmap); | 321 delete referenceBitmap; |
| 323 return false; | 322 return false; |
| 324 } | 323 } |
| 325 | 324 |
| 326 for (int y = 0; success && y < bitmap->height(); y++) { | 325 for (int y = 0; success && y < bitmap->height(); y++) { |
| 327 for (int x = 0; success && x < bitmap->width(); x++) { | 326 for (int x = 0; success && x < bitmap->width(); x++) { |
| 328 int diff = MaxByteDiff(*referenceBitmap->getAddr32(x, y), | 327 int diff = MaxByteDiff(*referenceBitmap->getAddr32(x, y), |
| 329 *bitmap->getAddr32(x, y)); | 328 *bitmap->getAddr32(x, y)); |
| 330 SkASSERT(diff >= 0 && diff <= 255); | 329 SkASSERT(diff >= 0 && diff <= 255); |
| 331 diffs[diff]++; | 330 diffs[diff]++; |
| 332 | 331 |
| 333 if (diff > FLAGS_maxComponentDiff) { | 332 if (diff > FLAGS_maxComponentDiff) { |
| 334 SkDebugf("Expected pixel at (%i %i) exceedds maximum " | 333 SkDebugf("Expected pixel at (%i %i) exceedds maximum " |
| 335 "component diff of %i: 0x%x, actual 0x%x\n", | 334 "component diff of %i: 0x%x, actual 0x%x\n", |
| 336 x, y, FLAGS_maxComponentDiff, | 335 x, y, FLAGS_maxComponentDiff, |
| 337 *referenceBitmap->getAddr32(x, y), | 336 *referenceBitmap->getAddr32(x, y), |
| 338 *bitmap->getAddr32(x, y)); | 337 *bitmap->getAddr32(x, y)); |
| 339 SkDELETE(bitmap); | 338 delete bitmap; |
| 340 SkDELETE(referenceBitmap); | 339 delete referenceBitmap; |
| 341 return false; | 340 return false; |
| 342 } | 341 } |
| 343 } | 342 } |
| 344 } | 343 } |
| 345 SkDELETE(referenceBitmap); | 344 delete referenceBitmap; |
| 346 | 345 |
| 347 for (int i = 1; i <= 255; ++i) { | 346 for (int i = 1; i <= 255; ++i) { |
| 348 if(diffs[i] > 0) { | 347 if(diffs[i] > 0) { |
| 349 SkDebugf("Number of pixels with max diff of %i is %i\n", i, diff
s[i]); | 348 SkDebugf("Number of pixels with max diff of %i is %i\n", i, diff
s[i]); |
| 350 } | 349 } |
| 351 } | 350 } |
| 352 } | 351 } |
| 353 | 352 |
| 354 if (FLAGS_writeWholeImage) { | 353 if (FLAGS_writeWholeImage) { |
| 355 sk_tools::force_all_opaque(*bitmap); | 354 sk_tools::force_all_opaque(*bitmap); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 366 !jsonSummaryPtr->getExpectation(inputFilename.c_str()).matches(i
mageDigest)) { | 365 !jsonSummaryPtr->getExpectation(inputFilename.c_str()).matches(i
mageDigest)) { |
| 367 success &= sk_tools::write_bitmap_to_disk(*bitmap, *mismatchPath
, NULL, | 366 success &= sk_tools::write_bitmap_to_disk(*bitmap, *mismatchPath
, NULL, |
| 368 outputFilename); | 367 outputFilename); |
| 369 } | 368 } |
| 370 } | 369 } |
| 371 | 370 |
| 372 if ((writePath) && !writePath->isEmpty()) { | 371 if ((writePath) && !writePath->isEmpty()) { |
| 373 success &= sk_tools::write_bitmap_to_disk(*bitmap, *writePath, NULL,
outputFilename); | 372 success &= sk_tools::write_bitmap_to_disk(*bitmap, *writePath, NULL,
outputFilename); |
| 374 } | 373 } |
| 375 } | 374 } |
| 376 SkDELETE(bitmap); | 375 delete bitmap; |
| 377 | 376 |
| 378 return success; | 377 return success; |
| 379 } | 378 } |
| 380 | 379 |
| 381 | 380 |
| 382 static int process_input(const char* input, const SkString* writePath, | 381 static int process_input(const char* input, const SkString* writePath, |
| 383 const SkString* mismatchPath, sk_tools::PictureRenderer
& renderer, | 382 const SkString* mismatchPath, sk_tools::PictureRenderer
& renderer, |
| 384 sk_tools::ImageResultsAndExpectations *jsonSummaryPtr)
{ | 383 sk_tools::ImageResultsAndExpectations *jsonSummaryPtr)
{ |
| 385 SkOSFile::Iter iter(input, "skp"); | 384 SkOSFile::Iter iter(input, "skp"); |
| 386 SkString inputFilename; | 385 SkString inputFilename; |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 jsonSummary.writeToFile(FLAGS_writeJsonSummaryPath[0]); | 502 jsonSummary.writeToFile(FLAGS_writeJsonSummaryPath[0]); |
| 504 } | 503 } |
| 505 return 0; | 504 return 0; |
| 506 } | 505 } |
| 507 | 506 |
| 508 #if !defined SK_BUILD_FOR_IOS | 507 #if !defined SK_BUILD_FOR_IOS |
| 509 int main(int argc, char * const argv[]) { | 508 int main(int argc, char * const argv[]) { |
| 510 return tool_main(argc, (char**) argv); | 509 return tool_main(argc, (char**) argv); |
| 511 } | 510 } |
| 512 #endif | 511 #endif |
| OLD | NEW |