/* * 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() { std::unique_ptr codec(SkAndroidCodec::MakeFromData(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.computeMinByteSize()); } void AndroidCodecBench::onDraw(int n, SkCanvas* canvas) { std::unique_ptr codec; SkAndroidCodec::AndroidOptions options; options.fSampleSize = fSampleSize; for (int i = 0; i < n; i++) { codec = SkAndroidCodec::MakeFromData(fData); #ifdef SK_DEBUG const SkCodec::Result result = #endif codec->getAndroidPixels(fInfo, fPixelStorage.get(), fInfo.minRowBytes(), &options); SkASSERT(result == SkCodec::kSuccess || result == SkCodec::kIncompleteInput); } }