• 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 "SkConfig8888.h"
11 #include "SkString.h"
12 #include "sk_tool_utils.h"
13 
14 class PremulAndUnpremulAlphaOpsBench : public Benchmark {
15     enum {
16         W = 256,
17         H = 256,
18     };
19     SkBitmap fBmp1, fBmp2;
20 
21 public:
PremulAndUnpremulAlphaOpsBench(SkColorType ct)22     PremulAndUnpremulAlphaOpsBench(SkColorType ct) {
23         fColorType = ct;
24         fName.printf("premul_and_unpremul_alpha_%s", sk_tool_utils::colortype_name(ct));
25     }
26 
27 protected:
onGetName()28     const char* onGetName() override {
29         return fName.c_str();
30     }
31 
onDelayedSetup()32     void onDelayedSetup() override {
33         SkImageInfo info = SkImageInfo::Make(W, H, fColorType, kUnpremul_SkAlphaType);
34         fBmp1.allocPixels(info);   // used in writePixels
35 
36         for (int h = 0; h < H; ++h) {
37             for (int w = 0; w < W; ++w) {
38                 // SkColor places A in the right slot for either RGBA or BGRA
39                 *fBmp1.getAddr32(w, h) = SkColorSetARGB(h & 0xFF, w & 0xFF, w & 0xFF, w & 0xFF);
40             }
41         }
42 
43         fBmp2.allocPixels(info);    // used in readPixels()
44     }
45 
onDraw(int loops,SkCanvas * canvas)46     void onDraw(int loops, SkCanvas* canvas) override {
47         canvas->clear(SK_ColorBLACK);
48 
49         for (int loop = 0; loop < loops; ++loop) {
50             // Unpremul -> Premul
51             canvas->writePixels(fBmp1.info(), fBmp1.getPixels(), fBmp1.rowBytes(), 0, 0);
52             // Premul -> Unpremul
53             canvas->readPixels(fBmp2.info(), fBmp2.getPixels(), fBmp2.rowBytes(), 0, 0);
54         }
55     }
56 
57 private:
58     SkColorType fColorType;
59     SkString fName;
60 
61     typedef Benchmark INHERITED;
62 };
63 
64 
65 DEF_BENCH(return new PremulAndUnpremulAlphaOpsBench(kRGBA_8888_SkColorType));
66 DEF_BENCH(return new PremulAndUnpremulAlphaOpsBench(kBGRA_8888_SkColorType));
67