Index: bench/nanobench.cpp |
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp |
index 4d8ba4497de889a3acbbb4f66db5db71856579f8..a5c3ca11c8aaf8514b7091adee2ac5bcf0f14b29 100644 |
--- a/bench/nanobench.cpp |
+++ b/bench/nanobench.cpp |
@@ -9,6 +9,7 @@ |
#include "nanobench.h" |
+#include "AndroidCodecBench.h" |
#include "Benchmark.h" |
#include "BitmapRegionDecoderBench.h" |
#include "CodecBench.h" |
@@ -22,6 +23,7 @@ |
#include "SKPBench.h" |
#include "Stats.h" |
+#include "SkAndroidCodec.h" |
#include "SkBitmapRegionDecoder.h" |
#include "SkBBoxHierarchy.h" |
#include "SkCanvas.h" |
@@ -546,12 +548,13 @@ public: |
, fCurrentSKP(0) |
, fCurrentUseMPD(0) |
, fCurrentCodec(0) |
+ , fCurrentAndroidCodec(0) |
, fCurrentBRDImage(0) |
, fCurrentColorType(0) |
, fCurrentAlphaType(0) |
, fCurrentSubsetType(0) |
, fCurrentBRDStrategy(0) |
- , fCurrentBRDSampleSize(0) |
+ , fCurrentSampleSize(0) |
, fCurrentAnimSKP(0) { |
for (int i = 0; i < FLAGS_skps.count(); i++) { |
if (SkStrEndsWith(FLAGS_skps[i], ".skp")) { |
@@ -797,6 +800,37 @@ public: |
fCurrentColorType = 0; |
} |
+ // Run AndroidCodecBenches |
+ const int sampleSizes[] = { 2, 4, 8 }; |
+ for (; fCurrentAndroidCodec < fImages.count(); fCurrentAndroidCodec++) { |
+ fSourceType = "image"; |
+ fBenchType = "skandroidcodec"; |
+ |
+ const SkString& path = fImages[fCurrentAndroidCodec]; |
+ if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path.c_str())) { |
+ continue; |
+ } |
+ SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
+ SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(encoded)); |
+ if (!codec) { |
+ // Nothing to time. |
+ SkDebugf("Cannot find codec for %s\n", path.c_str()); |
+ continue; |
+ } |
+ |
+ while (fCurrentSampleSize < (int) SK_ARRAY_COUNT(sampleSizes)) { |
+ int sampleSize = sampleSizes[fCurrentSampleSize]; |
+ fCurrentSampleSize++; |
+ if (10 * sampleSize > SkTMin(codec->getInfo().width(), codec->getInfo().height())) { |
+ // Avoid benchmarking scaled decodes of already small images. |
+ break; |
+ } |
+ |
+ return new AndroidCodecBench(SkOSPath::Basename(path.c_str()), encoded, sampleSize); |
+ } |
+ fCurrentSampleSize = 0; |
+ } |
+ |
// Run the BRDBenches |
// We will benchmark multiple BRD strategies. |
static const struct { |
@@ -816,12 +850,10 @@ public: |
// sampleSize is used, the size of the subset that is decoded is always |
// (sampleSize*512)x(sampleSize*512). |
// There are a few good reasons to only test on power of two sample sizes at this time: |
- // JPEG decodes using kOriginal_Strategy are broken for non-powers of two. |
- // https://bug.skia.org/4319 |
// All use cases we are aware of only scale by powers of two. |
// PNG decodes use the indicated sampling strategy regardless of the sample size, so |
// these tests are sufficient to provide good coverage of our scaling options. |
- const uint32_t sampleSizes[] = { 1, 2, 4, 8, 16, 32, 64 }; |
+ const uint32_t brdSampleSizes[] = { 1, 2, 4, 8, 16 }; |
const uint32_t minOutputSize = 512; |
for (; fCurrentBRDImage < fImages.count(); fCurrentBRDImage++) { |
const SkString& path = fImages[fCurrentBRDImage]; |
@@ -836,13 +868,12 @@ public: |
strategies[fCurrentBRDStrategy].fStrategy; |
while (fCurrentColorType < fColorTypes.count()) { |
- while (fCurrentBRDSampleSize < (int) SK_ARRAY_COUNT(sampleSizes)) { |
+ while (fCurrentSampleSize < (int) SK_ARRAY_COUNT(brdSampleSizes)) { |
while (fCurrentSubsetType <= kLastSingle_SubsetType) { |
- |
SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
const SkColorType colorType = fColorTypes[fCurrentColorType]; |
- uint32_t sampleSize = sampleSizes[fCurrentBRDSampleSize]; |
+ uint32_t sampleSize = brdSampleSizes[fCurrentSampleSize]; |
int currentSubsetType = fCurrentSubsetType++; |
int width = 0; |
@@ -888,9 +919,9 @@ public: |
strategy, colorType, sampleSize, subset); |
} |
fCurrentSubsetType = 0; |
- fCurrentBRDSampleSize++; |
+ fCurrentSampleSize++; |
} |
- fCurrentBRDSampleSize = 0; |
+ fCurrentSampleSize = 0; |
fCurrentColorType++; |
} |
fCurrentColorType = 0; |
@@ -955,12 +986,13 @@ private: |
int fCurrentSKP; |
int fCurrentUseMPD; |
int fCurrentCodec; |
+ int fCurrentAndroidCodec; |
int fCurrentBRDImage; |
int fCurrentColorType; |
int fCurrentAlphaType; |
int fCurrentSubsetType; |
int fCurrentBRDStrategy; |
- int fCurrentBRDSampleSize; |
+ int fCurrentSampleSize; |
int fCurrentAnimSKP; |
}; |