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

Side by Side Diff: bench/GradientBench.cpp

Issue 23478013: Major bench refactoring. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: merge with head agani Created 7 years, 3 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/GrMemoryPoolBench.cpp ('k') | bench/HairlinePathBench.cpp » ('j') | no next file with comments »
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 "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 SkDEBUGFAIL("unknown geometry type"); 152 SkDEBUGFAIL("unknown geometry type");
153 return "error"; 153 return "error";
154 } 154 }
155 } 155 }
156 156
157 /////////////////////////////////////////////////////////////////////////////// 157 ///////////////////////////////////////////////////////////////////////////////
158 158
159 class GradientBench : public SkBenchmark { 159 class GradientBench : public SkBenchmark {
160 SkString fName; 160 SkString fName;
161 SkShader* fShader; 161 SkShader* fShader;
162 int fCount; 162 int fRepeat;
163 enum { 163 enum {
164 W = 400, 164 W = 400,
165 H = 400, 165 H = 400,
166 N = 1
167 }; 166 };
168 public: 167 public:
169 GradientBench(void* param, GradType gradType, 168 GradientBench(void* param, GradType gradType,
170 GradData data = gGradData[0], 169 GradData data = gGradData[0],
171 SkShader::TileMode tm = SkShader::kClamp_TileMode, 170 SkShader::TileMode tm = SkShader::kClamp_TileMode,
172 GeomType geomType = kRect_GeomType, 171 GeomType geomType = kRect_GeomType,
173 float scale = 1.0f 172 float scale = 1.0f
174 ) 173 )
175 : INHERITED(param) { 174 : INHERITED(param) {
176 fName.printf("gradient_%s_%s", gGrads[gradType].fName, 175 fName.printf("gradient_%s_%s", gGrads[gradType].fName,
177 tilemodename(tm)); 176 tilemodename(tm));
178 if (geomType != kRect_GeomType) { 177 if (geomType != kRect_GeomType) {
179 fName.append("_"); 178 fName.append("_");
180 fName.append(geomtypename(geomType)); 179 fName.append(geomtypename(geomType));
181 } 180 }
182 181
183 fName.append(data.fName); 182 fName.append(data.fName);
184 183
185 const SkPoint pts[2] = { 184 const SkPoint pts[2] = {
186 { 0, 0 }, 185 { 0, 0 },
187 { SkIntToScalar(W), SkIntToScalar(H) } 186 { SkIntToScalar(W), SkIntToScalar(H) }
188 }; 187 };
189 188
190 fCount = SkBENCHLOOP(N * gGrads[gradType].fRepeat); 189 fRepeat = gGrads[gradType].fRepeat;
191 fShader = gGrads[gradType].fMaker(pts, data, tm, NULL, scale); 190 fShader = gGrads[gradType].fMaker(pts, data, tm, NULL, scale);
192 fGeomType = geomType; 191 fGeomType = geomType;
193 } 192 }
194 193
195 virtual ~GradientBench() { 194 virtual ~GradientBench() {
196 fShader->unref(); 195 fShader->unref();
197 } 196 }
198 197
199 protected: 198 protected:
200 virtual const char* onGetName() { 199 virtual const char* onGetName() {
201 return fName.c_str(); 200 return fName.c_str();
202 } 201 }
203 202
204 virtual void onDraw(SkCanvas* canvas) { 203 virtual void onDraw(SkCanvas* canvas) {
205 SkPaint paint; 204 SkPaint paint;
206 this->setupPaint(&paint); 205 this->setupPaint(&paint);
207 206
208 paint.setShader(fShader); 207 paint.setShader(fShader);
209 208
210 SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) }; 209 SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) };
211 for (int i = 0; i < fCount; i++) { 210 for (int i = 0; i < this->getLoops() * fRepeat; i++) {
212 switch (fGeomType) { 211 switch (fGeomType) {
213 case kRect_GeomType: 212 case kRect_GeomType:
214 canvas->drawRect(r, paint); 213 canvas->drawRect(r, paint);
215 break; 214 break;
216 case kOval_GeomType: 215 case kOval_GeomType:
217 canvas->drawOval(r, paint); 216 canvas->drawOval(r, paint);
218 break; 217 break;
219 } 218 }
220 } 219 }
221 } 220 }
(...skipping 22 matching lines...) Expand all
244 virtual void onDraw(SkCanvas* canvas) { 243 virtual void onDraw(SkCanvas* canvas) {
245 SkPaint paint; 244 SkPaint paint;
246 this->setupPaint(&paint); 245 this->setupPaint(&paint);
247 246
248 const SkRect r = { 0, 0, SkIntToScalar(4), SkIntToScalar(4) }; 247 const SkRect r = { 0, 0, SkIntToScalar(4), SkIntToScalar(4) };
249 const SkPoint pts[] = { 248 const SkPoint pts[] = {
250 { 0, 0 }, 249 { 0, 0 },
251 { SkIntToScalar(100), SkIntToScalar(100) }, 250 { SkIntToScalar(100), SkIntToScalar(100) },
252 }; 251 };
253 252
254 for (int i = 0; i < SkBENCHLOOP(1000); i++) { 253 for (int i = 0; i < this->getLoops(); i++) {
255 const int gray = i % 256; 254 const int gray = i % 256;
256 const int alpha = fHasAlpha ? gray : 0xFF; 255 const int alpha = fHasAlpha ? gray : 0xFF;
257 SkColor colors[] = { 256 SkColor colors[] = {
258 SK_ColorBLACK, 257 SK_ColorBLACK,
259 SkColorSetARGB(alpha, gray, gray, gray), 258 SkColorSetARGB(alpha, gray, gray, gray),
260 SK_ColorWHITE }; 259 SK_ColorWHITE };
261 SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 260 SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL,
262 SK_ARRAY_COUNT(colors), 261 SK_ARRAY_COUNT(colors),
263 SkShader::kClamp_TileMo de); 262 SkShader::kClamp_TileMo de);
264 paint.setShader(s)->unref(); 263 paint.setShader(s)->unref();
(...skipping 21 matching lines...) Expand all
286 DEF_BENCH( return new GradientBench(p, kSweep_GradType); ) 285 DEF_BENCH( return new GradientBench(p, kSweep_GradType); )
287 DEF_BENCH( return new GradientBench(p, kSweep_GradType, gGradData[1]); ) 286 DEF_BENCH( return new GradientBench(p, kSweep_GradType, gGradData[1]); )
288 DEF_BENCH( return new GradientBench(p, kRadial2_GradType); ) 287 DEF_BENCH( return new GradientBench(p, kRadial2_GradType); )
289 DEF_BENCH( return new GradientBench(p, kRadial2_GradType, gGradData[1]); ) 288 DEF_BENCH( return new GradientBench(p, kRadial2_GradType, gGradData[1]); )
290 DEF_BENCH( return new GradientBench(p, kRadial2_GradType, gGradData[0], SkShader ::kMirror_TileMode); ) 289 DEF_BENCH( return new GradientBench(p, kRadial2_GradType, gGradData[0], SkShader ::kMirror_TileMode); )
291 DEF_BENCH( return new GradientBench(p, kConical_GradType); ) 290 DEF_BENCH( return new GradientBench(p, kConical_GradType); )
292 DEF_BENCH( return new GradientBench(p, kConical_GradType, gGradData[1]); ) 291 DEF_BENCH( return new GradientBench(p, kConical_GradType, gGradData[1]); )
293 292
294 DEF_BENCH( return new Gradient2Bench(p, false); ) 293 DEF_BENCH( return new Gradient2Bench(p, false); )
295 DEF_BENCH( return new Gradient2Bench(p, true); ) 294 DEF_BENCH( return new Gradient2Bench(p, true); )
OLDNEW
« no previous file with comments | « bench/GrMemoryPoolBench.cpp ('k') | bench/HairlinePathBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698