Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: bench/ColorFilterBench.cpp

Issue 14234019: Added a few bench for some image filters (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « bench/BlendBench.cpp ('k') | bench/DisplacementBench.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #include "SkBenchmark.h"
8 #include "SkCanvas.h"
9 #include "SkColorFilterImageFilter.h"
10 #include "SkColorMatrixFilter.h"
11 #include "SkTableColorFilter.h"
12
13 #define FILTER_WIDTH_SMALL SkIntToScalar(32)
14 #define FILTER_HEIGHT_SMALL SkIntToScalar(32)
15 #define FILTER_WIDTH_LARGE SkIntToScalar(256)
16 #define FILTER_HEIGHT_LARGE SkIntToScalar(256)
17
18 class ColorFilterBaseBench : public SkBenchmark {
19
20 public:
21 ColorFilterBaseBench(void* param, bool small) : INHERITED(param), fIsSmall(s mall) {
22 }
23
24 protected:
25 SkRect getFilterRect() const {
26 return isSmall() ? SkRect::MakeWH(FILTER_WIDTH_SMALL, FILTER_HEIGHT_SMAL L) :
27 SkRect::MakeWH(FILTER_WIDTH_LARGE, FILTER_HEIGHT_LARG E);
28 }
29
30 static SkImageFilter* make_brightness(float amount, SkImageFilter* input = N ULL) {
31 SkScalar amount255 = SkScalarMul(SkFloatToScalar(amount), SkIntToScalar( 255));
32 SkScalar matrix[20] = { 1, 0, 0, 0, amount255,
33 0, 1, 0, 0, amount255,
34 0, 0, 1, 0, amount255,
35 0, 0, 0, 1, 0 };
36 SkAutoTUnref<SkColorFilter> filter(new SkColorMatrixFilter(matrix));
37 return SkColorFilterImageFilter::Create(filter, input);
38 }
39
40 static SkImageFilter* make_grayscale(SkImageFilter* input = NULL) {
41 SkScalar matrix[20];
42 memset(matrix, 0, 20 * sizeof(SkScalar));
43 matrix[0] = matrix[5] = matrix[10] = SkFloatToScalar(0.2126f);
44 matrix[1] = matrix[6] = matrix[11] = SkFloatToScalar(0.7152f);
45 matrix[2] = matrix[7] = matrix[12] = SkFloatToScalar(0.0722f);
46 matrix[18] = SkFloatToScalar(1.0f);
47 SkAutoTUnref<SkColorFilter> filter(new SkColorMatrixFilter(matrix));
48 return SkColorFilterImageFilter::Create(filter, input);
49 }
50
51 static SkImageFilter* make_mode_blue(SkImageFilter* input = NULL) {
52 SkAutoTUnref<SkColorFilter> filter(
53 SkColorFilter::CreateModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mod e));
54 return SkColorFilterImageFilter::Create(filter, input);
55 }
56
57 inline bool isSmall() const { return fIsSmall; }
58 private:
59 bool fIsSmall;
60
61 typedef SkBenchmark INHERITED;
62 };
63
64 class ColorFilterDimBrightBench : public ColorFilterBaseBench {
65
66 public:
67 ColorFilterDimBrightBench(void* param, bool small) : INHERITED(param, small) {
68 }
69
70 protected:
71 virtual const char* onGetName() SK_OVERRIDE {
72 return isSmall() ? "colorfilter_dim_bright_small" : "colorfilter_dim_bri ght_large";
73 }
74
75 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
76 SkRect r = getFilterRect();
77 SkPaint paint;
78 paint.setColor(SK_ColorRED);
79 for (float brightness = -1.0f; brightness <= 1.0f; brightness += 0.4f) {
80 SkAutoTUnref<SkImageFilter> dim(make_brightness(-brightness));
81 SkAutoTUnref<SkImageFilter> bright(make_brightness(brightness, dim)) ;
82 paint.setImageFilter(bright);
83 canvas->drawRect(r, paint);
84 }
85 }
86
87 private:
88 typedef ColorFilterBaseBench INHERITED;
89 };
90
91 class ColorFilterBrightGrayBench : public ColorFilterBaseBench {
92
93 public:
94 ColorFilterBrightGrayBench(void* param, bool small) : INHERITED(param, small ) {
95 }
96
97 protected:
98 virtual const char* onGetName() SK_OVERRIDE {
99 return isSmall() ? "colorfilter_bright_gray_small" : "colorfilter_bright _gray_large";
100 }
101
102 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
103 SkRect r = getFilterRect();
104 SkPaint paint;
105 paint.setColor(SK_ColorRED);
106 {
107 SkAutoTUnref<SkImageFilter> brightness(make_brightness(0.9f));
108 SkAutoTUnref<SkImageFilter> grayscale(make_grayscale(brightness));
109 paint.setImageFilter(grayscale);
110 canvas->drawRect(r, paint);
111 }
112 }
113
114 private:
115 typedef ColorFilterBaseBench INHERITED;
116 };
117
118 class ColorFilterGrayBrightBench : public ColorFilterBaseBench {
119
120 public:
121 ColorFilterGrayBrightBench(void* param, bool small) : INHERITED(param, small ) {
122 }
123
124 protected:
125 virtual const char* onGetName() SK_OVERRIDE {
126 return isSmall() ? "colorfilter_gray_bright_small" : "colorfilter_gray_b right_large";
127 }
128
129 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
130 SkRect r = getFilterRect();
131 SkPaint paint;
132 paint.setColor(SK_ColorRED);
133 {
134 SkAutoTUnref<SkImageFilter> grayscale(make_grayscale());
135 SkAutoTUnref<SkImageFilter> brightness(make_brightness(0.9f, graysca le));
136 paint.setImageFilter(brightness);
137 canvas->drawRect(r, paint);
138 }
139 }
140
141 private:
142 typedef ColorFilterBaseBench INHERITED;
143 };
144
145 class ColorFilterBlueBrightBench : public ColorFilterBaseBench {
146
147 public:
148 ColorFilterBlueBrightBench(void* param, bool small) : INHERITED(param, small ) {
149 }
150
151 protected:
152 virtual const char* onGetName() SK_OVERRIDE {
153 return isSmall() ? "colorfilter_blue_bright_small" : "colorfilter_blue_b right_large";
154 }
155
156 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
157 SkRect r = getFilterRect();
158 SkPaint paint;
159 paint.setColor(SK_ColorRED);
160 {
161 SkAutoTUnref<SkImageFilter> blue(make_mode_blue());
162 SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f, blue));
163 paint.setImageFilter(brightness);
164 canvas->drawRect(r, paint);
165 }
166 }
167
168 private:
169 typedef ColorFilterBaseBench INHERITED;
170 };
171
172 class ColorFilterBrightBlueBench : public ColorFilterBaseBench {
173
174 public:
175 ColorFilterBrightBlueBench(void* param, bool small) : INHERITED(param, small ) {
176 }
177
178 protected:
179 virtual const char* onGetName() SK_OVERRIDE {
180 return isSmall() ? "colorfilter_bright_blue_small" : "colorfilter_bright _blue_large";
181 }
182
183 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
184 SkRect r = getFilterRect();
185 SkPaint paint;
186 paint.setColor(SK_ColorRED);
187 {
188 SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f));
189 SkAutoTUnref<SkImageFilter> blue(make_mode_blue(brightness));
190 paint.setImageFilter(blue);
191 canvas->drawRect(r, paint);
192 }
193 }
194
195 private:
196 typedef ColorFilterBaseBench INHERITED;
197 };
198
199 class ColorFilterBrightBench : public ColorFilterBaseBench {
200
201 public:
202 ColorFilterBrightBench(void* param, bool small) : INHERITED(param, small) {
203 }
204
205 protected:
206 virtual const char* onGetName() SK_OVERRIDE {
207 return isSmall() ? "colorfilter_bright_small" : "colorfilter_bright_larg e";
208 }
209
210 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
211 SkRect r = getFilterRect();
212 SkPaint paint;
213 paint.setColor(SK_ColorRED);
214 {
215 SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f));
216 paint.setImageFilter(brightness);
217 canvas->drawRect(r, paint);
218 }
219 }
220
221 private:
222 typedef ColorFilterBaseBench INHERITED;
223 };
224
225 class ColorFilterBlueBench : public ColorFilterBaseBench {
226
227 public:
228 ColorFilterBlueBench(void* param, bool small) : INHERITED(param, small) {
229 }
230
231 protected:
232 virtual const char* onGetName() SK_OVERRIDE {
233 return isSmall() ? "colorfilter_blue_small" : "colorfilter_blue_large";
234 }
235
236 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
237 SkRect r = getFilterRect();
238 SkPaint paint;
239 paint.setColor(SK_ColorRED);
240 {
241 SkAutoTUnref<SkImageFilter> blue(make_mode_blue());
242 paint.setImageFilter(blue);
243 canvas->drawRect(r, paint);
244 }
245 }
246
247 private:
248 typedef ColorFilterBaseBench INHERITED;
249 };
250
251 class ColorFilterGrayBench : public ColorFilterBaseBench {
252
253 public:
254 ColorFilterGrayBench(void* param, bool small) : INHERITED(param, small) {
255 }
256
257 protected:
258 virtual const char* onGetName() SK_OVERRIDE {
259 return isSmall() ? "colorfilter_gray_small" : "colorfilter_gray_large";
260 }
261
262 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
263 SkRect r = getFilterRect();
264 SkPaint paint;
265 paint.setColor(SK_ColorRED);
266 {
267 SkAutoTUnref<SkImageFilter> grayscale(make_grayscale());
268 paint.setImageFilter(grayscale);
269 canvas->drawRect(r, paint);
270 }
271 }
272
273 private:
274 typedef ColorFilterBaseBench INHERITED;
275 };
276
277 class TableColorFilterBench : public ColorFilterBaseBench {
278
279 public:
280 TableColorFilterBench(void* param, bool small) : INHERITED(param, small) {
281 }
282
283 protected:
284 virtual const char* onGetName() SK_OVERRIDE {
285 return isSmall() ? "table_colorfilter_small" : "table_colorfilter_large" ;
286 }
287
288 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
289 SkRect r = getFilterRect();
290 SkPaint paint;
291 paint.setColor(SK_ColorRED);
292 {
293 SkAutoTUnref<SkColorFilter> table_filter(make_table_filter());
294 paint.setColorFilter(table_filter);
295 canvas->drawRect(r, paint);
296 }
297 }
298
299 private:
300 static void fill_table_data(uint8_t table[]) {
301 for (int i = 0; i < 256; ++i) {
302 int n = i >> 5;
303 table[i] = (n << 5) | (n << 2) | (n >> 1);
304 }
305 }
306
307 static SkColorFilter* make_table_filter() {
308 uint8_t table[256]; fill_table_data(table);
309 return SkTableColorFilter::Create(table);
310 }
311
312 typedef ColorFilterBaseBench INHERITED;
313 };
314
315 ///////////////////////////////////////////////////////////////////////////////
316
317 DEF_BENCH( return new ColorFilterDimBrightBench(p, true); )
318 DEF_BENCH( return new ColorFilterBrightGrayBench(p, true); )
319 DEF_BENCH( return new ColorFilterGrayBrightBench(p, true); )
320 DEF_BENCH( return new ColorFilterBlueBrightBench(p, true); )
321 DEF_BENCH( return new ColorFilterBrightBlueBench(p, true); )
322 DEF_BENCH( return new ColorFilterBrightBench(p, true); )
323 DEF_BENCH( return new ColorFilterBlueBench(p, true); )
324 DEF_BENCH( return new ColorFilterGrayBench(p, true); )
325 DEF_BENCH( return new TableColorFilterBench(p, true); )
326
327 DEF_BENCH( return new ColorFilterDimBrightBench(p, false); )
328 DEF_BENCH( return new ColorFilterBrightGrayBench(p, false); )
329 DEF_BENCH( return new ColorFilterGrayBrightBench(p, false); )
330 DEF_BENCH( return new ColorFilterBlueBrightBench(p, false); )
331 DEF_BENCH( return new ColorFilterBrightBlueBench(p, false); )
332 DEF_BENCH( return new ColorFilterBrightBench(p, false); )
333 DEF_BENCH( return new ColorFilterBlueBench(p, false); )
334 DEF_BENCH( return new ColorFilterGrayBench(p, false); )
335 DEF_BENCH( return new TableColorFilterBench(p, false); )
336
OLDNEW
« no previous file with comments | « bench/BlendBench.cpp ('k') | bench/DisplacementBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698