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

Side by Side Diff: bench/BlurBench.cpp

Issue 14474004: Adding new bench tests for lighting and blur (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 | « no previous file | bench/LightingBench.cpp » ('j') | bench/LightingBench.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 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 #include "SkBenchmark.h" 8 #include "SkBenchmark.h"
9 #include "SkBlurImageFilter.h"
10 #include "SkBlurMaskFilter.h"
9 #include "SkCanvas.h" 11 #include "SkCanvas.h"
12 #include "SkDevice.h"
10 #include "SkPaint.h" 13 #include "SkPaint.h"
11 #include "SkRandom.h" 14 #include "SkRandom.h"
12 #include "SkShader.h" 15 #include "SkShader.h"
13 #include "SkString.h" 16 #include "SkString.h"
14 #include "SkBlurMaskFilter.h"
15 17
16 #define SMALL SkIntToScalar(2) 18 #define SMALL SkIntToScalar(2)
17 #define REAL SkFloatToScalar(1.5f) 19 #define REAL SkFloatToScalar(1.5f)
18 #define BIG SkIntToScalar(10) 20 #define BIG SkIntToScalar(10)
19 #define REALBIG SkFloatToScalar(100.5f) 21 #define REALBIG SkFloatToScalar(100.5f)
20 22
21 static const char* gStyleName[] = { 23 static const char* gStyleName[] = {
22 "normal", 24 "normal",
23 "solid", 25 "solid",
24 "outer", 26 "outer",
25 "inner" 27 "inner"
26 }; 28 };
27 29
28 class BlurBench : public SkBenchmark { 30 class BlurMaskBench : public SkBenchmark {
Stephen White 2013/04/24 17:35:56 I think we should probably keep this as BlurBench,
29 SkScalar fRadius; 31 SkScalar fRadius;
30 SkBlurMaskFilter::BlurStyle fStyle; 32 SkBlurMaskFilter::BlurStyle fStyle;
31 uint32_t fFlags; 33 uint32_t fFlags;
32 SkString fName; 34 SkString fName;
33 35
34 public: 36 public:
35 BlurBench(void* param, SkScalar rad, SkBlurMaskFilter::BlurStyle bs, uint32_ t flags = 0) : INHERITED(param) { 37 BlurMaskBench(void* param, SkScalar rad, SkBlurMaskFilter::BlurStyle bs, uin t32_t flags = 0) : INHERITED(param) {
36 fRadius = rad; 38 fRadius = rad;
37 fStyle = bs; 39 fStyle = bs;
38 fFlags = flags; 40 fFlags = flags;
39 const char* name = rad > 0 ? gStyleName[bs] : "none"; 41 const char* name = rad > 0 ? gStyleName[bs] : "none";
40 const char* quality = flags & SkBlurMaskFilter::kHighQuality_BlurFlag ? "high_quality" : "low_quality"; 42 const char* quality = flags & SkBlurMaskFilter::kHighQuality_BlurFlag ? "high_quality" : "low_quality";
41 if (SkScalarFraction(rad) != 0) { 43 if (SkScalarFraction(rad) != 0) {
42 fName.printf("blur_%.2f_%s_%s", SkScalarToFloat(rad), name, quality) ; 44 fName.printf("blur_%.2f_%s_%s", SkScalarToFloat(rad), name, quality) ;
43 } else { 45 } else {
44 fName.printf("blur_%d_%s_%s", SkScalarRound(rad), name, quality); 46 fName.printf("blur_%d_%s_%s", SkScalarRound(rad), name, quality);
45 } 47 }
(...skipping 21 matching lines...) Expand all
67 paint.setMaskFilter(mf)->unref(); 69 paint.setMaskFilter(mf)->unref();
68 } 70 }
69 canvas->drawOval(r, paint); 71 canvas->drawOval(r, paint);
70 } 72 }
71 } 73 }
72 74
73 private: 75 private:
74 typedef SkBenchmark INHERITED; 76 typedef SkBenchmark INHERITED;
75 }; 77 };
76 78
77 DEF_BENCH(return new BlurBench(p, SMALL, SkBlurMaskFilter::kNormal_BlurStyle);) 79 #define FILTER_WIDTH_SMALL 32
78 DEF_BENCH(return new BlurBench(p, SMALL, SkBlurMaskFilter::kSolid_BlurStyle);) 80 #define FILTER_HEIGHT_SMALL 32
79 DEF_BENCH(return new BlurBench(p, SMALL, SkBlurMaskFilter::kOuter_BlurStyle);) 81 #define FILTER_WIDTH_LARGE 256
80 DEF_BENCH(return new BlurBench(p, SMALL, SkBlurMaskFilter::kInner_BlurStyle);) 82 #define FILTER_HEIGHT_LARGE 256
81 83
82 DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kNormal_BlurStyle);) 84 class BlurBench : public SkBenchmark {
83 DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kSolid_BlurStyle);) 85 public:
84 DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kOuter_BlurStyle);) 86 BlurBench(void* param, float sigmaX, float sigmaY, bool small) :
Stephen White 2013/04/24 17:35:56 For symmetry, we should probably make these parame
85 DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kInner_BlurStyle);) 87 INHERITED(param), fIsSmall(small), fInitialized(false),
88 fSigmaX(SkFloatToScalar(sigmaX)), fSigmaY(SkFloatToScalar(sigmaY)) {
86 89
87 DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kNormal_BlurStyle); ) 90 if (fIsSmall) {
88 DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kSolid_BlurStyle);) 91 fName.printf("blur_small_%.2f_%.2f", sigmaX, sigmaY);
Stephen White 2013/04/24 17:35:56 If we rename the class to BlurImageFilterBench, th
89 DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kOuter_BlurStyle);) 92 } else {
90 DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kInner_BlurStyle);) 93 fName.printf("blur_large_%.2f_%.2f", sigmaX, sigmaY);
94 }
95 }
91 96
92 DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kNormal_BlurStyle);) 97 protected:
93 DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kSolid_BlurStyle);) 98 virtual const char* onGetName() SK_OVERRIDE {
94 DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kOuter_BlurStyle);) 99 return fName.c_str();
95 DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kInner_BlurStyle);) 100 }
96 101
97 DEF_BENCH(return new BlurBench(p, SMALL, SkBlurMaskFilter::kNormal_BlurStyle, Sk BlurMaskFilter::kHighQuality_BlurFlag);) 102 virtual void onPreDraw() SK_OVERRIDE {
103 if (!fInitialized) {
104 make_checkerboard();
105 fInitialized = true;
106 }
107 }
98 108
99 DEF_BENCH(return new BlurBench(p, BIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBl urMaskFilter::kHighQuality_BlurFlag);) 109 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
110 SkPaint paint;
111 paint.setImageFilter(
112 new SkBlurImageFilter(fSigmaX, fSigmaY))->unref();
113 canvas->drawBitmap(fCheckerboard, 0, 0, &paint);
114 }
100 115
101 DEF_BENCH(return new BlurBench(p, REALBIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 116 private:
117 void make_checkerboard() {
118 const int w = fIsSmall ? FILTER_WIDTH_SMALL : FILTER_WIDTH_LARGE;
119 const int h = fIsSmall ? FILTER_HEIGHT_LARGE : FILTER_HEIGHT_LARGE;
120 fCheckerboard.setConfig(SkBitmap::kARGB_8888_Config, w, h);
121 fCheckerboard.allocPixels();
122 SkDevice device(fCheckerboard);
123 SkCanvas canvas(&device);
124 canvas.clear(0x00000000);
125 SkPaint darkPaint;
126 darkPaint.setColor(0xFF804020);
127 SkPaint lightPaint;
128 lightPaint.setColor(0xFF244484);
129 for (int y = 0; y < h; y += 16) {
130 for (int x = 0; x < w; x += 16) {
131 canvas.save();
132 canvas.translate(SkIntToScalar(x), SkIntToScalar(y));
133 canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
134 canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
135 canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
136 canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
137 canvas.restore();
138 }
139 }
140 }
102 141
103 DEF_BENCH(return new BlurBench(p, REAL, SkBlurMaskFilter::kNormal_BlurStyle, SkB lurMaskFilter::kHighQuality_BlurFlag);) 142 SkString fName;
143 bool fIsSmall;
144 bool fInitialized;
145 SkBitmap fCheckerboard;
146 SkScalar fSigmaX, fSigmaY;
147 typedef SkBenchmark INHERITED;
148 };
104 149
105 DEF_BENCH(return new BlurBench(p, 0, SkBlurMaskFilter::kNormal_BlurStyle);) 150 DEF_BENCH(return new BlurMaskBench(p, SMALL, SkBlurMaskFilter::kNormal_BlurStyle );)
151 DEF_BENCH(return new BlurMaskBench(p, SMALL, SkBlurMaskFilter::kSolid_BlurStyle) ;)
152 DEF_BENCH(return new BlurMaskBench(p, SMALL, SkBlurMaskFilter::kOuter_BlurStyle) ;)
153 DEF_BENCH(return new BlurMaskBench(p, SMALL, SkBlurMaskFilter::kInner_BlurStyle) ;)
154
155 DEF_BENCH(return new BlurMaskBench(p, BIG, SkBlurMaskFilter::kNormal_BlurStyle); )
156 DEF_BENCH(return new BlurMaskBench(p, BIG, SkBlurMaskFilter::kSolid_BlurStyle);)
157 DEF_BENCH(return new BlurMaskBench(p, BIG, SkBlurMaskFilter::kOuter_BlurStyle);)
158 DEF_BENCH(return new BlurMaskBench(p, BIG, SkBlurMaskFilter::kInner_BlurStyle);)
159
160 DEF_BENCH(return new BlurMaskBench(p, REALBIG, SkBlurMaskFilter::kNormal_BlurSty le);)
161 DEF_BENCH(return new BlurMaskBench(p, REALBIG, SkBlurMaskFilter::kSolid_BlurStyl e);)
162 DEF_BENCH(return new BlurMaskBench(p, REALBIG, SkBlurMaskFilter::kOuter_BlurStyl e);)
163 DEF_BENCH(return new BlurMaskBench(p, REALBIG, SkBlurMaskFilter::kInner_BlurStyl e);)
164
165 DEF_BENCH(return new BlurMaskBench(p, REAL, SkBlurMaskFilter::kNormal_BlurStyle) ;)
166 DEF_BENCH(return new BlurMaskBench(p, REAL, SkBlurMaskFilter::kSolid_BlurStyle); )
167 DEF_BENCH(return new BlurMaskBench(p, REAL, SkBlurMaskFilter::kOuter_BlurStyle); )
168 DEF_BENCH(return new BlurMaskBench(p, REAL, SkBlurMaskFilter::kInner_BlurStyle); )
169
170 DEF_BENCH(return new BlurMaskBench(p, SMALL, SkBlurMaskFilter::kNormal_BlurStyle , SkBlurMaskFilter::kHighQuality_BlurFlag);)
171
172 DEF_BENCH(return new BlurMaskBench(p, BIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);)
173
174 DEF_BENCH(return new BlurMaskBench(p, REALBIG, SkBlurMaskFilter::kNormal_BlurSty le, SkBlurMaskFilter::kHighQuality_BlurFlag);)
175
176 DEF_BENCH(return new BlurMaskBench(p, REAL, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);)
177
178 DEF_BENCH(return new BlurMaskBench(p, 0, SkBlurMaskFilter::kNormal_BlurStyle);)
179
180 DEF_BENCH(return new BlurBench(p, 1.0f, 1.0f, true);)
181 DEF_BENCH(return new BlurBench(p, 1.0f, 1.0f, false);)
182 DEF_BENCH(return new BlurBench(p, 10.0f, 10.0f, true);)
183 DEF_BENCH(return new BlurBench(p, 10.0f, 10.0f, false);)
184
OLDNEW
« no previous file with comments | « no previous file | bench/LightingBench.cpp » ('j') | bench/LightingBench.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698