| Index: bench/MathBench.cpp
|
| diff --git a/bench/MathBench.cpp b/bench/MathBench.cpp
|
| index c34be44303c3fe0609eb11bd4c7565ccaa95b801..260159f3f0ebf58b513f1f16fb53e406130e9f1f 100644
|
| --- a/bench/MathBench.cpp
|
| +++ b/bench/MathBench.cpp
|
| @@ -512,6 +512,42 @@ private:
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +template <typename T>
|
| +class DivModBench : public SkBenchmark {
|
| + const char* fName;
|
| +public:
|
| + explicit DivModBench(const char* name) : fName(name) {
|
| + fIsRendering = false;
|
| + }
|
| +
|
| +protected:
|
| + virtual const char* onGetName() {
|
| + return SkStringPrintf("divmod_%s", fName).c_str();
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas*) {
|
| + volatile T a = 0, b = 0;
|
| + T div = 0, mod = 0;
|
| + for (int i = 0; i < this->getLoops(); i++) {
|
| + if ((T)i == 0) continue; // Small T will wrap around.
|
| + SkTDivMod((T)(i+1), (T)i, &div, &mod);
|
| + a ^= div;
|
| + b ^= mod;
|
| + }
|
| + }
|
| +};
|
| +DEF_BENCH(return new DivModBench<uint8_t>("uint8_t"))
|
| +DEF_BENCH(return new DivModBench<uint16_t>("uint16_t"))
|
| +DEF_BENCH(return new DivModBench<uint32_t>("uint32_t"))
|
| +DEF_BENCH(return new DivModBench<uint64_t>("uint64_t"))
|
| +
|
| +DEF_BENCH(return new DivModBench<int8_t>("int8_t"))
|
| +DEF_BENCH(return new DivModBench<int16_t>("int16_t"))
|
| +DEF_BENCH(return new DivModBench<int32_t>("int32_t"))
|
| +DEF_BENCH(return new DivModBench<int64_t>("int64_t"))
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| DEF_BENCH( return new NoOpMathBench(); )
|
| DEF_BENCH( return new SlowISqrtMathBench(); )
|
| DEF_BENCH( return new FastISqrtMathBench(); )
|
|
|