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

Side by Side Diff: bench/RectBench.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/ReadPixBench.cpp ('k') | bench/RectoriBench.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 "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkCommandLineFlags.h"
10 #include "SkPaint.h" 11 #include "SkPaint.h"
11 #include "SkRandom.h" 12 #include "SkRandom.h"
13 #include "SkShader.h"
12 #include "SkString.h" 14 #include "SkString.h"
13 #include "SkShader.h" 15
16 DEFINE_double(strokeWidth, -1.0, "If set, use this stroke width in RectBench.");
14 17
15 class RectBench : public SkBenchmark { 18 class RectBench : public SkBenchmark {
16 public: 19 public:
17 int fShift, fStroke; 20 int fShift, fStroke;
18 enum { 21 enum {
19 W = 640, 22 W = 640,
20 H = 480, 23 H = 480,
21 N = SkBENCHLOOP(300) 24 N = 300,
22 }; 25 };
23 SkRect fRects[N]; 26 SkRect fRects[N];
24 SkColor fColors[N]; 27 SkColor fColors[N];
25 28
26 RectBench(void* param, int shift, int stroke = 0) 29 RectBench(void* param, int shift, int stroke = 0)
27 : INHERITED(param) 30 : INHERITED(param)
28 , fShift(shift) 31 , fShift(shift)
29 , fStroke(stroke) { 32 , fStroke(stroke) {
30 SkRandom rand; 33 SkRandom rand;
31 const SkScalar offset = SK_Scalar1/3; 34 const SkScalar offset = SK_Scalar1/3;
(...skipping 27 matching lines...) Expand all
59 c->drawRect(r, p); 62 c->drawRect(r, p);
60 } 63 }
61 64
62 virtual const char* onGetName() { return computeName("rects"); } 65 virtual const char* onGetName() { return computeName("rects"); }
63 virtual void onDraw(SkCanvas* canvas) { 66 virtual void onDraw(SkCanvas* canvas) {
64 SkPaint paint; 67 SkPaint paint;
65 if (fStroke > 0) { 68 if (fStroke > 0) {
66 paint.setStyle(SkPaint::kStroke_Style); 69 paint.setStyle(SkPaint::kStroke_Style);
67 paint.setStrokeWidth(SkIntToScalar(fStroke)); 70 paint.setStrokeWidth(SkIntToScalar(fStroke));
68 } 71 }
69 for (int i = 0; i < N; i++) { 72 for (int i = 0; i < this->getLoops(); i++) {
70 paint.setColor(fColors[i]); 73 paint.setColor(fColors[i % N]);
71 this->setupPaint(&paint); 74 this->setupPaint(&paint);
72 this->drawThisRect(canvas, fRects[i], paint); 75 this->drawThisRect(canvas, fRects[i % N], paint);
73 } 76 }
74 } 77 }
75 private: 78 private:
76 typedef SkBenchmark INHERITED; 79 typedef SkBenchmark INHERITED;
77 }; 80 };
78 81
79 class SrcModeRectBench : public RectBench { 82 class SrcModeRectBench : public RectBench {
80 public: 83 public:
81 SrcModeRectBench(void* param) : INHERITED(param, 1, 0) { 84 SrcModeRectBench(void* param) : INHERITED(param, 1, 0) {
82 fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); 85 fMode = SkXfermode::Create(SkXfermode::kSrc_Mode);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 fName = name; 140 fName = name;
138 } 141 }
139 142
140 protected: 143 protected:
141 virtual void onDraw(SkCanvas* canvas) { 144 virtual void onDraw(SkCanvas* canvas) {
142 SkScalar gSizes[] = { 145 SkScalar gSizes[] = {
143 SkIntToScalar(7), 0 146 SkIntToScalar(7), 0
144 }; 147 };
145 size_t sizes = SK_ARRAY_COUNT(gSizes); 148 size_t sizes = SK_ARRAY_COUNT(gSizes);
146 149
147 if (this->hasStrokeWidth()) { 150 if (FLAGS_strokeWidth >= 0) {
148 gSizes[0] = this->getStrokeWidth(); 151 gSizes[0] = FLAGS_strokeWidth;
149 sizes = 1; 152 sizes = 1;
150 } 153 }
151 154
152 SkPaint paint; 155 SkPaint paint;
153 paint.setStrokeCap(SkPaint::kRound_Cap); 156 paint.setStrokeCap(SkPaint::kRound_Cap);
154 157
155 for (size_t i = 0; i < sizes; i++) { 158 for (int loop = 0; loop < this->getLoops(); loop++) {
156 paint.setStrokeWidth(gSizes[i]); 159 for (size_t i = 0; i < sizes; i++) {
157 this->setupPaint(&paint); 160 paint.setStrokeWidth(gSizes[i]);
158 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); 161 this->setupPaint(&paint);
159 paint.setColor(fColors[i]); 162 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), pain t);
163 paint.setColor(fColors[i % N]);
164 }
160 } 165 }
161 } 166 }
162 virtual const char* onGetName() { return fName; } 167 virtual const char* onGetName() { return fName; }
163 }; 168 };
164 169
165 class AARectBench : public SkBenchmark { 170 class AARectBench : public SkBenchmark {
166 public: 171 public:
167 enum { 172 enum {
168 W = 640, 173 W = 640,
169 H = 480, 174 H = 480,
(...skipping 13 matching lines...) Expand all
183 virtual void onDraw(SkCanvas* canvas) { 188 virtual void onDraw(SkCanvas* canvas) {
184 static const SkScalar kHalfRectSize = SkFloatToScalar(0.75f); 189 static const SkScalar kHalfRectSize = SkFloatToScalar(0.75f);
185 190
186 SkPaint paint; 191 SkPaint paint;
187 this->setupPaint(&paint); 192 this->setupPaint(&paint);
188 paint.setAntiAlias(true); 193 paint.setAntiAlias(true);
189 paint.setColor(SK_ColorBLACK); 194 paint.setColor(SK_ColorBLACK);
190 SkRect r = { -kHalfRectSize, -kHalfRectSize, kHalfRectSize, kHalfRectSiz e }; 195 SkRect r = { -kHalfRectSize, -kHalfRectSize, kHalfRectSize, kHalfRectSiz e };
191 int rot = 0; 196 int rot = 0;
192 197
193 // Draw small aa rects in a grid across the screen 198 for (int i = 0; i < this->getLoops(); i++) {
194 for (SkScalar y = kHalfRectSize+SK_Scalar1; y < H; y += 2*kHalfRectSize+ 2) { 199 // Draw small aa rects in a grid across the screen
195 for (SkScalar x = kHalfRectSize+SK_Scalar1; x < W; x += 2*kHalfRectS ize+2) { 200 for (SkScalar y = kHalfRectSize+SK_Scalar1; y < H; y += 2*kHalfRectS ize+2) {
196 canvas->save(); 201 for (SkScalar x = kHalfRectSize+SK_Scalar1; x < W; x += 2*kHalfR ectSize+2) {
197 canvas->translate(x, y); 202 canvas->save();
203 canvas->translate(x, y);
198 204
199 if (fRotate) { 205 if (fRotate) {
200 SkMatrix rotate; 206 SkMatrix rotate;
201 rotate.setRotate(SkIntToScalar(rot)); 207 rotate.setRotate(SkIntToScalar(rot));
202 canvas->concat(rotate); 208 canvas->concat(rotate);
203 rot += 10; 209 rot += 10;
210 }
211
212 canvas->drawRect(r, paint);
213 canvas->restore();
204 } 214 }
205
206 canvas->drawRect(r, paint);
207 canvas->restore();
208 } 215 }
209 } 216 }
210 217
211 } 218 }
212 private: 219 private:
213 bool fRotate; 220 bool fRotate;
214 typedef SkBenchmark INHERITED; 221 typedef SkBenchmark INHERITED;
215 }; 222 };
216 223
217 /******************************************************************************* 224 /*******************************************************************************
(...skipping 17 matching lines...) Expand all
235 fName = name; 242 fName = name;
236 } 243 }
237 244
238 protected: 245 protected:
239 virtual void onDraw(SkCanvas* canvas) { 246 virtual void onDraw(SkCanvas* canvas) {
240 SkScalar gSizes[] = { 247 SkScalar gSizes[] = {
241 SkIntToScalar(13), SkIntToScalar(24) 248 SkIntToScalar(13), SkIntToScalar(24)
242 }; 249 };
243 size_t sizes = SK_ARRAY_COUNT(gSizes); 250 size_t sizes = SK_ARRAY_COUNT(gSizes);
244 251
245 if (this->hasStrokeWidth()) { 252 if (FLAGS_strokeWidth >= 0) {
246 gSizes[0] = this->getStrokeWidth(); 253 gSizes[0] = FLAGS_strokeWidth;
247 sizes = 1; 254 sizes = 1;
248 } 255 }
249 SkRandom rand; 256 SkRandom rand;
250 SkColor color = 0xFF000000; 257 SkColor color = 0xFF000000;
251 U8CPU alpha = 0xFF; 258 U8CPU alpha = 0xFF;
252 SkPaint paint; 259 SkPaint paint;
253 paint.setStrokeCap(SkPaint::kRound_Cap); 260 paint.setStrokeCap(SkPaint::kRound_Cap);
254 if (_type == KMaskShader) { 261 if (_type == KMaskShader) {
255 SkBitmap srcBM; 262 SkBitmap srcBM;
256 srcBM.setConfig(SkBitmap::kARGB_8888_Config, 10, 1); 263 srcBM.setConfig(SkBitmap::kARGB_8888_Config, 10, 1);
257 srcBM.allocPixels(); 264 srcBM.allocPixels();
258 srcBM.eraseColor(0xFF00FF00); 265 srcBM.eraseColor(0xFF00FF00);
259 266
260 SkShader* s; 267 SkShader* s;
261 s = SkShader::CreateBitmapShader(srcBM, SkShader::kClamp_TileMode, 268 s = SkShader::CreateBitmapShader(srcBM, SkShader::kClamp_TileMode,
262 SkShader::kClamp_TileMode); 269 SkShader::kClamp_TileMode);
263 paint.setShader(s)->unref(); 270 paint.setShader(s)->unref();
264 } 271 }
265 for (size_t i = 0; i < sizes; i++) { 272 for (int loop = 0; loop < this->getLoops(); loop++) {
266 switch (_type) { 273 for (size_t i = 0; i < sizes; i++) {
267 case kMaskOpaque: 274 switch (_type) {
268 color = fColors[i]; 275 case kMaskOpaque:
269 alpha = 0xFF; 276 color = fColors[i];
270 break; 277 alpha = 0xFF;
271 case kMaskBlack: 278 break;
272 alpha = 0xFF; 279 case kMaskBlack:
273 color = 0xFF000000; 280 alpha = 0xFF;
274 break; 281 color = 0xFF000000;
275 case kMaskColor: 282 break;
276 color = fColors[i]; 283 case kMaskColor:
277 alpha = rand.nextU() & 255; 284 color = fColors[i];
278 break; 285 alpha = rand.nextU() & 255;
279 case KMaskShader: 286 break;
280 break; 287 case KMaskShader:
281 } 288 break;
282 paint.setStrokeWidth(gSizes[i]); 289 }
283 this->setupPaint(&paint); 290 paint.setStrokeWidth(gSizes[i]);
284 paint.setColor(color); 291 this->setupPaint(&paint);
285 paint.setAlpha(alpha); 292 paint.setColor(color);
286 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); 293 paint.setAlpha(alpha);
287 } 294 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), pain t);
295 }
296 }
288 } 297 }
289 virtual const char* onGetName() { return fName; } 298 virtual const char* onGetName() { return fName; }
290 private: 299 private:
291 typedef RectBench INHERITED; 300 typedef RectBench INHERITED;
292 kMaskType _type; 301 kMaskType _type;
293 }; 302 };
294 303
295 304
296 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1)); ) 305 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1)); )
297 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1, 4)); ) 306 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1, 4)); )
(...skipping 27 matching lines...) Expand all
325 BlitMaskBench::kMaskBlack, "maskblack") 334 BlitMaskBench::kMaskBlack, "maskblack")
326 ); ) 335 ); )
327 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, 336 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench,
328 (p, SkCanvas::kPoints_PointMode, 337 (p, SkCanvas::kPoints_PointMode,
329 BlitMaskBench::kMaskColor, "maskcolor") 338 BlitMaskBench::kMaskColor, "maskcolor")
330 ); ) 339 ); )
331 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, 340 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench,
332 (p, SkCanvas::kPoints_PointMode, 341 (p, SkCanvas::kPoints_PointMode,
333 BlitMaskBench::KMaskShader, "maskshader") 342 BlitMaskBench::KMaskShader, "maskshader")
334 ); ) 343 ); )
OLDNEW
« no previous file with comments | « bench/ReadPixBench.cpp ('k') | bench/RectoriBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698