| Index: bench/AndroidCodecBench.cpp
|
| diff --git a/bench/AndroidCodecBench.cpp b/bench/AndroidCodecBench.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..97e11760440443f8bc43f68a9e79285027c329e4
|
| --- /dev/null
|
| +++ b/bench/AndroidCodecBench.cpp
|
| @@ -0,0 +1,56 @@
|
| +/*
|
| + * Copyright 2016 Google Inc.
|
| + *
|
| + * 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);
|
| +}
|
| +
|
| +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);
|
| + 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);
|
| + }
|
| +}
|
|
|