| 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 "SkRandom.h" |   10 #include "SkRandom.h" | 
|   11 #include "SkString.h" |   11 #include "SkString.h" | 
|   12  |   12  | 
|   13 class MatrixBench : public SkBenchmark { |   13 class MatrixBench : public SkBenchmark { | 
|   14     SkString    fName; |   14     SkString    fName; | 
|   15     enum { N = 100000 }; |  | 
|   16 public: |   15 public: | 
|   17     MatrixBench(void* param, const char name[]) : INHERITED(param) { |   16     MatrixBench(void* param, const char name[]) : INHERITED(param) { | 
|   18         fName.printf("matrix_%s", name); |   17         fName.printf("matrix_%s", name); | 
|   19         fIsRendering = false; |   18         fIsRendering = false; | 
|   20     } |   19     } | 
|   21  |   20  | 
|   22     virtual void performTest() = 0; |   21     virtual void performTest() = 0; | 
|   23  |   22  | 
|   24 protected: |   23 protected: | 
|   25     virtual int mulLoopCount() const { return 1; } |   24     virtual int mulLoopCount() const { return 1; } | 
|   26  |   25  | 
|   27     virtual const char* onGetName() { |   26     virtual const char* onGetName() { | 
|   28         return fName.c_str(); |   27         return fName.c_str(); | 
|   29     } |   28     } | 
|   30  |   29  | 
|   31     virtual void onDraw(SkCanvas*) { |   30     virtual void onDraw(SkCanvas*) { | 
|   32         int n = SkBENCHLOOP(N * this->mulLoopCount()); |   31         for (int i = 0; i < this->getLoops(); i++) { | 
|   33         for (int i = 0; i < n; i++) { |  | 
|   34             this->performTest(); |   32             this->performTest(); | 
|   35         } |   33         } | 
|   36     } |   34     } | 
|   37  |   35  | 
|   38 private: |   36 private: | 
|   39     typedef SkBenchmark INHERITED; |   37     typedef SkBenchmark INHERITED; | 
|   40 }; |   38 }; | 
|   41  |   39  | 
|   42 // we want to stop the compiler from eliminating code that it thinks is a no-op |   40 // we want to stop the compiler from eliminating code that it thinks is a no-op | 
|   43 // so we have a non-static global we increment, hoping that will convince the |   41 // so we have a non-static global we increment, hoping that will convince the | 
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  289         float ty = fMatrix[SkMatrix::kMTransY]; |  287         float ty = fMatrix[SkMatrix::kMTransY]; | 
|  290         do { |  288         do { | 
|  291             dst->fY = SkScalarMulAdd(src->fY, my, ty); |  289             dst->fY = SkScalarMulAdd(src->fY, my, ty); | 
|  292             dst->fX = SkScalarMulAdd(src->fX, mx, tx); |  290             dst->fX = SkScalarMulAdd(src->fX, mx, tx); | 
|  293             src += 1; |  291             src += 1; | 
|  294             dst += 1; |  292             dst += 1; | 
|  295         } while (--count); |  293         } while (--count); | 
|  296     } |  294     } | 
|  297  private: |  295  private: | 
|  298     enum { |  296     enum { | 
|  299         kCount = SkBENCHLOOP(16) |  297         kCount = 16 | 
|  300     }; |  298     }; | 
|  301     SkMatrix fMatrix; |  299     SkMatrix fMatrix; | 
|  302     SkPoint fSrc [16]; |  300     SkPoint fSrc [kCount]; | 
|  303     SkPoint fDst [16]; |  301     SkPoint fDst [kCount]; | 
|  304     SkRandom fRandom; |  302     SkRandom fRandom; | 
|  305     typedef MatrixBench INHERITED; |  303     typedef MatrixBench INHERITED; | 
|  306 }; |  304 }; | 
|  307  |  305  | 
|  308 class ScaleTransDoubleMatrixBench : public MatrixBench { |  306 class ScaleTransDoubleMatrixBench : public MatrixBench { | 
|  309  public: |  307  public: | 
|  310     ScaleTransDoubleMatrixBench(void* p) : INHERITED(p, "scaletrans_double") { |  308     ScaleTransDoubleMatrixBench(void* p) : INHERITED(p, "scaletrans_double") { | 
|  311         init9(fMatrix); |  309         init9(fMatrix); | 
|  312         int i; |  310         int i; | 
|  313         for (i = 0; i < kCount; i++) { |  311         for (i = 0; i < kCount; i++) { | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  329         float ty = (float) fMatrix[SkMatrix::kMTransY]; |  327         float ty = (float) fMatrix[SkMatrix::kMTransY]; | 
|  330         do { |  328         do { | 
|  331             dst->fY = src->fY * my + ty; |  329             dst->fY = src->fY * my + ty; | 
|  332             dst->fX = src->fX * mx + tx; |  330             dst->fX = src->fX * mx + tx; | 
|  333             src += 1; |  331             src += 1; | 
|  334             dst += 1; |  332             dst += 1; | 
|  335         } while (--count); |  333         } while (--count); | 
|  336     } |  334     } | 
|  337  private: |  335  private: | 
|  338     enum { |  336     enum { | 
|  339         kCount = SkBENCHLOOP(16) |  337         kCount = 16 | 
|  340     }; |  338     }; | 
|  341     double fMatrix [9]; |  339     double fMatrix [9]; | 
|  342     SkPoint fSrc [16]; |  340     SkPoint fSrc [kCount]; | 
|  343     SkPoint fDst [16]; |  341     SkPoint fDst [kCount]; | 
|  344     SkRandom fRandom; |  342     SkRandom fRandom; | 
|  345     typedef MatrixBench INHERITED; |  343     typedef MatrixBench INHERITED; | 
|  346 }; |  344 }; | 
|  347  |  345  | 
|  348 class InvertMapRectMatrixBench : public MatrixBench { |  346 class InvertMapRectMatrixBench : public MatrixBench { | 
|  349 public: |  347 public: | 
|  350     InvertMapRectMatrixBench(void* param, const char* name, int flags) |  348     InvertMapRectMatrixBench(void* param, const char* name, int flags) | 
|  351         : INHERITED(param, name) |  349         : INHERITED(param, name) | 
|  352         , fFlags(flags) { |  350         , fFlags(flags) { | 
|  353         fMatrix.reset(); |  351         fMatrix.reset(); | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  437  |  435  | 
|  438 DEF_BENCH( return new InvertMapRectMatrixBench(p, |  436 DEF_BENCH( return new InvertMapRectMatrixBench(p, | 
|  439                            "invert_maprect_typemask_nonpersp", |  437                            "invert_maprect_typemask_nonpersp", | 
|  440                            InvertMapRectMatrixBench::kUncachedTypeMask_Flag | |  438                            InvertMapRectMatrixBench::kUncachedTypeMask_Flag | | 
|  441                            InvertMapRectMatrixBench::kScale_Flag | |  439                            InvertMapRectMatrixBench::kScale_Flag | | 
|  442                            InvertMapRectMatrixBench::kRotate_Flag | |  440                            InvertMapRectMatrixBench::kRotate_Flag | | 
|  443                            InvertMapRectMatrixBench::kTranslate_Flag); ) |  441                            InvertMapRectMatrixBench::kTranslate_Flag); ) | 
|  444  |  442  | 
|  445 DEF_BENCH( return new ScaleTransMixedMatrixBench(p); ) |  443 DEF_BENCH( return new ScaleTransMixedMatrixBench(p); ) | 
|  446 DEF_BENCH( return new ScaleTransDoubleMatrixBench(p); ) |  444 DEF_BENCH( return new ScaleTransDoubleMatrixBench(p); ) | 
| OLD | NEW |