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

Side by Side Diff: tools/skdiff_main.cpp

Issue 302443012: add a verbose flag to skdiff that shows the progress and status of (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove __VA_ARGS__ macro thing; it's probably not portable and didn't use it hardly at all Created 6 years, 6 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
« 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 #include "skdiff.h" 7 #include "skdiff.h"
8 #include "skdiff_html.h" 8 #include "skdiff_html.h"
9 #include "skdiff_utils.h" 9 #include "skdiff_utils.h"
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 get_bitmap(fileBits, resource, SkImageDecoder::kDecodeBounds_Mode); 304 get_bitmap(fileBits, resource, SkImageDecoder::kDecodeBounds_Mode);
305 } 305 }
306 } 306 }
307 } 307 }
308 308
309 static void get_bounds(DiffRecord& drp) { 309 static void get_bounds(DiffRecord& drp) {
310 get_bounds(drp.fBase, "base"); 310 get_bounds(drp.fBase, "base");
311 get_bounds(drp.fComparison, "comparison"); 311 get_bounds(drp.fComparison, "comparison");
312 } 312 }
313 313
314 #define ANSI_COLOR_RED "\x1b[31m"
315 #define ANSI_COLOR_GREEN "\x1b[32m"
316 #define ANSI_COLOR_YELLOW "\x1b[33m"
317 #define ANSI_COLOR_RESET "\x1b[0m"
318
319 #define VERBOSE_STATUS(status,color,filename) if (verbose) printf( "[ " color " %10s " ANSI_COLOR_RESET " ] %s\n", status, filename->c_str())
bungeman-skia 2014/05/28 17:34:28 Can we ifdef SK_OS_WIN or something here so we don
humper 2014/05/28 17:55:31 Done.
320
314 /// Creates difference images, returns the number that have a 0 metric. 321 /// Creates difference images, returns the number that have a 0 metric.
315 /// If outputDir.isEmpty(), don't write out diff files. 322 /// If outputDir.isEmpty(), don't write out diff files.
316 static void create_diff_images (DiffMetricProc dmp, 323 static void create_diff_images (DiffMetricProc dmp,
317 const int colorThreshold, 324 const int colorThreshold,
318 RecordArray* differences, 325 RecordArray* differences,
319 const SkString& baseDir, 326 const SkString& baseDir,
320 const SkString& comparisonDir, 327 const SkString& comparisonDir,
321 const SkString& outputDir, 328 const SkString& outputDir,
322 const StringArray& matchSubstrings, 329 const StringArray& matchSubstrings,
323 const StringArray& nomatchSubstrings, 330 const StringArray& nomatchSubstrings,
324 bool recurseIntoSubdirs, 331 bool recurseIntoSubdirs,
325 bool getBounds, 332 bool getBounds,
333 bool verbose,
326 DiffSummary* summary) { 334 DiffSummary* summary) {
327 SkASSERT(!baseDir.isEmpty()); 335 SkASSERT(!baseDir.isEmpty());
328 SkASSERT(!comparisonDir.isEmpty()); 336 SkASSERT(!comparisonDir.isEmpty());
329 337
330 FileArray baseFiles; 338 FileArray baseFiles;
331 FileArray comparisonFiles; 339 FileArray comparisonFiles;
332 340
333 get_file_list(baseDir, matchSubstrings, nomatchSubstrings, recurseIntoSubdir s, &baseFiles); 341 get_file_list(baseDir, matchSubstrings, nomatchSubstrings, recurseIntoSubdir s, &baseFiles);
334 get_file_list(comparisonDir, matchSubstrings, nomatchSubstrings, recurseInto Subdirs, 342 get_file_list(comparisonDir, matchSubstrings, nomatchSubstrings, recurseInto Subdirs,
335 &comparisonFiles); 343 &comparisonFiles);
(...skipping 27 matching lines...) Expand all
363 comparisonPath.append(*baseFiles[i]); 371 comparisonPath.append(*baseFiles[i]);
364 372
365 drp->fBase.fFilename = *baseFiles[i]; 373 drp->fBase.fFilename = *baseFiles[i];
366 drp->fBase.fFullPath = basePath; 374 drp->fBase.fFullPath = basePath;
367 drp->fBase.fStatus = DiffResource::kExists_Status; 375 drp->fBase.fStatus = DiffResource::kExists_Status;
368 376
369 drp->fComparison.fFilename = *baseFiles[i]; 377 drp->fComparison.fFilename = *baseFiles[i];
370 drp->fComparison.fFullPath = comparisonPath; 378 drp->fComparison.fFullPath = comparisonPath;
371 drp->fComparison.fStatus = DiffResource::kDoesNotExist_Status; 379 drp->fComparison.fStatus = DiffResource::kDoesNotExist_Status;
372 380
381 VERBOSE_STATUS("MISSING", ANSI_COLOR_YELLOW, baseFiles[i]);
382
373 ++i; 383 ++i;
374 } else if (v > 0) { 384 } else if (v > 0) {
375 // in comparisonDir, but not in baseDir 385 // in comparisonDir, but not in baseDir
376 drp->fResult = DiffRecord::kCouldNotCompare_Result; 386 drp->fResult = DiffRecord::kCouldNotCompare_Result;
377 387
378 basePath.append(*comparisonFiles[j]); 388 basePath.append(*comparisonFiles[j]);
379 comparisonPath.append(*comparisonFiles[j]); 389 comparisonPath.append(*comparisonFiles[j]);
380 390
381 drp->fBase.fFilename = *comparisonFiles[j]; 391 drp->fBase.fFilename = *comparisonFiles[j];
382 drp->fBase.fFullPath = basePath; 392 drp->fBase.fFullPath = basePath;
383 drp->fBase.fStatus = DiffResource::kDoesNotExist_Status; 393 drp->fBase.fStatus = DiffResource::kDoesNotExist_Status;
384 394
385 drp->fComparison.fFilename = *comparisonFiles[j]; 395 drp->fComparison.fFilename = *comparisonFiles[j];
386 drp->fComparison.fFullPath = comparisonPath; 396 drp->fComparison.fFullPath = comparisonPath;
387 drp->fComparison.fStatus = DiffResource::kExists_Status; 397 drp->fComparison.fStatus = DiffResource::kExists_Status;
388 398
399 VERBOSE_STATUS("MISSING", ANSI_COLOR_YELLOW, comparisonFiles[j]);
400
389 ++j; 401 ++j;
390 } else { 402 } else {
391 // Found the same filename in both baseDir and comparisonDir. 403 // Found the same filename in both baseDir and comparisonDir.
392 SkASSERT(DiffRecord::kUnknown_Result == drp->fResult); 404 SkASSERT(DiffRecord::kUnknown_Result == drp->fResult);
393 405
394 basePath.append(*baseFiles[i]); 406 basePath.append(*baseFiles[i]);
395 comparisonPath.append(*comparisonFiles[j]); 407 comparisonPath.append(*comparisonFiles[j]);
396 408
397 drp->fBase.fFilename = *baseFiles[i]; 409 drp->fBase.fFilename = *baseFiles[i];
398 drp->fBase.fFullPath = basePath; 410 drp->fBase.fFullPath = basePath;
399 drp->fBase.fStatus = DiffResource::kExists_Status; 411 drp->fBase.fStatus = DiffResource::kExists_Status;
400 412
401 drp->fComparison.fFilename = *comparisonFiles[j]; 413 drp->fComparison.fFilename = *comparisonFiles[j];
402 drp->fComparison.fFullPath = comparisonPath; 414 drp->fComparison.fFullPath = comparisonPath;
403 drp->fComparison.fStatus = DiffResource::kExists_Status; 415 drp->fComparison.fStatus = DiffResource::kExists_Status;
404 416
405 SkAutoDataUnref baseFileBits(read_file(drp->fBase.fFullPath.c_str()) ); 417 SkAutoDataUnref baseFileBits(read_file(drp->fBase.fFullPath.c_str()) );
406 if (NULL != baseFileBits) { 418 if (NULL != baseFileBits) {
407 drp->fBase.fStatus = DiffResource::kRead_Status; 419 drp->fBase.fStatus = DiffResource::kRead_Status;
420
bungeman-skia 2014/05/28 17:34:28 remove extra line?
humper 2014/05/28 17:55:31 Done.
408 } 421 }
409 SkAutoDataUnref comparisonFileBits(read_file(drp->fComparison.fFullP ath.c_str())); 422 SkAutoDataUnref comparisonFileBits(read_file(drp->fComparison.fFullP ath.c_str()));
410 if (NULL != comparisonFileBits) { 423 if (NULL != comparisonFileBits) {
411 drp->fComparison.fStatus = DiffResource::kRead_Status; 424 drp->fComparison.fStatus = DiffResource::kRead_Status;
412 } 425 }
413 if (NULL == baseFileBits || NULL == comparisonFileBits) { 426 if (NULL == baseFileBits || NULL == comparisonFileBits) {
414 if (NULL == baseFileBits) { 427 if (NULL == baseFileBits) {
415 drp->fBase.fStatus = DiffResource::kCouldNotRead_Status; 428 drp->fBase.fStatus = DiffResource::kCouldNotRead_Status;
429 VERBOSE_STATUS("READ FAIL", ANSI_COLOR_RED, baseFiles[i]);
416 } 430 }
417 if (NULL == comparisonFileBits) { 431 if (NULL == comparisonFileBits) {
418 drp->fComparison.fStatus = DiffResource::kCouldNotRead_Statu s; 432 drp->fComparison.fStatus = DiffResource::kCouldNotRead_Statu s;
433 VERBOSE_STATUS("READ FAIL", ANSI_COLOR_RED, comparisonFiles[ j]);
419 } 434 }
420 drp->fResult = DiffRecord::kCouldNotCompare_Result; 435 drp->fResult = DiffRecord::kCouldNotCompare_Result;
421 436
422 } else if (are_buffers_equal(baseFileBits, comparisonFileBits)) { 437 } else if (are_buffers_equal(baseFileBits, comparisonFileBits)) {
423 drp->fResult = DiffRecord::kEqualBits_Result; 438 drp->fResult = DiffRecord::kEqualBits_Result;
424 439 VERBOSE_STATUS("MATCH", ANSI_COLOR_GREEN, baseFiles[i]);
425 } else { 440 } else {
426 AutoReleasePixels arp(drp); 441 AutoReleasePixels arp(drp);
427 get_bitmap(baseFileBits, drp->fBase, SkImageDecoder::kDecodePixe ls_Mode); 442 get_bitmap(baseFileBits, drp->fBase, SkImageDecoder::kDecodePixe ls_Mode);
428 get_bitmap(comparisonFileBits, drp->fComparison, 443 get_bitmap(comparisonFileBits, drp->fComparison,
429 SkImageDecoder::kDecodePixels_Mode); 444 SkImageDecoder::kDecodePixels_Mode);
445 VERBOSE_STATUS("DIFFERENT", ANSI_COLOR_RED, baseFiles[i]);
430 if (DiffResource::kDecoded_Status == drp->fBase.fStatus && 446 if (DiffResource::kDecoded_Status == drp->fBase.fStatus &&
431 DiffResource::kDecoded_Status == drp->fComparison.fStatus) { 447 DiffResource::kDecoded_Status == drp->fComparison.fStatus) {
432 create_and_write_diff_image(drp, dmp, colorThreshold, 448 create_and_write_diff_image(drp, dmp, colorThreshold,
433 outputDir, drp->fBase.fFilename) ; 449 outputDir, drp->fBase.fFilename) ;
434 } else { 450 } else {
435 drp->fResult = DiffRecord::kCouldNotCompare_Result; 451 drp->fResult = DiffRecord::kCouldNotCompare_Result;
436 } 452 }
437 } 453 }
438 454
455
bungeman-skia 2014/05/28 17:34:28 remove extra line?
humper 2014/05/28 17:55:31 Done.
439 ++i; 456 ++i;
440 ++j; 457 ++j;
441 } 458 }
442 459
443 if (getBounds) { 460 if (getBounds) {
444 get_bounds(*drp); 461 get_bounds(*drp);
445 } 462 }
446 SkASSERT(DiffRecord::kUnknown_Result != drp->fResult); 463 SkASSERT(DiffRecord::kUnknown_Result != drp->fResult);
447 differences->push(drp); 464 differences->push(drp);
448 summary->add(drp); 465 summary->add(drp);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 SkString comparisonDir; 568 SkString comparisonDir;
552 SkString outputDir; 569 SkString outputDir;
553 570
554 StringArray matchSubstrings; 571 StringArray matchSubstrings;
555 StringArray nomatchSubstrings; 572 StringArray nomatchSubstrings;
556 573
557 bool generateDiffs = true; 574 bool generateDiffs = true;
558 bool listFilenames = false; 575 bool listFilenames = false;
559 bool printDirNames = true; 576 bool printDirNames = true;
560 bool recurseIntoSubdirs = true; 577 bool recurseIntoSubdirs = true;
578 bool verbose = false;
561 579
562 RecordArray differences; 580 RecordArray differences;
563 DiffSummary summary; 581 DiffSummary summary;
564 582
565 bool failOnResultType[DiffRecord::kResultCount]; 583 bool failOnResultType[DiffRecord::kResultCount];
566 for (int i = 0; i < DiffRecord::kResultCount; i++) { 584 for (int i = 0; i < DiffRecord::kResultCount; i++) {
567 failOnResultType[i] = false; 585 failOnResultType[i] = false;
568 } 586 }
569 587
570 bool failOnStatusType[DiffResource::kStatusCount][DiffResource::kStatusCount ]; 588 bool failOnStatusType[DiffResource::kStatusCount][DiffResource::kStatusCount ];
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 continue; 636 continue;
619 } 637 }
620 if (!strcmp(argv[i], "--help")) { 638 if (!strcmp(argv[i], "--help")) {
621 usage(argv[0]); 639 usage(argv[0]);
622 return kNoError; 640 return kNoError;
623 } 641 }
624 if (!strcmp(argv[i], "--listfilenames")) { 642 if (!strcmp(argv[i], "--listfilenames")) {
625 listFilenames = true; 643 listFilenames = true;
626 continue; 644 continue;
627 } 645 }
646 if (!strcmp(argv[i], "--verbose")) {
647 verbose = true;
648 continue;
649 }
628 if (!strcmp(argv[i], "--match")) { 650 if (!strcmp(argv[i], "--match")) {
629 matchSubstrings.push(new SkString(argv[++i])); 651 matchSubstrings.push(new SkString(argv[++i]));
630 continue; 652 continue;
631 } 653 }
632 if (!strcmp(argv[i], "--nodiffs")) { 654 if (!strcmp(argv[i], "--nodiffs")) {
633 generateDiffs = false; 655 generateDiffs = false;
634 continue; 656 continue;
635 } 657 }
636 if (!strcmp(argv[i], "--nomatch")) { 658 if (!strcmp(argv[i], "--nomatch")) {
637 nomatchSubstrings.push(new SkString(argv[++i])); 659 nomatchSubstrings.push(new SkString(argv[++i]));
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 743
722 // If no matchSubstrings were specified, match ALL strings 744 // If no matchSubstrings were specified, match ALL strings
723 // (except for whatever nomatchSubstrings were specified, if any). 745 // (except for whatever nomatchSubstrings were specified, if any).
724 if (matchSubstrings.isEmpty()) { 746 if (matchSubstrings.isEmpty()) {
725 matchSubstrings.push(new SkString("")); 747 matchSubstrings.push(new SkString(""));
726 } 748 }
727 749
728 create_diff_images(diffProc, colorThreshold, &differences, 750 create_diff_images(diffProc, colorThreshold, &differences,
729 baseDir, comparisonDir, outputDir, 751 baseDir, comparisonDir, outputDir,
730 matchSubstrings, nomatchSubstrings, recurseIntoSubdirs, g enerateDiffs, 752 matchSubstrings, nomatchSubstrings, recurseIntoSubdirs, g enerateDiffs,
731 &summary); 753 verbose, &summary);
732 summary.print(listFilenames, failOnResultType, failOnStatusType); 754 summary.print(listFilenames, failOnResultType, failOnStatusType);
733 755
734 if (differences.count()) { 756 if (differences.count()) {
735 qsort(differences.begin(), differences.count(), 757 qsort(differences.begin(), differences.count(),
736 sizeof(DiffRecord*), sortProc); 758 sizeof(DiffRecord*), sortProc);
737 } 759 }
738 760
739 if (generateDiffs) { 761 if (generateDiffs) {
740 print_diff_page(summary.fNumMatches, colorThreshold, differences, 762 print_diff_page(summary.fNumMatches, colorThreshold, differences,
741 baseDir, comparisonDir, outputDir); 763 baseDir, comparisonDir, outputDir);
(...skipping 25 matching lines...) Expand all
767 // range [0...255] are wrapped (mod 256). Do the conversion ourselves, to 789 // range [0...255] are wrapped (mod 256). Do the conversion ourselves, to
768 // make sure that we only return 0 when there were no failures. 790 // make sure that we only return 0 when there were no failures.
769 return (num_failing_results > 255) ? 255 : num_failing_results; 791 return (num_failing_results > 255) ? 255 : num_failing_results;
770 } 792 }
771 793
772 #if !defined SK_BUILD_FOR_IOS 794 #if !defined SK_BUILD_FOR_IOS
773 int main(int argc, char * const argv[]) { 795 int main(int argc, char * const argv[]) {
774 return tool_main(argc, (char**) argv); 796 return tool_main(argc, (char**) argv);
775 } 797 }
776 #endif 798 #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