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:
WritePixelsBench(SkColorType ct,SkAlphaType at)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:
onGetName()44     const char* onGetName() override {
45         return fName.c_str();
46     }
47 
onDraw(const int loops,SkCanvas * canvas)48     void onDraw(const int loops, SkCanvas* canvas) 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)); )
76