OLD | NEW |
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 "SkRandom.h" | 11 #include "SkRandom.h" |
11 #include "SkString.h" | 12 #include "SkString.h" |
12 | 13 |
13 class MatrixBench : public SkBenchmark { | 14 class MatrixBench : public SkBenchmark { |
14 SkString fName; | 15 SkString fName; |
15 enum { N = 100000 }; | 16 enum { N = 100000 }; |
16 public: | 17 public: |
17 MatrixBench(void* param, const char name[]) : INHERITED(param) { | 18 MatrixBench(void* param, const char name[]) : INHERITED(param) { |
18 fName.printf("matrix_%s", name); | 19 fName.printf("matrix_%s", name); |
19 fIsRendering = false; | 20 fIsRendering = false; |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 enum { | 339 enum { |
339 kCount = SkBENCHLOOP(16) | 340 kCount = SkBENCHLOOP(16) |
340 }; | 341 }; |
341 double fMatrix [9]; | 342 double fMatrix [9]; |
342 SkPoint fSrc [16]; | 343 SkPoint fSrc [16]; |
343 SkPoint fDst [16]; | 344 SkPoint fDst [16]; |
344 SkRandom fRandom; | 345 SkRandom fRandom; |
345 typedef MatrixBench INHERITED; | 346 typedef MatrixBench INHERITED; |
346 }; | 347 }; |
347 | 348 |
| 349 class DecomposeMatrixBench : public MatrixBench { |
| 350 public: |
| 351 DecomposeMatrixBench(void* param) : INHERITED(param, "decompose") {} |
| 352 |
| 353 protected: |
| 354 virtual void onPreDraw() { |
| 355 for (int i = 0; i < 10; ++i) { |
| 356 SkScalar rot0 = (fRandom.nextBool()) ? fRandom.nextRangeF(-180, 180)
: 0.0f; |
| 357 SkScalar sx = fRandom.nextRangeF(-3000.f, 3000.f); |
| 358 SkScalar sy = (fRandom.nextBool()) ? fRandom.nextRangeF(-3000.f, 300
0.f) : sx; |
| 359 SkScalar rot1 = fRandom.nextRangeF(-180, 180); |
| 360 fMatrix[i].setRotate(rot0); |
| 361 fMatrix[i].postScale(sx, sy); |
| 362 fMatrix[i].postRotate(rot1); |
| 363 } |
| 364 } |
| 365 virtual void performTest() { |
| 366 SkPoint rotation1, scale, rotation2; |
| 367 for (int i = 0; i < 10; ++i) { |
| 368 (void) SkDecomposeUpper2x2(fMatrix[i], &rotation1, &scale, &rotation
2); |
| 369 } |
| 370 } |
| 371 private: |
| 372 SkMatrix fMatrix[10]; |
| 373 SkMWCRandom fRandom; |
| 374 typedef MatrixBench INHERITED; |
| 375 }; |
| 376 |
348 class InvertMapRectMatrixBench : public MatrixBench { | 377 class InvertMapRectMatrixBench : public MatrixBench { |
349 public: | 378 public: |
350 InvertMapRectMatrixBench(void* param, const char* name, int flags) | 379 InvertMapRectMatrixBench(void* param, const char* name, int flags) |
351 : INHERITED(param, name) | 380 : INHERITED(param, name) |
352 , fFlags(flags) { | 381 , fFlags(flags) { |
353 fMatrix.reset(); | 382 fMatrix.reset(); |
354 fIteration = 0; | 383 fIteration = 0; |
355 if (flags & kScale_Flag) { | 384 if (flags & kScale_Flag) { |
356 fMatrix.postScale(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f)); | 385 fMatrix.postScale(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f)); |
357 } | 386 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 }; | 430 }; |
402 | 431 |
403 /////////////////////////////////////////////////////////////////////////////// | 432 /////////////////////////////////////////////////////////////////////////////// |
404 | 433 |
405 DEF_BENCH( return new EqualsMatrixBench(p); ) | 434 DEF_BENCH( return new EqualsMatrixBench(p); ) |
406 DEF_BENCH( return new ScaleMatrixBench(p); ) | 435 DEF_BENCH( return new ScaleMatrixBench(p); ) |
407 DEF_BENCH( return new FloatConcatMatrixBench(p); ) | 436 DEF_BENCH( return new FloatConcatMatrixBench(p); ) |
408 DEF_BENCH( return new FloatDoubleConcatMatrixBench(p); ) | 437 DEF_BENCH( return new FloatDoubleConcatMatrixBench(p); ) |
409 DEF_BENCH( return new DoubleConcatMatrixBench(p); ) | 438 DEF_BENCH( return new DoubleConcatMatrixBench(p); ) |
410 DEF_BENCH( return new GetTypeMatrixBench(p); ) | 439 DEF_BENCH( return new GetTypeMatrixBench(p); ) |
| 440 DEF_BENCH( return new DecomposeMatrixBench(p); ) |
| 441 |
411 DEF_BENCH( return new InvertMapRectMatrixBench(p, "invert_maprect_identity", 0);
) | 442 DEF_BENCH( return new InvertMapRectMatrixBench(p, "invert_maprect_identity", 0);
) |
412 | 443 |
413 DEF_BENCH(return new InvertMapRectMatrixBench(p, | 444 DEF_BENCH(return new InvertMapRectMatrixBench(p, |
414 "invert_maprect_rectstaysrect", | 445 "invert_maprect_rectstaysrect", |
415 InvertMapRectMatrixBench::kScale_Flag | | 446 InvertMapRectMatrixBench::kScale_Flag | |
416 InvertMapRectMatrixBench::kTranslate_Flag); ) | 447 InvertMapRectMatrixBench::kTranslate_Flag); ) |
417 | 448 |
418 DEF_BENCH(return new InvertMapRectMatrixBench(p, | 449 DEF_BENCH(return new InvertMapRectMatrixBench(p, |
419 "invert_maprect_translate", | 450 "invert_maprect_translate", |
420 InvertMapRectMatrixBench::kTranslate_Flag); ) | 451 InvertMapRectMatrixBench::kTranslate_Flag); ) |
(...skipping 16 matching lines...) Expand all Loading... |
437 | 468 |
438 DEF_BENCH( return new InvertMapRectMatrixBench(p, | 469 DEF_BENCH( return new InvertMapRectMatrixBench(p, |
439 "invert_maprect_typemask_nonpersp", | 470 "invert_maprect_typemask_nonpersp", |
440 InvertMapRectMatrixBench::kUncachedTypeMask_Flag | | 471 InvertMapRectMatrixBench::kUncachedTypeMask_Flag | |
441 InvertMapRectMatrixBench::kScale_Flag | | 472 InvertMapRectMatrixBench::kScale_Flag | |
442 InvertMapRectMatrixBench::kRotate_Flag | | 473 InvertMapRectMatrixBench::kRotate_Flag | |
443 InvertMapRectMatrixBench::kTranslate_Flag); ) | 474 InvertMapRectMatrixBench::kTranslate_Flag); ) |
444 | 475 |
445 DEF_BENCH( return new ScaleTransMixedMatrixBench(p); ) | 476 DEF_BENCH( return new ScaleTransMixedMatrixBench(p); ) |
446 DEF_BENCH( return new ScaleTransDoubleMatrixBench(p); ) | 477 DEF_BENCH( return new ScaleTransDoubleMatrixBench(p); ) |
OLD | NEW |