Chromium Code Reviews| Index: bench/AndroidCodecBench.cpp |
| diff --git a/bench/AndroidCodecBench.cpp b/bench/AndroidCodecBench.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..01aae791990a4c0826695773bbbc8388a57a4b08 |
| --- /dev/null |
| +++ b/bench/AndroidCodecBench.cpp |
| @@ -0,0 +1,56 @@ |
| +/* |
| + * Copyright 2015 Google Inc. |
|
scroggo
2016/02/10 16:29:49
nit 2016
msarett
2016/02/11 14:07:15
Done.
|
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "AndroidCodecBench.h" |
| +#include "CodecBenchPriv.h" |
| +#include "SkBitmap.h" |
| +#include "SkAndroidCodec.h" |
| +#include "SkCommandLineFlags.h" |
| +#include "SkOSFile.h" |
| + |
| +AndroidCodecBench::AndroidCodecBench(SkString baseName, SkData* encoded, int sampleSize) |
| + : fData(SkRef(encoded)) |
| + , fSampleSize(sampleSize) |
| +{ |
| + // Parse filename and the color type to give the benchmark a useful name |
| + fName.printf("AndroidCodec_%s_SampleSize%d", baseName.c_str(), sampleSize); |
|
scroggo
2016/02/10 16:29:49
This just occurred to me - should we print the ben
msarett
2016/02/10 20:06:45
Do you think I should change the name to match the
scroggo
2016/02/10 21:13:54
My idea was that the name did not include the type
msarett
2016/02/11 14:07:15
Ahh ok I understand. I think it's a good idea, bu
scroggo
2016/02/11 14:08:54
sgtm
|
| +} |
| + |
| +const char* AndroidCodecBench::onGetName() { |
| + return fName.c_str(); |
| +} |
| + |
| +bool AndroidCodecBench::isSuitableFor(Backend backend) { |
| + return kNonRendering_Backend == backend; |
| +} |
| + |
| +void AndroidCodecBench::onDelayedSetup() { |
| + SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(fData)); |
| + SkISize scaledSize = codec->getSampledDimensions(fSampleSize); |
| + |
| + fInfo = codec->getInfo().makeWH(scaledSize.width(), scaledSize.height()) |
| + .makeColorType(kN32_SkColorType); |
|
scroggo
2016/02/10 16:29:49
why only n32, and only premul?
- edit: looking do
msarett
2016/02/10 20:06:45
Yep that's right
|
| + if (kUnpremul_SkAlphaType == fInfo.alphaType()) { |
| + fInfo = fInfo.makeAlphaType(kPremul_SkAlphaType); |
| + } |
| + |
| + fPixelStorage.reset(fInfo.getSafeSize(fInfo.minRowBytes())); |
| +} |
| + |
| +void AndroidCodecBench::onDraw(int n, SkCanvas* canvas) { |
| + SkAutoTDelete<SkAndroidCodec> codec; |
| + SkAndroidCodec::AndroidOptions options; |
| + options.fSampleSize = fSampleSize; |
| + for (int i = 0; i < n; i++) { |
| + codec.reset(SkAndroidCodec::NewFromData(fData)); |
| +#ifdef SK_DEBUG |
| + const SkCodec::Result result = |
| +#endif |
| + codec->getAndroidPixels(fInfo, fPixelStorage.get(), fInfo.minRowBytes(), &options); |
| + SkASSERT(result == SkCodec::kSuccess || result == SkCodec::kIncompleteInput); |
| + } |
| +} |