11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 857382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed#include "SkBenchmark.h" 957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed#include "SkBitmap.h" 1057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed#include "SkImageDecoder.h" 1157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed#include "SkString.h" 1257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 1357382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic const char* gConfigName[] = { 1457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed "ERROR", "a1", "a8", "index8", "565", "4444", "8888" 1557382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed}; 1657382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 1757382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedclass DecodeBench : public SkBenchmark { 1857382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed const char* fFilename; 1957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed SkBitmap::Config fPrefConfig; 2057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed SkString fName; 211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger enum { N = SkBENCHLOOP(10) }; 2257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedpublic: 2357382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed DecodeBench(void* param, SkBitmap::Config c) : SkBenchmark(param) { 2457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed fFilename = this->findDefine("decode-filename"); 2557382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed fPrefConfig = c; 2657382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 2757382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed const char* fname = NULL; 2857382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed if (fFilename) { 2957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed fname = strrchr(fFilename, '/'); 3057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed if (fname) { 3157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed fname += 1; // skip the slash 3257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed } 3357382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed } 3457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed fName.printf("decode_%s_%s", gConfigName[c], fname); 3557382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed } 3657382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 3757382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedprotected: 3857382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed virtual const char* onGetName() { 3957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed return fName.c_str(); 4057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed } 4157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 4257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed virtual void onDraw(SkCanvas* canvas) { 4335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger if (fFilename) { 4435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger for (int i = 0; i < N; i++) { 4535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkBitmap bm; 4635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkImageDecoder::DecodeFile(fFilename, &bm, fPrefConfig, 4735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger SkImageDecoder::kDecodePixels_Mode); 4835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger } 4957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed } 5057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed } 5157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 5257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedprivate: 5357382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed typedef SkBenchmark INHERITED; 5457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed}; 5557382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 5657382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic SkBenchmark* Fact0(void* p) { return new DecodeBench(p, SkBitmap::kARGB_8888_Config); } 5757382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic SkBenchmark* Fact1(void* p) { return new DecodeBench(p, SkBitmap::kRGB_565_Config); } 5857382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic SkBenchmark* Fact2(void* p) { return new DecodeBench(p, SkBitmap::kARGB_4444_Config); } 5957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed 6057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic BenchRegistry gReg0(Fact0); 6157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic BenchRegistry gReg1(Fact1); 6257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedstatic BenchRegistry gReg2(Fact2); 63