1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2016 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "bench/AndroidCodecBench.h" 9cb93a386Sopenharmony_ci#include "bench/CodecBenchPriv.h" 10cb93a386Sopenharmony_ci#include "include/codec/SkAndroidCodec.h" 11cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 12cb93a386Sopenharmony_ci#include "src/core/SkOSFile.h" 13cb93a386Sopenharmony_ci#include "tools/flags/CommandLineFlags.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciAndroidCodecBench::AndroidCodecBench(SkString baseName, SkData* encoded, int sampleSize) 16cb93a386Sopenharmony_ci : fData(SkRef(encoded)) 17cb93a386Sopenharmony_ci , fSampleSize(sampleSize) 18cb93a386Sopenharmony_ci{ 19cb93a386Sopenharmony_ci // Parse filename and the color type to give the benchmark a useful name 20cb93a386Sopenharmony_ci fName.printf("AndroidCodec_%s_SampleSize%d", baseName.c_str(), sampleSize); 21cb93a386Sopenharmony_ci} 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ciconst char* AndroidCodecBench::onGetName() { 24cb93a386Sopenharmony_ci return fName.c_str(); 25cb93a386Sopenharmony_ci} 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_cibool AndroidCodecBench::isSuitableFor(Backend backend) { 28cb93a386Sopenharmony_ci return kNonRendering_Backend == backend; 29cb93a386Sopenharmony_ci} 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_civoid AndroidCodecBench::onDelayedSetup() { 32cb93a386Sopenharmony_ci std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::MakeFromData(fData)); 33cb93a386Sopenharmony_ci SkISize scaledSize = codec->getSampledDimensions(fSampleSize); 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci fInfo = codec->getInfo().makeDimensions(scaledSize).makeColorType(kN32_SkColorType); 36cb93a386Sopenharmony_ci if (kUnpremul_SkAlphaType == fInfo.alphaType()) { 37cb93a386Sopenharmony_ci fInfo = fInfo.makeAlphaType(kPremul_SkAlphaType); 38cb93a386Sopenharmony_ci } 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci fPixelStorage.reset(fInfo.computeMinByteSize()); 41cb93a386Sopenharmony_ci} 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_civoid AndroidCodecBench::onDraw(int n, SkCanvas* canvas) { 44cb93a386Sopenharmony_ci std::unique_ptr<SkAndroidCodec> codec; 45cb93a386Sopenharmony_ci SkAndroidCodec::AndroidOptions options; 46cb93a386Sopenharmony_ci options.fSampleSize = fSampleSize; 47cb93a386Sopenharmony_ci for (int i = 0; i < n; i++) { 48cb93a386Sopenharmony_ci codec = SkAndroidCodec::MakeFromData(fData); 49cb93a386Sopenharmony_ci#ifdef SK_DEBUG 50cb93a386Sopenharmony_ci const SkCodec::Result result = 51cb93a386Sopenharmony_ci#endif 52cb93a386Sopenharmony_ci codec->getAndroidPixels(fInfo, fPixelStorage.get(), fInfo.minRowBytes(), &options); 53cb93a386Sopenharmony_ci SkASSERT(result == SkCodec::kSuccess || result == SkCodec::kIncompleteInput); 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci} 56