| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "CrashHandler.h" | 8 #include "CrashHandler.h" |
| 9 #include "DMJsonWriter.h" | 9 #include "DMJsonWriter.h" |
| 10 #include "DMSrcSink.h" | 10 #include "DMSrcSink.h" |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 break; | 456 break; |
| 457 default: | 457 default: |
| 458 break; | 458 break; |
| 459 } | 459 } |
| 460 } | 460 } |
| 461 | 461 |
| 462 ImageGenSrc* src = new ImageGenSrc(path, mode, alphaType, isGpu); | 462 ImageGenSrc* src = new ImageGenSrc(path, mode, alphaType, isGpu); |
| 463 push_src("image", folder, src); | 463 push_src("image", folder, src); |
| 464 } | 464 } |
| 465 | 465 |
| 466 static void push_codec_srcs(Path path) { | 466 static void push_codec_srcs(Path path, SkCodec* codec) { |
| 467 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); | |
| 468 if (!encoded) { | |
| 469 info("Couldn't read %s.", path.c_str()); | |
| 470 return; | |
| 471 } | |
| 472 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); | |
| 473 if (nullptr == codec.get()) { | |
| 474 info("Couldn't create codec for %s.", path.c_str()); | |
| 475 return; | |
| 476 } | |
| 477 | |
| 478 // native scaling is only supported by WEBP and JPEG | 467 // native scaling is only supported by WEBP and JPEG |
| 479 bool supportsNativeScaling = false; | 468 bool supportsNativeScaling = false; |
| 480 | 469 |
| 481 SkTArray<CodecSrc::Mode> nativeModes; | 470 SkTArray<CodecSrc::Mode> nativeModes; |
| 482 nativeModes.push_back(CodecSrc::kCodec_Mode); | 471 nativeModes.push_back(CodecSrc::kCodec_Mode); |
| 483 nativeModes.push_back(CodecSrc::kCodecZeroInit_Mode); | 472 nativeModes.push_back(CodecSrc::kCodecZeroInit_Mode); |
| 484 switch (codec->getEncodedFormat()) { | 473 switch (codec->getEncodedFormat()) { |
| 485 case SkEncodedFormat::kJPEG_SkEncodedFormat: | 474 case SkEncodedFormat::kJPEG_SkEncodedFormat: |
| 486 nativeModes.push_back(CodecSrc::kScanline_Mode); | 475 nativeModes.push_back(CodecSrc::kScanline_Mode); |
| 487 nativeModes.push_back(CodecSrc::kStripe_Mode); | 476 nativeModes.push_back(CodecSrc::kStripe_Mode); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 } | 623 } |
| 635 | 624 |
| 636 if (1 != sampleSize) { | 625 if (1 != sampleSize) { |
| 637 folder.appendf("_%.3f", 1.0f / (float) sampleSize); | 626 folder.appendf("_%.3f", 1.0f / (float) sampleSize); |
| 638 } | 627 } |
| 639 | 628 |
| 640 BRDSrc* src = new BRDSrc(path, mode, dstColorType, sampleSize); | 629 BRDSrc* src = new BRDSrc(path, mode, dstColorType, sampleSize); |
| 641 push_src("image", folder, src); | 630 push_src("image", folder, src); |
| 642 } | 631 } |
| 643 | 632 |
| 644 static void push_brd_srcs(Path path) { | 633 static void push_brd_srcs(Path path, SkCodec* codec) { |
| 645 // Only run Index8 and grayscale to one sampleSize and Mode. Though interest
ing | 634 // Only run Index8 and grayscale to one sampleSize and Mode. Though interest
ing |
| 646 // to test these color types, they should not reveal anything across various | 635 // to test these color types, they should not reveal anything across various |
| 647 // sampleSizes and Modes | 636 // sampleSizes and Modes |
| 648 for (auto type : { CodecSrc::kIndex8_Always_DstColorType, | 637 for (auto type : { CodecSrc::kIndex8_Always_DstColorType, |
| 649 CodecSrc::kGrayscale_Always_DstColorType }) { | 638 CodecSrc::kGrayscale_Always_DstColorType }) { |
| 650 // Arbitrarily choose Mode and sampleSize. | 639 // Arbitrarily choose Mode and sampleSize. |
| 651 push_brd_src(path, type, BRDSrc::kFullImage_Mode, 2); | 640 push_brd_src(path, type, BRDSrc::kFullImage_Mode, 2); |
| 652 } | 641 } |
| 653 | 642 |
| 654 | 643 |
| 655 // Test on a variety of sampleSizes, making sure to include: | 644 // Test on a variety of sampleSizes, making sure to include: |
| 656 // - 2, 4, and 8, which are natively supported by jpeg | 645 // - 2, 4, and 8, which are natively supported by jpeg |
| 657 // - multiples of 2 which are not divisible by 4 (analogous for 4) | 646 // - multiples of 2 which are not divisible by 4 (analogous for 4) |
| 658 // - larger powers of two, since BRD clients generally use powers of 2 | 647 // - larger powers of two, since BRD clients generally use powers of 2 |
| 659 // We will only produce output for the larger sizes on large images. | 648 // We will only produce output for the larger sizes on large images. |
| 660 const uint32_t sampleSizes[] = { 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 24, 32, 64
}; | 649 const uint32_t sampleSizes[] = { 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 24, 32, 64
}; |
| 661 | 650 |
| 662 const BRDSrc::Mode modes[] = { | 651 const BRDSrc::Mode modes[] = { |
| 663 BRDSrc::kFullImage_Mode, | 652 BRDSrc::kFullImage_Mode, |
| 664 BRDSrc::kDivisor_Mode, | 653 BRDSrc::kDivisor_Mode, |
| 665 }; | 654 }; |
| 666 | 655 |
| 656 const int width = codec->getInfo().width(); |
| 657 const int height = codec->getInfo().height(); |
| 667 for (uint32_t sampleSize : sampleSizes) { | 658 for (uint32_t sampleSize : sampleSizes) { |
| 659 if ((width / sampleSize <= 10 || height / sampleSize <= 10) && 1 != samp
leSize) { |
| 660 // Scaling very small images is uninteresting. After the first itera
tion, |
| 661 // the image will only get smaller, so break here. |
| 662 break; |
| 663 } |
| 668 for (BRDSrc::Mode mode : modes) { | 664 for (BRDSrc::Mode mode : modes) { |
| 669 push_brd_src(path, CodecSrc::kGetFromCanvas_DstColorType, mode, samp
leSize); | 665 push_brd_src(path, CodecSrc::kGetFromCanvas_DstColorType, mode, samp
leSize); |
| 670 } | 666 } |
| 671 } | 667 } |
| 672 } | 668 } |
| 673 | 669 |
| 674 static bool brd_supported(const char* ext) { | 670 static bool brd_supported(const char* ext) { |
| 675 static const char* const exts[] = { | 671 static const char* const exts[] = { |
| 676 "jpg", "jpeg", "png", "webp", | 672 "jpg", "jpeg", "png", "webp", |
| 677 "JPG", "JPEG", "PNG", "WEBP", | 673 "JPG", "JPEG", "PNG", "WEBP", |
| (...skipping 22 matching lines...) Expand all Loading... |
| 700 push_src("skp", "", new SKPSrc(path)); | 696 push_src("skp", "", new SKPSrc(path)); |
| 701 } | 697 } |
| 702 } | 698 } |
| 703 | 699 |
| 704 SkTArray<SkString> images; | 700 SkTArray<SkString> images; |
| 705 if (!CollectImages(FLAGS_images, &images)) { | 701 if (!CollectImages(FLAGS_images, &images)) { |
| 706 return false; | 702 return false; |
| 707 } | 703 } |
| 708 | 704 |
| 709 for (auto image : images) { | 705 for (auto image : images) { |
| 710 push_codec_srcs(image); | 706 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(image.c_str())); |
| 707 if (!encoded) { |
| 708 info("Couldn't read %s.", image.c_str()); |
| 709 continue; |
| 710 } |
| 711 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
| 712 if (nullptr == codec.get()) { |
| 713 info("Couldn't create codec for %s.", image.c_str()); |
| 714 continue; |
| 715 } |
| 716 |
| 717 push_codec_srcs(image, codec); |
| 711 if (FLAGS_simpleCodec) { | 718 if (FLAGS_simpleCodec) { |
| 712 continue; | 719 continue; |
| 713 } | 720 } |
| 714 | 721 |
| 715 const char* ext = strrchr(image.c_str(), '.'); | 722 const char* ext = strrchr(image.c_str(), '.'); |
| 716 if (ext && brd_supported(ext+1)) { | 723 if (ext && brd_supported(ext+1)) { |
| 717 push_brd_srcs(image); | 724 push_brd_srcs(image, codec); |
| 718 } | 725 } |
| 719 } | 726 } |
| 720 | 727 |
| 721 SkTArray<SkString> colorImages; | 728 SkTArray<SkString> colorImages; |
| 722 if (!CollectImages(FLAGS_colorImages, &colorImages)) { | 729 if (!CollectImages(FLAGS_colorImages, &colorImages)) { |
| 723 return false; | 730 return false; |
| 724 } | 731 } |
| 725 | 732 |
| 726 for (auto colorImage : colorImages) { | 733 for (auto colorImage : colorImages) { |
| 727 ColorCodecSrc* src = new ColorCodecSrc(colorImage, ColorCodecSrc::kBasel
ine_Mode); | 734 ColorCodecSrc* src = new ColorCodecSrc(colorImage, ColorCodecSrc::kBasel
ine_Mode); |
| (...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1373 #endif | 1380 #endif |
| 1374 } | 1381 } |
| 1375 } // namespace skiatest | 1382 } // namespace skiatest |
| 1376 | 1383 |
| 1377 #if !defined(SK_BUILD_FOR_IOS) | 1384 #if !defined(SK_BUILD_FOR_IOS) |
| 1378 int main(int argc, char** argv) { | 1385 int main(int argc, char** argv) { |
| 1379 SkCommandLineFlags::Parse(argc, argv); | 1386 SkCommandLineFlags::Parse(argc, argv); |
| 1380 return dm_main(); | 1387 return dm_main(); |
| 1381 } | 1388 } |
| 1382 #endif | 1389 #endif |
| OLD | NEW |