| 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 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 BenchmarkStream() : fBenches(BenchRegistry::Head()) | 557 BenchmarkStream() : fBenches(BenchRegistry::Head()) |
| 558 , fGMs(skiagm::GMRegistry::Head()) | 558 , fGMs(skiagm::GMRegistry::Head()) |
| 559 , fCurrentRecording(0) | 559 , fCurrentRecording(0) |
| 560 , fCurrentScale(0) | 560 , fCurrentScale(0) |
| 561 , fCurrentSKP(0) | 561 , fCurrentSKP(0) |
| 562 , fCurrentUseMPD(0) | 562 , fCurrentUseMPD(0) |
| 563 , fCurrentCodec(0) | 563 , fCurrentCodec(0) |
| 564 , fCurrentImage(0) | 564 , fCurrentImage(0) |
| 565 , fCurrentBRDImage(0) | 565 , fCurrentBRDImage(0) |
| 566 , fCurrentColorType(0) | 566 , fCurrentColorType(0) |
| 567 , fCurrentAlphaType(0) |
| 567 , fCurrentSubsetType(0) | 568 , fCurrentSubsetType(0) |
| 568 , fCurrentBRDStrategy(0) | 569 , fCurrentBRDStrategy(0) |
| 569 , fCurrentBRDSampleSize(0) | 570 , fCurrentBRDSampleSize(0) |
| 570 , fCurrentAnimSKP(0) { | 571 , fCurrentAnimSKP(0) { |
| 571 for (int i = 0; i < FLAGS_skps.count(); i++) { | 572 for (int i = 0; i < FLAGS_skps.count(); i++) { |
| 572 if (SkStrEndsWith(FLAGS_skps[i], ".skp")) { | 573 if (SkStrEndsWith(FLAGS_skps[i], ".skp")) { |
| 573 fSKPs.push_back() = FLAGS_skps[i]; | 574 fSKPs.push_back() = FLAGS_skps[i]; |
| 574 } else { | 575 } else { |
| 575 SkOSFile::Iter it(FLAGS_skps[i], ".skp"); | 576 SkOSFile::Iter it(FLAGS_skps[i], ".skp"); |
| 576 SkString path; | 577 SkString path; |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); | 746 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
| 746 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); | 747 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
| 747 if (!codec) { | 748 if (!codec) { |
| 748 // Nothing to time. | 749 // Nothing to time. |
| 749 SkDebugf("Cannot find codec for %s\n", path.c_str()); | 750 SkDebugf("Cannot find codec for %s\n", path.c_str()); |
| 750 continue; | 751 continue; |
| 751 } | 752 } |
| 752 | 753 |
| 753 while (fCurrentColorType < fColorTypes.count()) { | 754 while (fCurrentColorType < fColorTypes.count()) { |
| 754 const SkColorType colorType = fColorTypes[fCurrentColorType]; | 755 const SkColorType colorType = fColorTypes[fCurrentColorType]; |
| 755 fCurrentColorType++; | |
| 756 | 756 |
| 757 // Make sure we can decode to this color type. | 757 SkAlphaType alphaType = codec->getInfo().alphaType(); |
| 758 SkImageInfo info = codec->getInfo().makeColorType(colorType); | 758 switch (alphaType) { |
| 759 SkAlphaType alphaType; | 759 case kOpaque_SkAlphaType: |
| 760 if (!SkColorTypeValidateAlphaType(colorType, info.alphaType(), | 760 // We only need to test one alpha type (opaque). |
| 761 &alphaType)) { | 761 fCurrentColorType++; |
| 762 continue; | 762 break; |
| 763 } | 763 case kUnpremul_SkAlphaType: |
| 764 if (alphaType != info.alphaType()) { | 764 case kPremul_SkAlphaType: |
| 765 info = info.makeAlphaType(alphaType); | 765 if (0 == fCurrentAlphaType) { |
| 766 // Test unpremul first. |
| 767 alphaType = kUnpremul_SkAlphaType; |
| 768 fCurrentAlphaType++; |
| 769 } else { |
| 770 // Test premul. |
| 771 alphaType = kPremul_SkAlphaType; |
| 772 fCurrentAlphaType = 0; |
| 773 fCurrentColorType++; |
| 774 } |
| 775 break; |
| 776 default: |
| 777 SkASSERT(false); |
| 778 fCurrentColorType++; |
| 779 break; |
| 766 } | 780 } |
| 767 | 781 |
| 782 // Make sure we can decode to this color type and alpha type. |
| 783 SkImageInfo info = |
| 784 codec->getInfo().makeColorType(colorType).makeAlphaType(
alphaType); |
| 768 const size_t rowBytes = info.minRowBytes(); | 785 const size_t rowBytes = info.minRowBytes(); |
| 769 SkAutoMalloc storage(info.getSafeSize(rowBytes)); | 786 SkAutoMalloc storage(info.getSafeSize(rowBytes)); |
| 770 | 787 |
| 771 // Used if fCurrentColorType is kIndex_8_SkColorType | 788 // Used if fCurrentColorType is kIndex_8_SkColorType |
| 772 int colorCount = 256; | 789 int colorCount = 256; |
| 773 SkPMColor colors[256]; | 790 SkPMColor colors[256]; |
| 774 | 791 |
| 775 const SkCodec::Result result = codec->getPixels( | 792 const SkCodec::Result result = codec->getPixels( |
| 776 info, storage.get(), rowBytes, nullptr, colors, | 793 info, storage.get(), rowBytes, nullptr, colors, |
| 777 &colorCount); | 794 &colorCount); |
| 778 switch (result) { | 795 switch (result) { |
| 779 case SkCodec::kSuccess: | 796 case SkCodec::kSuccess: |
| 780 case SkCodec::kIncompleteInput: | 797 case SkCodec::kIncompleteInput: |
| 781 return new CodecBench(SkOSPath::Basename(path.c_str()), | 798 return new CodecBench(SkOSPath::Basename(path.c_str()), |
| 782 encoded, colorType); | 799 encoded, colorType, alphaType); |
| 783 case SkCodec::kInvalidConversion: | 800 case SkCodec::kInvalidConversion: |
| 784 // This is okay. Not all conversions are valid. | 801 // This is okay. Not all conversions are valid. |
| 785 break; | 802 break; |
| 786 default: | 803 default: |
| 787 // This represents some sort of failure. | 804 // This represents some sort of failure. |
| 788 SkASSERT(false); | 805 SkASSERT(false); |
| 789 break; | 806 break; |
| 790 } | 807 } |
| 791 } | 808 } |
| 792 fCurrentColorType = 0; | 809 fCurrentColorType = 0; |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 const char* fSourceType; // What we're benching: bench, GM, SKP, ... | 982 const char* fSourceType; // What we're benching: bench, GM, SKP, ... |
| 966 const char* fBenchType; // How we bench it: micro, recording, playback, ..
. | 983 const char* fBenchType; // How we bench it: micro, recording, playback, ..
. |
| 967 int fCurrentRecording; | 984 int fCurrentRecording; |
| 968 int fCurrentScale; | 985 int fCurrentScale; |
| 969 int fCurrentSKP; | 986 int fCurrentSKP; |
| 970 int fCurrentUseMPD; | 987 int fCurrentUseMPD; |
| 971 int fCurrentCodec; | 988 int fCurrentCodec; |
| 972 int fCurrentImage; | 989 int fCurrentImage; |
| 973 int fCurrentBRDImage; | 990 int fCurrentBRDImage; |
| 974 int fCurrentColorType; | 991 int fCurrentColorType; |
| 992 int fCurrentAlphaType; |
| 975 int fCurrentSubsetType; | 993 int fCurrentSubsetType; |
| 976 int fCurrentBRDStrategy; | 994 int fCurrentBRDStrategy; |
| 977 int fCurrentBRDSampleSize; | 995 int fCurrentBRDSampleSize; |
| 978 int fCurrentAnimSKP; | 996 int fCurrentAnimSKP; |
| 979 }; | 997 }; |
| 980 | 998 |
| 981 // Some runs (mostly, Valgrind) are so slow that the bot framework thinks we've
hung. | 999 // Some runs (mostly, Valgrind) are so slow that the bot framework thinks we've
hung. |
| 982 // This prints something every once in a while so that it knows we're still work
ing. | 1000 // This prints something every once in a while so that it knows we're still work
ing. |
| 983 static void start_keepalive() { | 1001 static void start_keepalive() { |
| 984 struct Loop { | 1002 struct Loop { |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1227 | 1245 |
| 1228 return 0; | 1246 return 0; |
| 1229 } | 1247 } |
| 1230 | 1248 |
| 1231 #if !defined SK_BUILD_FOR_IOS | 1249 #if !defined SK_BUILD_FOR_IOS |
| 1232 int main(int argc, char** argv) { | 1250 int main(int argc, char** argv) { |
| 1233 SkCommandLineFlags::Parse(argc, argv); | 1251 SkCommandLineFlags::Parse(argc, argv); |
| 1234 return nanobench_main(); | 1252 return nanobench_main(); |
| 1235 } | 1253 } |
| 1236 #endif | 1254 #endif |
| OLD | NEW |