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

Side by Side Diff: bench/MatrixBench.cpp

Issue 23876006: Refactoring: get rid of the SkBenchmark void* parameter. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: sync to head 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/Matrix44Bench.cpp ('k') | bench/MatrixConvolutionBench.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 "SkMatrix.h" 9 #include "SkMatrix.h"
10 #include "SkMatrixUtils.h" 10 #include "SkMatrixUtils.h"
11 #include "SkRandom.h" 11 #include "SkRandom.h"
12 #include "SkString.h" 12 #include "SkString.h"
13 13
14 class MatrixBench : public SkBenchmark { 14 class MatrixBench : public SkBenchmark {
15 SkString fName; 15 SkString fName;
16 public: 16 public:
17 MatrixBench(void* param, const char name[]) : INHERITED(param) { 17 MatrixBench(const char name[]) {
18 fName.printf("matrix_%s", name); 18 fName.printf("matrix_%s", name);
19 fIsRendering = false; 19 fIsRendering = false;
20 } 20 }
21 21
22 virtual void performTest() = 0; 22 virtual void performTest() = 0;
23 23
24 protected: 24 protected:
25 virtual int mulLoopCount() const { return 1; } 25 virtual int mulLoopCount() const { return 1; }
26 26
27 virtual const char* onGetName() { 27 virtual const char* onGetName() {
(...skipping 17 matching lines...) Expand all
45 45
46 #define always_do(pred) \ 46 #define always_do(pred) \
47 do { \ 47 do { \
48 if (pred) { \ 48 if (pred) { \
49 ++gMatrixBench_NonStaticGlobal; \ 49 ++gMatrixBench_NonStaticGlobal; \
50 } \ 50 } \
51 } while (0) 51 } while (0)
52 52
53 class EqualsMatrixBench : public MatrixBench { 53 class EqualsMatrixBench : public MatrixBench {
54 public: 54 public:
55 EqualsMatrixBench(void* param) : INHERITED(param, "equals") {} 55 EqualsMatrixBench() : INHERITED("equals") {}
56 protected: 56 protected:
57 virtual void performTest() { 57 virtual void performTest() {
58 SkMatrix m0, m1, m2; 58 SkMatrix m0, m1, m2;
59 59
60 m0.reset(); 60 m0.reset();
61 m1.reset(); 61 m1.reset();
62 m2.reset(); 62 m2.reset();
63 always_do(m0 == m1); 63 always_do(m0 == m1);
64 always_do(m1 == m2); 64 always_do(m1 == m2);
65 always_do(m2 == m0); 65 always_do(m2 == m0);
66 } 66 }
67 private: 67 private:
68 typedef MatrixBench INHERITED; 68 typedef MatrixBench INHERITED;
69 }; 69 };
70 70
71 class ScaleMatrixBench : public MatrixBench { 71 class ScaleMatrixBench : public MatrixBench {
72 public: 72 public:
73 ScaleMatrixBench(void* param) : INHERITED(param, "scale") { 73 ScaleMatrixBench() : INHERITED("scale") {
74 fSX = fSY = SkFloatToScalar(1.5f); 74 fSX = fSY = SkFloatToScalar(1.5f);
75 fM0.reset(); 75 fM0.reset();
76 fM1.setScale(fSX, fSY); 76 fM1.setScale(fSX, fSY);
77 fM2.setTranslate(fSX, fSY); 77 fM2.setTranslate(fSX, fSY);
78 } 78 }
79 protected: 79 protected:
80 virtual void performTest() { 80 virtual void performTest() {
81 SkMatrix m; 81 SkMatrix m;
82 m = fM0; m.preScale(fSX, fSY); 82 m = fM0; m.preScale(fSX, fSY);
83 m = fM1; m.preScale(fSX, fSY); 83 m = fM1; m.preScale(fSX, fSY);
(...skipping 12 matching lines...) Expand all
96 SkRandom rand; 96 SkRandom rand;
97 for (int i = 0; i < 9; i++) { 97 for (int i = 0; i < 9; i++) {
98 array[i] = rand.nextSScalar1(); 98 array[i] = rand.nextSScalar1();
99 } 99 }
100 } 100 }
101 101
102 // Test the performance of setConcat() non-perspective case: 102 // Test the performance of setConcat() non-perspective case:
103 // using floating point precision only. 103 // using floating point precision only.
104 class FloatConcatMatrixBench : public MatrixBench { 104 class FloatConcatMatrixBench : public MatrixBench {
105 public: 105 public:
106 FloatConcatMatrixBench(void* p) : INHERITED(p, "concat_floatfloat") { 106 FloatConcatMatrixBench() : INHERITED("concat_floatfloat") {
107 init9(mya); 107 init9(mya);
108 init9(myb); 108 init9(myb);
109 init9(myr); 109 init9(myr);
110 } 110 }
111 protected: 111 protected:
112 virtual int mulLoopCount() const { return 4; } 112 virtual int mulLoopCount() const { return 4; }
113 113
114 static inline void muladdmul(float a, float b, float c, float d, 114 static inline void muladdmul(float a, float b, float c, float d,
115 float* result) { 115 float* result) {
116 *result = a * b + c * d; 116 *result = a * b + c * d;
(...skipping 22 matching lines...) Expand all
139 139
140 static inline float SkDoubleToFloat(double x) { 140 static inline float SkDoubleToFloat(double x) {
141 return static_cast<float>(x); 141 return static_cast<float>(x);
142 } 142 }
143 143
144 // Test the performance of setConcat() non-perspective case: 144 // Test the performance of setConcat() non-perspective case:
145 // using floating point precision but casting up to float for 145 // using floating point precision but casting up to float for
146 // intermediate results during computations. 146 // intermediate results during computations.
147 class FloatDoubleConcatMatrixBench : public MatrixBench { 147 class FloatDoubleConcatMatrixBench : public MatrixBench {
148 public: 148 public:
149 FloatDoubleConcatMatrixBench(void* p) : INHERITED(p, "concat_floatdouble") { 149 FloatDoubleConcatMatrixBench() : INHERITED("concat_floatdouble") {
150 init9(mya); 150 init9(mya);
151 init9(myb); 151 init9(myb);
152 init9(myr); 152 init9(myr);
153 } 153 }
154 protected: 154 protected:
155 virtual int mulLoopCount() const { return 4; } 155 virtual int mulLoopCount() const { return 4; }
156 156
157 static inline void muladdmul(float a, float b, float c, float d, 157 static inline void muladdmul(float a, float b, float c, float d,
158 float* result) { 158 float* result) {
159 *result = SkDoubleToFloat((double)a * b + (double)c * d); 159 *result = SkDoubleToFloat((double)a * b + (double)c * d);
(...skipping 17 matching lines...) Expand all
177 float mya [9]; 177 float mya [9];
178 float myb [9]; 178 float myb [9];
179 float myr [9]; 179 float myr [9];
180 typedef MatrixBench INHERITED; 180 typedef MatrixBench INHERITED;
181 }; 181 };
182 182
183 // Test the performance of setConcat() non-perspective case: 183 // Test the performance of setConcat() non-perspective case:
184 // using double precision only. 184 // using double precision only.
185 class DoubleConcatMatrixBench : public MatrixBench { 185 class DoubleConcatMatrixBench : public MatrixBench {
186 public: 186 public:
187 DoubleConcatMatrixBench(void* p) : INHERITED(p, "concat_double") { 187 DoubleConcatMatrixBench() : INHERITED("concat_double") {
188 init9(mya); 188 init9(mya);
189 init9(myb); 189 init9(myb);
190 init9(myr); 190 init9(myr);
191 } 191 }
192 protected: 192 protected:
193 virtual int mulLoopCount() const { return 4; } 193 virtual int mulLoopCount() const { return 4; }
194 194
195 static inline void muladdmul(double a, double b, double c, double d, 195 static inline void muladdmul(double a, double b, double c, double d,
196 double* result) { 196 double* result) {
197 *result = a * b + c * d; 197 *result = a * b + c * d;
(...skipping 15 matching lines...) Expand all
213 } 213 }
214 private: 214 private:
215 double mya [9]; 215 double mya [9];
216 double myb [9]; 216 double myb [9];
217 double myr [9]; 217 double myr [9];
218 typedef MatrixBench INHERITED; 218 typedef MatrixBench INHERITED;
219 }; 219 };
220 220
221 class GetTypeMatrixBench : public MatrixBench { 221 class GetTypeMatrixBench : public MatrixBench {
222 public: 222 public:
223 GetTypeMatrixBench(void* param) 223 GetTypeMatrixBench()
224 : INHERITED(param, "gettype") { 224 : INHERITED("gettype") {
225 fArray[0] = (float) fRnd.nextS(); 225 fArray[0] = (float) fRnd.nextS();
226 fArray[1] = (float) fRnd.nextS(); 226 fArray[1] = (float) fRnd.nextS();
227 fArray[2] = (float) fRnd.nextS(); 227 fArray[2] = (float) fRnd.nextS();
228 fArray[3] = (float) fRnd.nextS(); 228 fArray[3] = (float) fRnd.nextS();
229 fArray[4] = (float) fRnd.nextS(); 229 fArray[4] = (float) fRnd.nextS();
230 fArray[5] = (float) fRnd.nextS(); 230 fArray[5] = (float) fRnd.nextS();
231 fArray[6] = (float) fRnd.nextS(); 231 fArray[6] = (float) fRnd.nextS();
232 fArray[7] = (float) fRnd.nextS(); 232 fArray[7] = (float) fRnd.nextS();
233 fArray[8] = (float) fRnd.nextS(); 233 fArray[8] = (float) fRnd.nextS();
234 } 234 }
(...skipping 23 matching lines...) Expand all
258 } 258 }
259 private: 259 private:
260 SkMatrix fMatrix; 260 SkMatrix fMatrix;
261 float fArray[9]; 261 float fArray[9];
262 SkRandom fRnd; 262 SkRandom fRnd;
263 typedef MatrixBench INHERITED; 263 typedef MatrixBench INHERITED;
264 }; 264 };
265 265
266 class ScaleTransMixedMatrixBench : public MatrixBench { 266 class ScaleTransMixedMatrixBench : public MatrixBench {
267 public: 267 public:
268 ScaleTransMixedMatrixBench(void* p) : INHERITED(p, "scaletrans_mixed") { 268 ScaleTransMixedMatrixBench() : INHERITED("scaletrans_mixed") {
269 fMatrix.setAll(fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.n extSScalar1(), 269 fMatrix.setAll(fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.n extSScalar1(),
270 fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.n extSScalar1(), 270 fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.n extSScalar1(),
271 fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.n extSScalar1()); 271 fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.n extSScalar1());
272 int i; 272 int i;
273 for (i = 0; i < kCount; i++) { 273 for (i = 0; i < kCount; i++) {
274 fSrc[i].fX = fRandom.nextSScalar1(); 274 fSrc[i].fX = fRandom.nextSScalar1();
275 fSrc[i].fY = fRandom.nextSScalar1(); 275 fSrc[i].fY = fRandom.nextSScalar1();
276 fDst[i].fX = fRandom.nextSScalar1(); 276 fDst[i].fX = fRandom.nextSScalar1();
277 fDst[i].fY = fRandom.nextSScalar1(); 277 fDst[i].fY = fRandom.nextSScalar1();
278 } 278 }
(...skipping 20 matching lines...) Expand all
299 }; 299 };
300 SkMatrix fMatrix; 300 SkMatrix fMatrix;
301 SkPoint fSrc [kCount]; 301 SkPoint fSrc [kCount];
302 SkPoint fDst [kCount]; 302 SkPoint fDst [kCount];
303 SkRandom fRandom; 303 SkRandom fRandom;
304 typedef MatrixBench INHERITED; 304 typedef MatrixBench INHERITED;
305 }; 305 };
306 306
307 class ScaleTransDoubleMatrixBench : public MatrixBench { 307 class ScaleTransDoubleMatrixBench : public MatrixBench {
308 public: 308 public:
309 ScaleTransDoubleMatrixBench(void* p) : INHERITED(p, "scaletrans_double") { 309 ScaleTransDoubleMatrixBench() : INHERITED("scaletrans_double") {
310 init9(fMatrix); 310 init9(fMatrix);
311 int i; 311 int i;
312 for (i = 0; i < kCount; i++) { 312 for (i = 0; i < kCount; i++) {
313 fSrc[i].fX = fRandom.nextSScalar1(); 313 fSrc[i].fX = fRandom.nextSScalar1();
314 fSrc[i].fY = fRandom.nextSScalar1(); 314 fSrc[i].fY = fRandom.nextSScalar1();
315 fDst[i].fX = fRandom.nextSScalar1(); 315 fDst[i].fX = fRandom.nextSScalar1();
316 fDst[i].fY = fRandom.nextSScalar1(); 316 fDst[i].fY = fRandom.nextSScalar1();
317 } 317 }
318 } 318 }
319 protected: 319 protected:
(...skipping 19 matching lines...) Expand all
339 }; 339 };
340 double fMatrix [9]; 340 double fMatrix [9];
341 SkPoint fSrc [kCount]; 341 SkPoint fSrc [kCount];
342 SkPoint fDst [kCount]; 342 SkPoint fDst [kCount];
343 SkRandom fRandom; 343 SkRandom fRandom;
344 typedef MatrixBench INHERITED; 344 typedef MatrixBench INHERITED;
345 }; 345 };
346 346
347 class DecomposeMatrixBench : public MatrixBench { 347 class DecomposeMatrixBench : public MatrixBench {
348 public: 348 public:
349 DecomposeMatrixBench(void* param) : INHERITED(param, "decompose") {} 349 DecomposeMatrixBench() : INHERITED("decompose") {}
350 350
351 protected: 351 protected:
352 virtual void onPreDraw() { 352 virtual void onPreDraw() {
353 for (int i = 0; i < 10; ++i) { 353 for (int i = 0; i < 10; ++i) {
354 SkScalar rot0 = (fRandom.nextBool()) ? fRandom.nextRangeF(-180, 180) : 0.0f; 354 SkScalar rot0 = (fRandom.nextBool()) ? fRandom.nextRangeF(-180, 180) : 0.0f;
355 SkScalar sx = fRandom.nextRangeF(-3000.f, 3000.f); 355 SkScalar sx = fRandom.nextRangeF(-3000.f, 3000.f);
356 SkScalar sy = (fRandom.nextBool()) ? fRandom.nextRangeF(-3000.f, 300 0.f) : sx; 356 SkScalar sy = (fRandom.nextBool()) ? fRandom.nextRangeF(-3000.f, 300 0.f) : sx;
357 SkScalar rot1 = fRandom.nextRangeF(-180, 180); 357 SkScalar rot1 = fRandom.nextRangeF(-180, 180);
358 fMatrix[i].setRotate(rot0); 358 fMatrix[i].setRotate(rot0);
359 fMatrix[i].postScale(sx, sy); 359 fMatrix[i].postScale(sx, sy);
360 fMatrix[i].postRotate(rot1); 360 fMatrix[i].postRotate(rot1);
361 } 361 }
362 } 362 }
363 virtual void performTest() { 363 virtual void performTest() {
364 SkPoint rotation1, scale, rotation2; 364 SkPoint rotation1, scale, rotation2;
365 for (int i = 0; i < 10; ++i) { 365 for (int i = 0; i < 10; ++i) {
366 (void) SkDecomposeUpper2x2(fMatrix[i], &rotation1, &scale, &rotation 2); 366 (void) SkDecomposeUpper2x2(fMatrix[i], &rotation1, &scale, &rotation 2);
367 } 367 }
368 } 368 }
369 private: 369 private:
370 SkMatrix fMatrix[10]; 370 SkMatrix fMatrix[10];
371 SkRandom fRandom; 371 SkRandom fRandom;
372 typedef MatrixBench INHERITED; 372 typedef MatrixBench INHERITED;
373 }; 373 };
374 374
375 class InvertMapRectMatrixBench : public MatrixBench { 375 class InvertMapRectMatrixBench : public MatrixBench {
376 public: 376 public:
377 InvertMapRectMatrixBench(void* param, const char* name, int flags) 377 InvertMapRectMatrixBench(const char* name, int flags)
378 : INHERITED(param, name) 378 : INHERITED(name)
379 , fFlags(flags) { 379 , fFlags(flags) {
380 fMatrix.reset(); 380 fMatrix.reset();
381 fIteration = 0; 381 fIteration = 0;
382 if (flags & kScale_Flag) { 382 if (flags & kScale_Flag) {
383 fMatrix.postScale(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f)); 383 fMatrix.postScale(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f));
384 } 384 }
385 if (flags & kTranslate_Flag) { 385 if (flags & kTranslate_Flag) {
386 fMatrix.postTranslate(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f)); 386 fMatrix.postTranslate(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f));
387 } 387 }
388 if (flags & kRotate_Flag) { 388 if (flags & kRotate_Flag) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 } 422 }
423 private: 423 private:
424 SkMatrix fMatrix; 424 SkMatrix fMatrix;
425 int fFlags; 425 int fFlags;
426 unsigned fIteration; 426 unsigned fIteration;
427 typedef MatrixBench INHERITED; 427 typedef MatrixBench INHERITED;
428 }; 428 };
429 429
430 /////////////////////////////////////////////////////////////////////////////// 430 ///////////////////////////////////////////////////////////////////////////////
431 431
432 DEF_BENCH( return new EqualsMatrixBench(p); ) 432 DEF_BENCH( return new EqualsMatrixBench(); )
433 DEF_BENCH( return new ScaleMatrixBench(p); ) 433 DEF_BENCH( return new ScaleMatrixBench(); )
434 DEF_BENCH( return new FloatConcatMatrixBench(p); ) 434 DEF_BENCH( return new FloatConcatMatrixBench(); )
435 DEF_BENCH( return new FloatDoubleConcatMatrixBench(p); ) 435 DEF_BENCH( return new FloatDoubleConcatMatrixBench(); )
436 DEF_BENCH( return new DoubleConcatMatrixBench(p); ) 436 DEF_BENCH( return new DoubleConcatMatrixBench(); )
437 DEF_BENCH( return new GetTypeMatrixBench(p); ) 437 DEF_BENCH( return new GetTypeMatrixBench(); )
438 DEF_BENCH( return new DecomposeMatrixBench(p); ) 438 DEF_BENCH( return new DecomposeMatrixBench(); )
439 439
440 DEF_BENCH( return new InvertMapRectMatrixBench(p, "invert_maprect_identity", 0); ) 440 DEF_BENCH( return new InvertMapRectMatrixBench("invert_maprect_identity", 0); )
441 441
442 DEF_BENCH(return new InvertMapRectMatrixBench(p, 442 DEF_BENCH(return new InvertMapRectMatrixBench(
443 "invert_maprect_rectstaysrect", 443 "invert_maprect_rectstaysrect",
444 InvertMapRectMatrixBench::kScale_Flag | 444 InvertMapRectMatrixBench::kScale_Flag |
445 InvertMapRectMatrixBench::kTranslate_Flag); ) 445 InvertMapRectMatrixBench::kTranslate_Flag); )
446 446
447 DEF_BENCH(return new InvertMapRectMatrixBench(p, 447 DEF_BENCH(return new InvertMapRectMatrixBench(
448 "invert_maprect_translate", 448 "invert_maprect_translate",
449 InvertMapRectMatrixBench::kTranslate_Flag); ) 449 InvertMapRectMatrixBench::kTranslate_Flag); )
450 450
451 DEF_BENCH(return new InvertMapRectMatrixBench(p, 451 DEF_BENCH(return new InvertMapRectMatrixBench(
452 "invert_maprect_nonpersp", 452 "invert_maprect_nonpersp",
453 InvertMapRectMatrixBench::kScale_Flag | 453 InvertMapRectMatrixBench::kScale_Flag |
454 InvertMapRectMatrixBench::kRotate_Flag | 454 InvertMapRectMatrixBench::kRotate_Flag |
455 InvertMapRectMatrixBench::kTranslate_Flag); ) 455 InvertMapRectMatrixBench::kTranslate_Flag); )
456 456
457 DEF_BENCH( return new InvertMapRectMatrixBench(p, 457 DEF_BENCH( return new InvertMapRectMatrixBench(
458 "invert_maprect_persp", 458 "invert_maprect_persp",
459 InvertMapRectMatrixBench::kPerspective_Flag); ) 459 InvertMapRectMatrixBench::kPerspective_Flag); )
460 460
461 DEF_BENCH( return new InvertMapRectMatrixBench(p, 461 DEF_BENCH( return new InvertMapRectMatrixBench(
462 "invert_maprect_typemask_rectstaysrect", 462 "invert_maprect_typemask_rectstaysrect",
463 InvertMapRectMatrixBench::kUncachedTypeMask_Flag | 463 InvertMapRectMatrixBench::kUncachedTypeMask_Flag |
464 InvertMapRectMatrixBench::kScale_Flag | 464 InvertMapRectMatrixBench::kScale_Flag |
465 InvertMapRectMatrixBench::kTranslate_Flag); ) 465 InvertMapRectMatrixBench::kTranslate_Flag); )
466 466
467 DEF_BENCH( return new InvertMapRectMatrixBench(p, 467 DEF_BENCH( return new InvertMapRectMatrixBench(
468 "invert_maprect_typemask_nonpersp", 468 "invert_maprect_typemask_nonpersp",
469 InvertMapRectMatrixBench::kUncachedTypeMask_Flag | 469 InvertMapRectMatrixBench::kUncachedTypeMask_Flag |
470 InvertMapRectMatrixBench::kScale_Flag | 470 InvertMapRectMatrixBench::kScale_Flag |
471 InvertMapRectMatrixBench::kRotate_Flag | 471 InvertMapRectMatrixBench::kRotate_Flag |
472 InvertMapRectMatrixBench::kTranslate_Flag); ) 472 InvertMapRectMatrixBench::kTranslate_Flag); )
473 473
474 DEF_BENCH( return new ScaleTransMixedMatrixBench(p); ) 474 DEF_BENCH( return new ScaleTransMixedMatrixBench(); )
475 DEF_BENCH( return new ScaleTransDoubleMatrixBench(p); ) 475 DEF_BENCH( return new ScaleTransDoubleMatrixBench(); )
OLDNEW
« no previous file with comments | « bench/Matrix44Bench.cpp ('k') | bench/MatrixConvolutionBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698