From df9d6f17681ee38cc82b1ee0f328314412c1a94b Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Tue, 12 Jun 2012 21:29:43 +0000 Subject: add bench for SkScalarIsFinite git-svn-id: http://skia.googlecode.com/svn/trunk@4239 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/ScalarBench.cpp | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'bench/ScalarBench.cpp') diff --git a/bench/ScalarBench.cpp b/bench/ScalarBench.cpp index 8889d7b74f..fe14251b65 100644 --- a/bench/ScalarBench.cpp +++ b/bench/ScalarBench.cpp @@ -24,7 +24,8 @@ public: protected: virtual int mulLoopCount() const { return 1; } - virtual const char* onGetName() { + virtual const char* onGetName() SK_OVERRIDE { + SkASSERT(!"stop"); return fName.c_str(); } @@ -80,7 +81,7 @@ private: class ForcedIntComparisonBench : public ScalarBench { public: ForcedIntComparisonBench(void* param) - : INHERITED(param, "compare_forced_int") { + : INHERITED(param, "compare_forced_int") { init9(fArray); } protected: @@ -98,6 +99,35 @@ private: typedef ScalarBench INHERITED; }; +class IsFiniteScalarBench : public ScalarBench { +public: + IsFiniteScalarBench(void* param) : INHERITED(param, "isfinite") { + SkRandom rand; + for (size_t i = 0; i < ARRAY_N; ++i) { + fArray[i] = rand.nextSScalar1(); + } + } +protected: + virtual int mulLoopCount() const { return 1; } + virtual void performTest() SK_OVERRIDE { + int sum = 0; + for (size_t i = 0; i < ARRAY_N; ++i) { + sum += SkScalarIsFinite(fArray[i]); + } + // we do this so the compiler won't optimize our loop away... + this->doSomething(fArray, sum); + } + + virtual void doSomething(SkScalar array[], int sum) {} +private: + enum { + ARRAY_N = 64 + }; + SkScalar fArray[ARRAY_N]; + + typedef ScalarBench INHERITED; +}; + /////////////////////////////////////////////////////////////////////////////// class RectBoundsBench : public SkBenchmark { @@ -137,7 +167,9 @@ private: static SkBenchmark* S0(void* p) { return new FloatComparisonBench(p); } static SkBenchmark* S1(void* p) { return new ForcedIntComparisonBench(p); } static SkBenchmark* S2(void* p) { return new RectBoundsBench(p); } +static SkBenchmark* S3(void* p) { return new IsFiniteScalarBench(p); } static BenchRegistry gReg0(S0); static BenchRegistry gReg1(S1); static BenchRegistry gReg2(S2); +static BenchRegistry gReg3(S3); -- cgit v1.2.3