| OLD | NEW | 
|---|
| 1 #include "Benchmark.h" | 1 #include "Benchmark.h" | 
| 2 #include "SkColorPriv.h" | 2 #include "SkColorPriv.h" | 
| 3 #include "SkMatrix.h" | 3 #include "SkMatrix.h" | 
| 4 #include "SkPaint.h" | 4 #include "SkPaint.h" | 
| 5 #include "SkRandom.h" | 5 #include "SkRandom.h" | 
| 6 #include "SkString.h" | 6 #include "SkString.h" | 
| 7 | 7 | 
| 8 static float sk_fsel(float pred, float result_ge, float result_lt) { | 8 static float sk_fsel(float pred, float result_ge, float result_lt) { | 
| 9     return pred >= 0 ? result_ge : result_lt; | 9     return pred >= 0 ? result_ge : result_lt; | 
| 10 } | 10 } | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 24 public: | 24 public: | 
| 25     MathBench(const char name[])  { | 25     MathBench(const char name[])  { | 
| 26         fName.printf("math_%s", name); | 26         fName.printf("math_%s", name); | 
| 27 | 27 | 
| 28         SkRandom rand; | 28         SkRandom rand; | 
| 29         for (int i = 0; i < kBuffer; ++i) { | 29         for (int i = 0; i < kBuffer; ++i) { | 
| 30             fSrc[i] = rand.nextSScalar1(); | 30             fSrc[i] = rand.nextSScalar1(); | 
| 31         } | 31         } | 
| 32     } | 32     } | 
| 33 | 33 | 
| 34     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 34     bool isSuitableFor(Backend backend) override { | 
| 35         return backend == kNonRendering_Backend; | 35         return backend == kNonRendering_Backend; | 
| 36     } | 36     } | 
| 37 | 37 | 
| 38     virtual void performTest(float* SK_RESTRICT dst, | 38     virtual void performTest(float* SK_RESTRICT dst, | 
| 39                               const float* SK_RESTRICT src, | 39                               const float* SK_RESTRICT src, | 
| 40                               int count) = 0; | 40                               int count) = 0; | 
| 41 | 41 | 
| 42 protected: | 42 protected: | 
| 43     virtual int mulLoopCount() const { return 1; } | 43     virtual int mulLoopCount() const { return 1; } | 
| 44 | 44 | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 61 public: | 61 public: | 
| 62     MathBenchU32(const char name[]) : INHERITED(name) {} | 62     MathBenchU32(const char name[]) : INHERITED(name) {} | 
| 63 | 63 | 
| 64 protected: | 64 protected: | 
| 65     virtual void performITest(uint32_t* SK_RESTRICT dst, | 65     virtual void performITest(uint32_t* SK_RESTRICT dst, | 
| 66                               const uint32_t* SK_RESTRICT src, | 66                               const uint32_t* SK_RESTRICT src, | 
| 67                               int count) = 0; | 67                               int count) = 0; | 
| 68 | 68 | 
| 69     virtual void performTest(float* SK_RESTRICT dst, | 69     virtual void performTest(float* SK_RESTRICT dst, | 
| 70                              const float* SK_RESTRICT src, | 70                              const float* SK_RESTRICT src, | 
| 71                              int count) SK_OVERRIDE { | 71                              int count) override { | 
| 72         uint32_t* d = SkTCast<uint32_t*>(dst); | 72         uint32_t* d = SkTCast<uint32_t*>(dst); | 
| 73         const uint32_t* s = SkTCast<const uint32_t*>(src); | 73         const uint32_t* s = SkTCast<const uint32_t*>(src); | 
| 74         this->performITest(d, s, count); | 74         this->performITest(d, s, count); | 
| 75     } | 75     } | 
| 76 private: | 76 private: | 
| 77     typedef MathBench INHERITED; | 77     typedef MathBench INHERITED; | 
| 78 }; | 78 }; | 
| 79 | 79 | 
| 80 /////////////////////////////////////////////////////////////////////////////// | 80 /////////////////////////////////////////////////////////////////////////////// | 
| 81 | 81 | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 159     tmp *= alpha; | 159     tmp *= alpha; | 
| 160     return (uint32_t) (((tmp >> 8) & mask) | ((tmp >> 32) & ~mask)); | 160     return (uint32_t) (((tmp >> 8) & mask) | ((tmp >> 32) & ~mask)); | 
| 161 } | 161 } | 
| 162 | 162 | 
| 163 class QMul64Bench : public MathBenchU32 { | 163 class QMul64Bench : public MathBenchU32 { | 
| 164 public: | 164 public: | 
| 165     QMul64Bench() : INHERITED("qmul64") {} | 165     QMul64Bench() : INHERITED("qmul64") {} | 
| 166 protected: | 166 protected: | 
| 167     virtual void performITest(uint32_t* SK_RESTRICT dst, | 167     virtual void performITest(uint32_t* SK_RESTRICT dst, | 
| 168                               const uint32_t* SK_RESTRICT src, | 168                               const uint32_t* SK_RESTRICT src, | 
| 169                               int count) SK_OVERRIDE { | 169                               int count) override { | 
| 170         for (int i = 0; i < count; ++i) { | 170         for (int i = 0; i < count; ++i) { | 
| 171             dst[i] = QMul64(src[i], (uint8_t)i); | 171             dst[i] = QMul64(src[i], (uint8_t)i); | 
| 172         } | 172         } | 
| 173     } | 173     } | 
| 174 private: | 174 private: | 
| 175     typedef MathBenchU32 INHERITED; | 175     typedef MathBenchU32 INHERITED; | 
| 176 }; | 176 }; | 
| 177 | 177 | 
| 178 class QMul32Bench : public MathBenchU32 { | 178 class QMul32Bench : public MathBenchU32 { | 
| 179 public: | 179 public: | 
| 180     QMul32Bench() : INHERITED("qmul32") {} | 180     QMul32Bench() : INHERITED("qmul32") {} | 
| 181 protected: | 181 protected: | 
| 182     virtual void performITest(uint32_t* SK_RESTRICT dst, | 182     virtual void performITest(uint32_t* SK_RESTRICT dst, | 
| 183                               const uint32_t* SK_RESTRICT src, | 183                               const uint32_t* SK_RESTRICT src, | 
| 184                               int count) SK_OVERRIDE { | 184                               int count) override { | 
| 185         for (int i = 0; i < count; ++i) { | 185         for (int i = 0; i < count; ++i) { | 
| 186             dst[i] = SkAlphaMulQ(src[i], (uint8_t)i); | 186             dst[i] = SkAlphaMulQ(src[i], (uint8_t)i); | 
| 187         } | 187         } | 
| 188     } | 188     } | 
| 189 private: | 189 private: | 
| 190     typedef MathBenchU32 INHERITED; | 190     typedef MathBenchU32 INHERITED; | 
| 191 }; | 191 }; | 
| 192 | 192 | 
| 193 /////////////////////////////////////////////////////////////////////////////// | 193 /////////////////////////////////////////////////////////////////////////////// | 
| 194 | 194 | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 278 | 278 | 
| 279         if (index < 0) { | 279         if (index < 0) { | 
| 280             fProc = NULL; | 280             fProc = NULL; | 
| 281             fName = "isfinite_rect"; | 281             fName = "isfinite_rect"; | 
| 282         } else { | 282         } else { | 
| 283             fProc = gRec[index].fProc; | 283             fProc = gRec[index].fProc; | 
| 284             fName = gRec[index].fName; | 284             fName = gRec[index].fName; | 
| 285         } | 285         } | 
| 286     } | 286     } | 
| 287 | 287 | 
| 288     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 288     bool isSuitableFor(Backend backend) override { | 
| 289         return backend == kNonRendering_Backend; | 289         return backend == kNonRendering_Backend; | 
| 290     } | 290     } | 
| 291 | 291 | 
| 292 protected: | 292 protected: | 
| 293     virtual void onDraw(const int loops, SkCanvas*) { | 293     virtual void onDraw(const int loops, SkCanvas*) { | 
| 294         IsFiniteProc proc = fProc; | 294         IsFiniteProc proc = fProc; | 
| 295         const float* data = fData; | 295         const float* data = fData; | 
| 296         // do this so the compiler won't throw away the function call | 296         // do this so the compiler won't throw away the function call | 
| 297         int counter = 0; | 297         int counter = 0; | 
| 298 | 298 | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 346             fData[i] = rand.nextSScalar1(); | 346             fData[i] = rand.nextSScalar1(); | 
| 347         } | 347         } | 
| 348 | 348 | 
| 349         if (fast) { | 349         if (fast) { | 
| 350             fName = "floor_fast"; | 350             fName = "floor_fast"; | 
| 351         } else { | 351         } else { | 
| 352             fName = "floor_std"; | 352             fName = "floor_std"; | 
| 353         } | 353         } | 
| 354     } | 354     } | 
| 355 | 355 | 
| 356     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 356     bool isSuitableFor(Backend backend) override { | 
| 357         return backend == kNonRendering_Backend; | 357         return backend == kNonRendering_Backend; | 
| 358     } | 358     } | 
| 359 | 359 | 
| 360     virtual void process(float) {} | 360     virtual void process(float) {} | 
| 361 | 361 | 
| 362 protected: | 362 protected: | 
| 363     virtual void onDraw(const int loops, SkCanvas*) { | 363     virtual void onDraw(const int loops, SkCanvas*) { | 
| 364         SkRandom rand; | 364         SkRandom rand; | 
| 365         float accum = 0; | 365         float accum = 0; | 
| 366         const float* data = fData; | 366         const float* data = fData; | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 407             fData[i] = rand.nextU(); | 407             fData[i] = rand.nextU(); | 
| 408         } | 408         } | 
| 409 | 409 | 
| 410         if (fUsePortable) { | 410         if (fUsePortable) { | 
| 411             fName = "clz_portable"; | 411             fName = "clz_portable"; | 
| 412         } else { | 412         } else { | 
| 413             fName = "clz_intrinsic"; | 413             fName = "clz_intrinsic"; | 
| 414         } | 414         } | 
| 415     } | 415     } | 
| 416 | 416 | 
| 417     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 417     bool isSuitableFor(Backend backend) override { | 
| 418         return backend == kNonRendering_Backend; | 418         return backend == kNonRendering_Backend; | 
| 419     } | 419     } | 
| 420 | 420 | 
| 421     // just so the compiler doesn't remove our loops | 421     // just so the compiler doesn't remove our loops | 
| 422     virtual void process(int) {} | 422     virtual void process(int) {} | 
| 423 | 423 | 
| 424 protected: | 424 protected: | 
| 425     virtual void onDraw(const int loops, SkCanvas*) { | 425     virtual void onDraw(const int loops, SkCanvas*) { | 
| 426         int accum = 0; | 426         int accum = 0; | 
| 427 | 427 | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 463 public: | 463 public: | 
| 464     NormalizeBench() { | 464     NormalizeBench() { | 
| 465         SkRandom rand; | 465         SkRandom rand; | 
| 466         for (int i = 0; i < ARRAY; ++i) { | 466         for (int i = 0; i < ARRAY; ++i) { | 
| 467             fVec[i].set(rand.nextSScalar1(), rand.nextSScalar1()); | 467             fVec[i].set(rand.nextSScalar1(), rand.nextSScalar1()); | 
| 468         } | 468         } | 
| 469 | 469 | 
| 470         fName = "point_normalize"; | 470         fName = "point_normalize"; | 
| 471     } | 471     } | 
| 472 | 472 | 
| 473     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 473     bool isSuitableFor(Backend backend) override { | 
| 474         return backend == kNonRendering_Backend; | 474         return backend == kNonRendering_Backend; | 
| 475     } | 475     } | 
| 476 | 476 | 
| 477     // just so the compiler doesn't remove our loops | 477     // just so the compiler doesn't remove our loops | 
| 478     virtual void process(int) {} | 478     virtual void process(int) {} | 
| 479 | 479 | 
| 480 protected: | 480 protected: | 
| 481     virtual void onDraw(const int loops, SkCanvas*) { | 481     virtual void onDraw(const int loops, SkCanvas*) { | 
| 482         int accum = 0; | 482         int accum = 0; | 
| 483 | 483 | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 510 public: | 510 public: | 
| 511 | 511 | 
| 512     FixedMathBench()  { | 512     FixedMathBench()  { | 
| 513         SkRandom rand; | 513         SkRandom rand; | 
| 514         for (int i = 0; i < N; ++i) { | 514         for (int i = 0; i < N; ++i) { | 
| 515             fData[i] = rand.nextSScalar1(); | 515             fData[i] = rand.nextSScalar1(); | 
| 516         } | 516         } | 
| 517 | 517 | 
| 518     } | 518     } | 
| 519 | 519 | 
| 520     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 520     bool isSuitableFor(Backend backend) override { | 
| 521         return backend == kNonRendering_Backend; | 521         return backend == kNonRendering_Backend; | 
| 522     } | 522     } | 
| 523 | 523 | 
| 524 protected: | 524 protected: | 
| 525     virtual void onDraw(const int loops, SkCanvas*) { | 525     virtual void onDraw(const int loops, SkCanvas*) { | 
| 526         for (int j = 0; j < loops; ++j) { | 526         for (int j = 0; j < loops; ++j) { | 
| 527             for (int i = 0; i < N - 4; ++i) { | 527             for (int i = 0; i < N - 4; ++i) { | 
| 528                 fResult[i] = SkFloatToFixed(fData[i]); | 528                 fResult[i] = SkFloatToFixed(fData[i]); | 
| 529             } | 529             } | 
| 530         } | 530         } | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 546 /////////////////////////////////////////////////////////////////////////////// | 546 /////////////////////////////////////////////////////////////////////////////// | 
| 547 | 547 | 
| 548 template <typename T> | 548 template <typename T> | 
| 549 class DivModBench : public Benchmark { | 549 class DivModBench : public Benchmark { | 
| 550     SkString fName; | 550     SkString fName; | 
| 551 public: | 551 public: | 
| 552     explicit DivModBench(const char* name) { | 552     explicit DivModBench(const char* name) { | 
| 553         fName.printf("divmod_%s", name); | 553         fName.printf("divmod_%s", name); | 
| 554     } | 554     } | 
| 555 | 555 | 
| 556     bool isSuitableFor(Backend backend) SK_OVERRIDE { | 556     bool isSuitableFor(Backend backend) override { | 
| 557         return backend == kNonRendering_Backend; | 557         return backend == kNonRendering_Backend; | 
| 558     } | 558     } | 
| 559 | 559 | 
| 560 protected: | 560 protected: | 
| 561     virtual const char* onGetName() { | 561     virtual const char* onGetName() { | 
| 562         return fName.c_str(); | 562         return fName.c_str(); | 
| 563     } | 563     } | 
| 564 | 564 | 
| 565     virtual void onDraw(const int loops, SkCanvas*) { | 565     virtual void onDraw(const int loops, SkCanvas*) { | 
| 566         volatile T a = 0, b = 0; | 566         volatile T a = 0, b = 0; | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 602 | 602 | 
| 603 DEF_BENCH( return new FloorBench(false); ) | 603 DEF_BENCH( return new FloorBench(false); ) | 
| 604 DEF_BENCH( return new FloorBench(true); ) | 604 DEF_BENCH( return new FloorBench(true); ) | 
| 605 | 605 | 
| 606 DEF_BENCH( return new CLZBench(false); ) | 606 DEF_BENCH( return new CLZBench(false); ) | 
| 607 DEF_BENCH( return new CLZBench(true); ) | 607 DEF_BENCH( return new CLZBench(true); ) | 
| 608 | 608 | 
| 609 DEF_BENCH( return new NormalizeBench(); ) | 609 DEF_BENCH( return new NormalizeBench(); ) | 
| 610 | 610 | 
| 611 DEF_BENCH( return new FixedMathBench(); ) | 611 DEF_BENCH( return new FixedMathBench(); ) | 
| OLD | NEW | 
|---|