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 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
736 SKPAnimationBench::CreateZoomAnimation(fZoomMax, fZoomPeriod Ms)); | 736 SKPAnimationBench::CreateZoomAnimation(fZoomMax, fZoomPeriod Ms)); |
737 return new SKPAnimationBench(name.c_str(), pic.get(), fClip, ani mation, | 737 return new SKPAnimationBench(name.c_str(), pic.get(), fClip, ani mation, |
738 FLAGS_loopSKP); | 738 FLAGS_loopSKP); |
739 } | 739 } |
740 } | 740 } |
741 | 741 |
742 for (; fCurrentCodec < fImages.count(); fCurrentCodec++) { | 742 for (; fCurrentCodec < fImages.count(); fCurrentCodec++) { |
743 fSourceType = "image"; | 743 fSourceType = "image"; |
744 fBenchType = "skcodec"; | 744 fBenchType = "skcodec"; |
745 const SkString& path = fImages[fCurrentCodec]; | 745 const SkString& path = fImages[fCurrentCodec]; |
746 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path.c_str())) { | |
msarett
2016/01/11 19:55:49
I should have noticed this on my review, but this
scroggo
2016/02/03 15:30:00
Proposed fix in crrev.com/1663103002
| |
747 continue; | |
748 } | |
746 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); | 749 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
747 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); | 750 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); |
748 if (!codec) { | 751 if (!codec) { |
749 // Nothing to time. | 752 // Nothing to time. |
750 SkDebugf("Cannot find codec for %s\n", path.c_str()); | 753 SkDebugf("Cannot find codec for %s\n", path.c_str()); |
751 continue; | 754 continue; |
752 } | 755 } |
753 | 756 |
754 while (fCurrentColorType < fColorTypes.count()) { | 757 while (fCurrentColorType < fColorTypes.count()) { |
755 const SkColorType colorType = fColorTypes[fCurrentColorType]; | 758 const SkColorType colorType = fColorTypes[fCurrentColorType]; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
803 default: | 806 default: |
804 // This represents some sort of failure. | 807 // This represents some sort of failure. |
805 SkASSERT(false); | 808 SkASSERT(false); |
806 break; | 809 break; |
807 } | 810 } |
808 } | 811 } |
809 fCurrentColorType = 0; | 812 fCurrentColorType = 0; |
810 } | 813 } |
811 | 814 |
812 // Run the DecodingBenches | 815 // Run the DecodingBenches |
813 while (fCurrentImage < fImages.count()) { | 816 for (; fCurrentImage < fImages.count(); fCurrentImage++) { |
814 fSourceType = "image"; | 817 fSourceType = "image"; |
815 fBenchType = "skimagedecoder"; | 818 fBenchType = "skimagedecoder"; |
819 const SkString& path = fImages[fCurrentImage]; | |
820 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path.c_str())) { | |
821 continue; | |
822 } | |
816 while (fCurrentColorType < fColorTypes.count()) { | 823 while (fCurrentColorType < fColorTypes.count()) { |
817 const SkString& path = fImages[fCurrentImage]; | |
818 SkColorType colorType = fColorTypes[fCurrentColorType]; | 824 SkColorType colorType = fColorTypes[fCurrentColorType]; |
819 fCurrentColorType++; | 825 fCurrentColorType++; |
820 // Check if the image decodes to the right color type | 826 // Check if the image decodes to the right color type |
821 // before creating the benchmark | 827 // before creating the benchmark |
822 SkBitmap bitmap; | 828 SkBitmap bitmap; |
823 if (SkImageDecoder::DecodeFile(path.c_str(), &bitmap, | 829 if (SkImageDecoder::DecodeFile(path.c_str(), &bitmap, |
824 colorType, SkImageDecoder::kDecodePixels_Mode) | 830 colorType, SkImageDecoder::kDecodePixels_Mode) |
825 && bitmap.colorType() == colorType) { | 831 && bitmap.colorType() == colorType) { |
826 return new DecodingBench(path, colorType); | 832 return new DecodingBench(path, colorType); |
827 } | 833 } |
828 } | 834 } |
829 fCurrentColorType = 0; | 835 fCurrentColorType = 0; |
830 fCurrentImage++; | |
831 } | 836 } |
832 | 837 |
833 // Run the BRDBenches | 838 // Run the BRDBenches |
834 // We will benchmark multiple BRD strategies. | 839 // We will benchmark multiple BRD strategies. |
835 static const struct { | 840 static const struct { |
836 SkBitmapRegionDecoder::Strategy fStrategy; | 841 SkBitmapRegionDecoder::Strategy fStrategy; |
837 const char* fName; | 842 const char* fName; |
838 } strategies[] = { | 843 } strategies[] = { |
839 { SkBitmapRegionDecoder::kCanvas_Strategy, "BRD_canvas" }, | 844 { SkBitmapRegionDecoder::kCanvas_Strategy, "BRD_canvas" }, |
840 { SkBitmapRegionDecoder::kAndroidCodec_Strategy, "BRD_android_codec" }, | 845 { SkBitmapRegionDecoder::kAndroidCodec_Strategy, "BRD_android_codec" }, |
841 }; | 846 }; |
842 | 847 |
843 // We intend to create benchmarks that model the use cases in | 848 // We intend to create benchmarks that model the use cases in |
844 // android/libraries/social/tiledimage. In this library, an image is de coded in 512x512 | 849 // android/libraries/social/tiledimage. In this library, an image is de coded in 512x512 |
845 // tiles. The image can be translated freely, so the location of a tile may be anywhere in | 850 // tiles. The image can be translated freely, so the location of a tile may be anywhere in |
846 // the image. For that reason, we will benchmark decodes in five repres entative locations | 851 // the image. For that reason, we will benchmark decodes in five repres entative locations |
847 // in the image. Additionally, this use case utilizes power of two scal ing, so we will | 852 // in the image. Additionally, this use case utilizes power of two scal ing, so we will |
848 // test on power of two sample sizes. The output tile is always 512x512 , so, when a | 853 // test on power of two sample sizes. The output tile is always 512x512 , so, when a |
849 // sampleSize is used, the size of the subset that is decoded is always | 854 // sampleSize is used, the size of the subset that is decoded is always |
850 // (sampleSize*512)x(sampleSize*512). | 855 // (sampleSize*512)x(sampleSize*512). |
851 // There are a few good reasons to only test on power of two sample size s at this time: | 856 // There are a few good reasons to only test on power of two sample size s at this time: |
852 // JPEG decodes using kOriginal_Strategy are broken for non-powers o f two. | 857 // JPEG decodes using kOriginal_Strategy are broken for non-powers o f two. |
853 // https://bug.skia.org/4319 | 858 // https://bug.skia.org/4319 |
854 // All use cases we are aware of only scale by powers of two. | 859 // All use cases we are aware of only scale by powers of two. |
855 // PNG decodes use the indicated sampling strategy regardless of the sample size, so | 860 // PNG decodes use the indicated sampling strategy regardless of the sample size, so |
856 // these tests are sufficient to provide good coverage of our sc aling options. | 861 // these tests are sufficient to provide good coverage of our sc aling options. |
857 const uint32_t sampleSizes[] = { 1, 2, 4, 8, 16, 32, 64 }; | 862 const uint32_t sampleSizes[] = { 1, 2, 4, 8, 16, 32, 64 }; |
858 const uint32_t minOutputSize = 512; | 863 const uint32_t minOutputSize = 512; |
859 while (fCurrentBRDImage < fImages.count()) { | 864 for (; fCurrentBRDImage < fImages.count(); fCurrentBRDImage++) { |
865 const SkString& path = fImages[fCurrentBRDImage]; | |
866 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path.c_str())) { | |
867 continue; | |
868 } | |
860 while (fCurrentBRDStrategy < (int) SK_ARRAY_COUNT(strategies)) { | 869 while (fCurrentBRDStrategy < (int) SK_ARRAY_COUNT(strategies)) { |
861 fSourceType = "image"; | 870 fSourceType = "image"; |
862 fBenchType = strategies[fCurrentBRDStrategy].fName; | 871 fBenchType = strategies[fCurrentBRDStrategy].fName; |
863 | 872 |
864 const SkString& path = fImages[fCurrentBRDImage]; | |
865 const SkBitmapRegionDecoder::Strategy strategy = | 873 const SkBitmapRegionDecoder::Strategy strategy = |
866 strategies[fCurrentBRDStrategy].fStrategy; | 874 strategies[fCurrentBRDStrategy].fStrategy; |
867 | 875 |
868 while (fCurrentColorType < fColorTypes.count()) { | 876 while (fCurrentColorType < fColorTypes.count()) { |
869 while (fCurrentBRDSampleSize < (int) SK_ARRAY_COUNT(sampleSi zes)) { | 877 while (fCurrentBRDSampleSize < (int) SK_ARRAY_COUNT(sampleSi zes)) { |
870 while (fCurrentSubsetType <= kLastSingle_SubsetType) { | 878 while (fCurrentSubsetType <= kLastSingle_SubsetType) { |
871 | 879 |
872 | 880 |
873 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName (path.c_str())); | 881 SkAutoTUnref<SkData> encoded(SkData::NewFromFileName (path.c_str())); |
874 const SkColorType colorType = fColorTypes[fCurrentCo lorType]; | 882 const SkColorType colorType = fColorTypes[fCurrentCo lorType]; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
920 fCurrentSubsetType = 0; | 928 fCurrentSubsetType = 0; |
921 fCurrentBRDSampleSize++; | 929 fCurrentBRDSampleSize++; |
922 } | 930 } |
923 fCurrentBRDSampleSize = 0; | 931 fCurrentBRDSampleSize = 0; |
924 fCurrentColorType++; | 932 fCurrentColorType++; |
925 } | 933 } |
926 fCurrentColorType = 0; | 934 fCurrentColorType = 0; |
927 fCurrentBRDStrategy++; | 935 fCurrentBRDStrategy++; |
928 } | 936 } |
929 fCurrentBRDStrategy = 0; | 937 fCurrentBRDStrategy = 0; |
930 fCurrentBRDImage++; | |
931 } | 938 } |
932 | 939 |
933 return nullptr; | 940 return nullptr; |
934 } | 941 } |
935 | 942 |
936 void fillCurrentOptions(ResultsWriter* log) const { | 943 void fillCurrentOptions(ResultsWriter* log) const { |
937 log->configOption("source_type", fSourceType); | 944 log->configOption("source_type", fSourceType); |
938 log->configOption("bench_type", fBenchType); | 945 log->configOption("bench_type", fBenchType); |
939 if (0 == strcmp(fSourceType, "skp")) { | 946 if (0 == strcmp(fSourceType, "skp")) { |
940 log->configOption("clip", | 947 log->configOption("clip", |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1245 | 1252 |
1246 return 0; | 1253 return 0; |
1247 } | 1254 } |
1248 | 1255 |
1249 #if !defined SK_BUILD_FOR_IOS | 1256 #if !defined SK_BUILD_FOR_IOS |
1250 int main(int argc, char** argv) { | 1257 int main(int argc, char** argv) { |
1251 SkCommandLineFlags::Parse(argc, argv); | 1258 SkCommandLineFlags::Parse(argc, argv); |
1252 return nanobench_main(); | 1259 return nanobench_main(); |
1253 } | 1260 } |
1254 #endif | 1261 #endif |
OLD | NEW |