| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 <ctype.h> | 8 #include <ctype.h> |
| 9 | 9 |
| 10 #include "nanobench.h" | 10 #include "nanobench.h" |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 fImages.push_back() = SkOSPath::Join(flag, file.c_str()); | 533 fImages.push_back() = SkOSPath::Join(flag, file.c_str()); |
| 534 } | 534 } |
| 535 } else if (sk_exists(flag)) { | 535 } else if (sk_exists(flag)) { |
| 536 // Also add the value if it is a single image | 536 // Also add the value if it is a single image |
| 537 fImages.push_back() = flag; | 537 fImages.push_back() = flag; |
| 538 } | 538 } |
| 539 } | 539 } |
| 540 | 540 |
| 541 // Choose the candidate color types for image decoding | 541 // Choose the candidate color types for image decoding |
| 542 const SkColorType colorTypes[] = | 542 const SkColorType colorTypes[] = |
| 543 { kN32_SkColorType, kRGB_565_SkColorType, kAlpha_8_SkColorType }; | 543 { kN32_SkColorType, kRGB_565_SkColorType, kAlpha_8_SkColorType, kInd
ex_8_SkColorType }; |
| 544 fColorTypes.push_back_n(SK_ARRAY_COUNT(colorTypes), colorTypes); | 544 fColorTypes.push_back_n(SK_ARRAY_COUNT(colorTypes), colorTypes); |
| 545 } | 545 } |
| 546 | 546 |
| 547 static bool ReadPicture(const char* path, SkAutoTUnref<SkPicture>* pic) { | 547 static bool ReadPicture(const char* path, SkAutoTUnref<SkPicture>* pic) { |
| 548 // Not strictly necessary, as it will be checked again later, | 548 // Not strictly necessary, as it will be checked again later, |
| 549 // but helps to avoid a lot of pointless work if we're going to skip it. | 549 // but helps to avoid a lot of pointless work if we're going to skip it. |
| 550 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path)) { | 550 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path)) { |
| 551 return false; | 551 return false; |
| 552 } | 552 } |
| 553 | 553 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 | 637 |
| 638 for (; fCurrentCodec < fImages.count(); fCurrentCodec++) { | 638 for (; fCurrentCodec < fImages.count(); fCurrentCodec++) { |
| 639 const SkString& path = fImages[fCurrentCodec]; | 639 const SkString& path = fImages[fCurrentCodec]; |
| 640 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); | 640 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
| 641 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); | 641 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
| 642 SkASSERT(codec); | 642 SkASSERT(codec); |
| 643 if (!codec) { | 643 if (!codec) { |
| 644 // Nothing to time. | 644 // Nothing to time. |
| 645 continue; | 645 continue; |
| 646 } | 646 } |
| 647 |
| 647 while (fCurrentColorType < fColorTypes.count()) { | 648 while (fCurrentColorType < fColorTypes.count()) { |
| 648 SkColorType colorType = fColorTypes[fCurrentColorType]; | 649 const SkColorType colorType = fColorTypes[fCurrentColorType]; |
| 649 fCurrentColorType++; | 650 fCurrentColorType++; |
| 651 |
| 650 // Make sure we can decode to this color type. | 652 // Make sure we can decode to this color type. |
| 651 SkBitmap bitmap; | |
| 652 SkImageInfo info = codec->getInfo().makeColorType(colorType); | 653 SkImageInfo info = codec->getInfo().makeColorType(colorType); |
| 653 bitmap.allocPixels(info); | 654 SkAlphaType alphaType; |
| 655 if (!SkColorTypeValidateAlphaType(colorType, info.alphaType(), |
| 656 &alphaType)) { |
| 657 continue; |
| 658 } |
| 659 if (alphaType != info.alphaType()) { |
| 660 info = info.makeAlphaType(alphaType); |
| 661 } |
| 662 |
| 663 const size_t rowBytes = info.minRowBytes(); |
| 664 SkAutoMalloc storage(info.getSafeSize(rowBytes)); |
| 665 |
| 666 // Used if fCurrentColorType is kIndex_8_SkColorType |
| 667 int colorCount = 256; |
| 668 SkPMColor colors[256]; |
| 669 |
| 654 const SkImageGenerator::Result result = codec->getPixels( | 670 const SkImageGenerator::Result result = codec->getPixels( |
| 655 bitmap.info(), bitmap.getPixels(), bitmap.rowBytes()); | 671 info, storage.get(), rowBytes, NULL, colors, |
| 672 &colorCount); |
| 656 switch (result) { | 673 switch (result) { |
| 657 case SkImageGenerator::kSuccess: | 674 case SkImageGenerator::kSuccess: |
| 658 case SkImageGenerator::kIncompleteInput: | 675 case SkImageGenerator::kIncompleteInput: |
| 659 return new CodecBench(SkOSPath::Basename(path.c_str()), | 676 return new CodecBench(SkOSPath::Basename(path.c_str()), |
| 660 encoded, colorType); | 677 encoded, colorType); |
| 661 case SkImageGenerator::kInvalidConversion: | 678 case SkImageGenerator::kInvalidConversion: |
| 662 // This is okay. Not all conversions are valid. | 679 // This is okay. Not all conversions are valid. |
| 663 break; | 680 break; |
| 664 case SkImageGenerator::kCouldNotRewind: | 681 case SkImageGenerator::kCouldNotRewind: |
| 665 // FIXME: This is due to a bug in some implementations | 682 // FIXME: This is due to a bug in some implementations |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 979 | 996 |
| 980 return 0; | 997 return 0; |
| 981 } | 998 } |
| 982 | 999 |
| 983 #if !defined SK_BUILD_FOR_IOS | 1000 #if !defined SK_BUILD_FOR_IOS |
| 984 int main(int argc, char** argv) { | 1001 int main(int argc, char** argv) { |
| 985 SkCommandLineFlags::Parse(argc, argv); | 1002 SkCommandLineFlags::Parse(argc, argv); |
| 986 return nanobench_main(); | 1003 return nanobench_main(); |
| 987 } | 1004 } |
| 988 #endif | 1005 #endif |
| OLD | NEW |