1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#include "Benchmark.h"
9#include "SkBitmap.h"
10#include "SkCommandLineFlags.h"
11#include "SkImageDecoder.h"
12#include "SkOSFile.h"
13#include "SkString.h"
14#include "sk_tool_utils.h"
15
16DEFINE_string(decodeBenchFilename, "resources/CMYK.jpeg", "Path to image for DecodeBench.");
17
18class DecodeBench : public Benchmark {
19    const SkColorType fPrefColorType;
20    SkString          fName;
21public:
22    DecodeBench(SkColorType ct) : fPrefColorType(ct) {
23        SkString fname = SkOSPath::SkBasename(FLAGS_decodeBenchFilename[0]);
24        fName.printf("decode_%s_%s", sk_tool_utils::colortype_name(ct), fname.c_str());
25    }
26
27    virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
28        return backend == kNonRendering_Backend;
29    }
30
31protected:
32    virtual const char* onGetName() {
33        return fName.c_str();
34    }
35
36    virtual void onDraw(const int loops, SkCanvas*) {
37        for (int i = 0; i < loops; i++) {
38            SkBitmap bm;
39            SkImageDecoder::DecodeFile(FLAGS_decodeBenchFilename[0], &bm, fPrefColorType,
40                                       SkImageDecoder::kDecodePixels_Mode);
41        }
42    }
43
44private:
45    typedef Benchmark INHERITED;
46};
47
48DEF_BENCH( return new DecodeBench(kN32_SkColorType); )
49DEF_BENCH( return new DecodeBench(kRGB_565_SkColorType); )
50DEF_BENCH( return new DecodeBench(kARGB_4444_SkColorType); )
51