180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBenchmark.h" 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBitmap.h" 100a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#include "SkCommandLineFlags.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkImageDecoder.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 140a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerDEFINE_string(decodeBenchFilename, "resources/CMYK.jpeg", "Path to image for DecodeBench."); 150a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const char* gConfigName[] = { 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru "ERROR", "a1", "a8", "index8", "565", "4444", "8888" 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DecodeBench : public SkBenchmark { 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBitmap::Config fPrefConfig; 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fName; 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 240a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger DecodeBench(SkBitmap::Config c) { 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fPrefConfig = c; 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 270a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger const char* fname = strrchr(FLAGS_decodeBenchFilename[0], '/'); 280a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger if (fname) { 290a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger fname++; // skip the slash 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fName.printf("decode_%s_%s", gConfigName[c], fname); 32910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger } 33910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger 34910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 35910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger return backend == kNonRendering_Backend; 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual const char* onGetName() { 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fName.c_str(); 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 43910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger virtual void onDraw(const int loops, SkCanvas*) { 44910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger for (int i = 0; i < loops; i++) { 450a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger SkBitmap bm; 460a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger SkImageDecoder::DecodeFile(FLAGS_decodeBenchFilename[0], 470a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger &bm, 480a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger fPrefConfig, 490a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger SkImageDecoder::kDecodePixels_Mode); 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru typedef SkBenchmark INHERITED; 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 570a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerDEF_BENCH( return new DecodeBench(SkBitmap::kARGB_8888_Config); ) 580a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerDEF_BENCH( return new DecodeBench(SkBitmap::kRGB_565_Config); ) 590a657bbc2c6fc9daf699942e023050536d5ec95fDerek SollenbergerDEF_BENCH( return new DecodeBench(SkBitmap::kARGB_4444_Config); ) 60