WritePixelsBench.cpp revision c289743864e2ab926a95e617a5cd1d29b26d1825
1
2/*
3 * Copyright 2013 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
9#include "SkBenchmark.h"
10#include "SkCanvas.h"
11#include "SkConfig8888.h"
12#include "SkString.h"
13
14class WritePixelsBench : public SkBenchmark {
15public:
16    WritePixelsBench(void* param, SkCanvas::Config8888 config)
17        : INHERITED(param)
18        , fConfig(config)
19        , fName("writepix") {
20        switch (config) {
21            case SkCanvas::kNative_Premul_Config8888:
22                fName.append("_native_PM");
23                break;
24            case SkCanvas::kNative_Unpremul_Config8888:
25                fName.append("_native_UPM");
26                break;
27            case SkCanvas::kBGRA_Premul_Config8888:
28                fName.append("_bgra_PM");
29                break;
30            case SkCanvas::kBGRA_Unpremul_Config8888:
31                fName.append("_bgra_UPM");
32                break;
33            case SkCanvas::kRGBA_Premul_Config8888:
34                fName.append("_rgba_PM");
35                break;
36            case SkCanvas::kRGBA_Unpremul_Config8888:
37                fName.append("_rgba_UPM");
38                break;
39            default:
40                SK_CRASH();
41                break;
42        }
43    }
44
45protected:
46    virtual const char* onGetName() SK_OVERRIDE {
47        return fName.c_str();
48    }
49
50    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
51        SkISize size = canvas->getDeviceSize();
52
53        canvas->clear(0xFFFF0000);
54
55        SkBitmap bmp;
56        bmp.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
57        canvas->readPixels(&bmp, 0, 0);
58
59        for (int loop = 0; loop < this->getLoops(); ++loop) {
60            canvas->writePixels(bmp, 0, 0, fConfig);
61        }
62    }
63
64private:
65    SkCanvas::Config8888 fConfig;
66    SkString             fName;
67
68    typedef SkBenchmark INHERITED;
69};
70
71//////////////////////////////////////////////////////////////////////////////
72
73DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (p, SkCanvas::kRGBA_Premul_Config8888)); )
74DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (p, SkCanvas::kRGBA_Unpremul_Config8888)); )
75