3353ba2b8d01545b39e949f22fc4bf2c97fd1849
[platform/upstream/libSkiaSharp.git] / bench / WritePixelsBench.cpp
1 /*
2  * Copyright 2013 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7
8 #include "Benchmark.h"
9 #include "SkCanvas.h"
10 #include "SkString.h"
11
12 class WritePixelsBench : public Benchmark {
13 public:
14     WritePixelsBench(SkColorType ct, SkAlphaType at)
15         : fColorType(ct)
16         , fAlphaType(at)
17         , fName("writepix")
18     {
19         switch (ct) {
20             case kRGBA_8888_SkColorType:
21                 fName.append("_RGBA");
22                 break;
23             case kBGRA_8888_SkColorType:
24                 fName.append("_BGRA");
25                 break;
26             default:
27                 SkASSERT(0);
28                 break;
29         }
30         switch (at) {
31             case kPremul_SkAlphaType:
32                 fName.append("_PM");
33                 break;
34             case kUnpremul_SkAlphaType:
35                 fName.append("_UPM");
36                 break;
37             default:
38                 SkASSERT(0);
39                 break;
40         }
41     }
42
43 protected:
44     const char* onGetName() SK_OVERRIDE {
45         return fName.c_str();
46     }
47
48     void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
49         SkISize size = canvas->getDeviceSize();
50
51         canvas->clear(0xFFFF0000);
52
53         SkBitmap bmp;
54         bmp.allocN32Pixels(size.width(), size.height());
55         canvas->readPixels(&bmp, 0, 0);
56
57         SkImageInfo info = SkImageInfo::Make(bmp.width(), bmp.height(), fColorType, fAlphaType);
58
59         for (int loop = 0; loop < loops; ++loop) {
60             canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0);
61         }
62     }
63
64 private:
65     SkColorType fColorType;
66     SkAlphaType fAlphaType;
67     SkString    fName;
68
69     typedef Benchmark INHERITED;
70 };
71
72 //////////////////////////////////////////////////////////////////////////////
73
74 DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (kRGBA_8888_SkColorType, kPremul_SkAlphaType)); )
75 DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (kRGBA_8888_SkColorType, kUnpremul_SkAlphaType)); )