OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkBenchmark.h" | 9 #include "SkBenchmark.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
11 #include "SkPaint.h" | 11 #include "SkPaint.h" |
12 #include "SkRandom.h" | 12 #include "SkRandom.h" |
13 #include "SkString.h" | 13 #include "SkString.h" |
14 #include "SkXfermode.h" | 14 #include "SkXfermode.h" |
| 15 #include "SkLumaXfermode.h" |
15 | 16 |
16 // Benchmark that draws non-AA rects with an SkXfermode::Mode | 17 // Benchmark that draws non-AA rects with an SkXfermode::Mode |
17 class XfermodeBench : public SkBenchmark { | 18 class XfermodeBench : public SkBenchmark { |
18 public: | 19 public: |
19 XfermodeBench(void* param, SkXfermode::Mode mode) : SkBenchmark(param) { | 20 XfermodeBench(void* param, SkXfermode::Mode mode) : SkBenchmark(param) { |
20 fXfermode.reset(SkXfermode::Create(mode)); | 21 fXfermode.reset(SkXfermode::Create(mode)); |
21 SkASSERT(NULL != fXfermode.get() || SkXfermode::kSrcOver_Mode == mode); | 22 SkASSERT(NULL != fXfermode.get() || SkXfermode::kSrcOver_Mode == mode); |
22 fName.printf("Xfermode_%s", SkXfermode::ModeName(mode)); | 23 fName.printf("Xfermode_%s", SkXfermode::ModeName(mode)); |
23 } | 24 } |
24 | 25 |
| 26 XfermodeBench(void* param, SkXfermode* xferMode, const char* name) |
| 27 : SkBenchmark(param) { |
| 28 SkASSERT(NULL != xferMode); |
| 29 fXfermode.reset(xferMode); |
| 30 fName.printf("Xfermode_%s", name); |
| 31 } |
| 32 |
25 protected: | 33 protected: |
26 virtual const char* onGetName() SK_OVERRIDE { return fName.c_str(); } | 34 virtual const char* onGetName() SK_OVERRIDE { return fName.c_str(); } |
27 | 35 |
28 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 36 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
29 SkISize size = canvas->getDeviceSize(); | 37 SkISize size = canvas->getDeviceSize(); |
30 SkMWCRandom random; | 38 SkMWCRandom random; |
31 for (int i = 0; i < kNumRects; ++i) { | 39 for (int i = 0; i < kNumRects; ++i) { |
32 SkPaint paint; | 40 SkPaint paint; |
33 paint.setXfermode(fXfermode.get()); | 41 paint.setXfermode(fXfermode.get()); |
34 paint.setColor(random.nextU()); | 42 paint.setColor(random.nextU()); |
(...skipping 16 matching lines...) Expand all Loading... |
51 kMaxSize = 100, | 59 kMaxSize = 100, |
52 }; | 60 }; |
53 SkAutoTUnref<SkXfermode> fXfermode; | 61 SkAutoTUnref<SkXfermode> fXfermode; |
54 SkString fName; | 62 SkString fName; |
55 | 63 |
56 typedef SkBenchmark INHERITED; | 64 typedef SkBenchmark INHERITED; |
57 }; | 65 }; |
58 | 66 |
59 ////////////////////////////////////////////////////////////////////////////// | 67 ////////////////////////////////////////////////////////////////////////////// |
60 | 68 |
61 static SkBenchmark* Fact00(void* p) { return new XfermodeBench(p, SkXfermode::kC
lear_Mode); } | 69 #define CONCAT_I(x, y) x ## y |
62 static SkBenchmark* Fact01(void* p) { return new XfermodeBench(p, SkXfermode::kS
rc_Mode); } | 70 #define CONCAT(x, y) CONCAT_I(x, y) // allow for macro expansion |
63 static SkBenchmark* Fact02(void* p) { return new XfermodeBench(p, SkXfermode::kD
st_Mode); } | 71 #define BENCH(...) \ |
64 static SkBenchmark* Fact03(void* p) { return new XfermodeBench(p, SkXfermode::kS
rcOver_Mode); } | 72 static SkBenchmark* CONCAT(Fact, __LINE__)(void *p) { return new XfermodeBen
ch(p, __VA_ARGS__); };\ |
65 static SkBenchmark* Fact04(void* p) { return new XfermodeBench(p, SkXfermode::kD
stOver_Mode); } | 73 static BenchRegistry CONCAT(gReg, __LINE__)(CONCAT(Fact, __LINE__)); |
66 static SkBenchmark* Fact05(void* p) { return new XfermodeBench(p, SkXfermode::kS
rcIn_Mode); } | |
67 static SkBenchmark* Fact06(void* p) { return new XfermodeBench(p, SkXfermode::kD
stIn_Mode); } | |
68 static SkBenchmark* Fact07(void* p) { return new XfermodeBench(p, SkXfermode::kS
rcOut_Mode); } | |
69 static SkBenchmark* Fact08(void* p) { return new XfermodeBench(p, SkXfermode::kD
stOut_Mode); } | |
70 static SkBenchmark* Fact09(void* p) { return new XfermodeBench(p, SkXfermode::kS
rcATop_Mode); } | |
71 static SkBenchmark* Fact10(void* p) { return new XfermodeBench(p, SkXfermode::kD
stATop_Mode); } | |
72 static SkBenchmark* Fact11(void* p) { return new XfermodeBench(p, SkXfermode::kX
or_Mode); } | |
73 static SkBenchmark* Fact12(void* p) { return new XfermodeBench(p, SkXfermode::kP
lus_Mode); } | |
74 static SkBenchmark* Fact13(void* p) { return new XfermodeBench(p, SkXfermode::kM
odulate_Mode); } | |
75 static SkBenchmark* Fact14(void* p) { return new XfermodeBench(p, SkXfermode::kS
creen_Mode); } | |
76 static SkBenchmark* Fact15(void* p) { return new XfermodeBench(p, SkXfermode::kO
verlay_Mode); } | |
77 static SkBenchmark* Fact16(void* p) { return new XfermodeBench(p, SkXfermode::kD
arken_Mode); } | |
78 static SkBenchmark* Fact17(void* p) { return new XfermodeBench(p, SkXfermode::kL
ighten_Mode); } | |
79 static SkBenchmark* Fact18(void* p) { return new XfermodeBench(p, SkXfermode::kC
olorDodge_Mode); } | |
80 static SkBenchmark* Fact19(void* p) { return new XfermodeBench(p, SkXfermode::kC
olorBurn_Mode); } | |
81 static SkBenchmark* Fact20(void* p) { return new XfermodeBench(p, SkXfermode::kH
ardLight_Mode); } | |
82 static SkBenchmark* Fact21(void* p) { return new XfermodeBench(p, SkXfermode::kS
oftLight_Mode); } | |
83 static SkBenchmark* Fact22(void* p) { return new XfermodeBench(p, SkXfermode::kD
ifference_Mode); } | |
84 static SkBenchmark* Fact23(void* p) { return new XfermodeBench(p, SkXfermode::kE
xclusion_Mode); } | |
85 static SkBenchmark* Fact24(void* p) { return new XfermodeBench(p, SkXfermode::kM
ultiply_Mode); } | |
86 static SkBenchmark* Fact25(void* p) { return new XfermodeBench(p, SkXfermode::kH
ue_Mode); } | |
87 static SkBenchmark* Fact26(void* p) { return new XfermodeBench(p, SkXfermode::kS
aturation_Mode); } | |
88 static SkBenchmark* Fact27(void* p) { return new XfermodeBench(p, SkXfermode::kC
olor_Mode); } | |
89 static SkBenchmark* Fact28(void* p) { return new XfermodeBench(p, SkXfermode::kL
uminosity_Mode); } | |
90 | 74 |
91 static BenchRegistry gReg00(Fact00); | 75 BENCH(SkXfermode::kClear_Mode) |
92 static BenchRegistry gReg01(Fact01); | 76 BENCH(SkXfermode::kSrc_Mode) |
93 static BenchRegistry gReg02(Fact02); | 77 BENCH(SkXfermode::kDst_Mode) |
94 static BenchRegistry gReg03(Fact03); | 78 BENCH(SkXfermode::kSrcOver_Mode) |
95 static BenchRegistry gReg04(Fact04); | 79 BENCH(SkXfermode::kDstOver_Mode) |
96 static BenchRegistry gReg05(Fact05); | 80 BENCH(SkXfermode::kSrcIn_Mode) |
97 static BenchRegistry gReg06(Fact06); | 81 BENCH(SkXfermode::kDstIn_Mode) |
98 static BenchRegistry gReg07(Fact07); | 82 BENCH(SkXfermode::kSrcOut_Mode) |
99 static BenchRegistry gReg08(Fact08); | 83 BENCH(SkXfermode::kDstOut_Mode) |
100 static BenchRegistry gReg09(Fact09); | 84 BENCH(SkXfermode::kSrcATop_Mode) |
101 static BenchRegistry gReg10(Fact10); | 85 BENCH(SkXfermode::kDstATop_Mode) |
102 static BenchRegistry gReg11(Fact11); | 86 BENCH(SkXfermode::kXor_Mode) |
103 static BenchRegistry gReg12(Fact12); | 87 |
104 static BenchRegistry gReg13(Fact13); | 88 BENCH(SkXfermode::kPlus_Mode) |
105 static BenchRegistry gReg14(Fact14); | 89 BENCH(SkXfermode::kModulate_Mode) |
106 static BenchRegistry gReg15(Fact15); | 90 BENCH(SkXfermode::kScreen_Mode) |
107 static BenchRegistry gReg16(Fact16); | 91 |
108 static BenchRegistry gReg17(Fact17); | 92 BENCH(SkXfermode::kOverlay_Mode) |
109 static BenchRegistry gReg18(Fact18); | 93 BENCH(SkXfermode::kDarken_Mode) |
110 static BenchRegistry gReg19(Fact19); | 94 BENCH(SkXfermode::kLighten_Mode) |
111 static BenchRegistry gReg20(Fact20); | 95 BENCH(SkXfermode::kColorDodge_Mode) |
112 static BenchRegistry gReg21(Fact21); | 96 BENCH(SkXfermode::kColorBurn_Mode) |
113 static BenchRegistry gReg22(Fact22); | 97 BENCH(SkXfermode::kHardLight_Mode) |
114 static BenchRegistry gReg23(Fact23); | 98 BENCH(SkXfermode::kSoftLight_Mode) |
115 static BenchRegistry gReg24(Fact24); | 99 BENCH(SkXfermode::kDifference_Mode) |
116 static BenchRegistry gReg25(Fact25); | 100 BENCH(SkXfermode::kExclusion_Mode) |
117 static BenchRegistry gReg26(Fact26); | 101 BENCH(SkXfermode::kMultiply_Mode) |
118 static BenchRegistry gReg27(Fact27); | 102 |
119 static BenchRegistry gReg28(Fact28); | 103 BENCH(SkXfermode::kHue_Mode) |
| 104 BENCH(SkXfermode::kSaturation_Mode) |
| 105 BENCH(SkXfermode::kColor_Mode) |
| 106 BENCH(SkXfermode::kLuminosity_Mode) |
| 107 |
| 108 BENCH(SkLumaMaskXfermode::Create(SkXfermode::kSrcIn_Mode), "SrcInLuma") |
| 109 BENCH(SkLumaMaskXfermode::Create(SkXfermode::kDstIn_Mode), "DstInLuma") |
OLD | NEW |