• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     virtual const char* onGetName() SK_OVERRIDE {
45         return fName.c_str();
46     }
47 
onDraw(const int loops,SkCanvas * canvas)48     virtual 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 = bmp.info();
58         info.fColorType = fColorType;
59         info.fAlphaType = fAlphaType;
60 
61         for (int loop = 0; loop < loops; ++loop) {
62             canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0);
63         }
64     }
65 
66 private:
67     SkColorType fColorType;
68     SkAlphaType fAlphaType;
69     SkString    fName;
70 
71     typedef Benchmark INHERITED;
72 };
73 
74 //////////////////////////////////////////////////////////////////////////////
75 
76 DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (kRGBA_8888_SkColorType, kPremul_SkAlphaType)); )
77 DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (kRGBA_8888_SkColorType, kUnpremul_SkAlphaType)); )
78