1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h"
9e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com#include "SkBitmap.h"
10c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com#include "SkCommandLineFlags.h"
11e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com#include "SkImageDecoder.h"
1263822639e47d08248b8f581ee707bd062bb85feecommit-bot@chromium.org#include "SkOSFile.h"
13e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com#include "SkString.h"
14bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed#include "sk_tool_utils.h"
15e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com
16c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.comDEFINE_string(decodeBenchFilename, "resources/CMYK.jpeg", "Path to image for DecodeBench.");
17c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com
18f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DecodeBench : public Benchmark {
19bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed    const SkColorType fPrefColorType;
20bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed    SkString          fName;
21e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.compublic:
22bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed    DecodeBench(SkColorType ct) : fPrefColorType(ct) {
23a8e2e1504b9af6ba791637f228debaa23953064atfarina        SkString fname = SkOSPath::Basename(FLAGS_decodeBenchFilename[0]);
24bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed        fName.printf("decode_%s_%s", sk_tool_utils::colortype_name(ct), fname.c_str());
25644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org    }
26644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org
27644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org    virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
28644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org        return backend == kNonRendering_Backend;
29e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com    }
30e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com
31e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.comprotected:
32e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com    virtual const char* onGetName() {
33e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com        return fName.c_str();
34e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com    }
35e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com
363361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org    virtual void onDraw(const int loops, SkCanvas*) {
373361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org        for (int i = 0; i < loops; i++) {
38c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com            SkBitmap bm;
39bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed            SkImageDecoder::DecodeFile(FLAGS_decodeBenchFilename[0], &bm, fPrefColorType,
40c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com                                       SkImageDecoder::kDecodePixels_Mode);
41e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com        }
42e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com    }
43e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com
44e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.comprivate:
45f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina    typedef Benchmark INHERITED;
46e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com};
47e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com
48bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereedDEF_BENCH( return new DecodeBench(kN32_SkColorType); )
49bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereedDEF_BENCH( return new DecodeBench(kRGB_565_SkColorType); )
50bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereedDEF_BENCH( return new DecodeBench(kARGB_4444_SkColorType); )
51