From 84451024bfe06d138629dd7c27cf2ec0f9774dbe Mon Sep 17 00:00:00 2001 From: msarett Date: Thu, 11 Feb 2016 06:45:51 -0800 Subject: Add AndroidCodecBench to time scaled decodes BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1685693003 Review URL: https://codereview.chromium.org/1685693003 --- bench/AndroidCodecBench.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 bench/AndroidCodecBench.cpp (limited to 'bench/AndroidCodecBench.cpp') diff --git a/bench/AndroidCodecBench.cpp b/bench/AndroidCodecBench.cpp new file mode 100644 index 0000000000..97e1176044 --- /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 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 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); + } +} -- cgit v1.2.3