diff options
Diffstat (limited to 'bench/RegionBench.cpp')
-rw-r--r-- | bench/RegionBench.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/bench/RegionBench.cpp b/bench/RegionBench.cpp index ed58e3bdeb..4ab173a53b 100644 --- a/bench/RegionBench.cpp +++ b/bench/RegionBench.cpp @@ -117,6 +117,61 @@ private: typedef SkBenchmark INHERITED; }; +class RectSectBench : public SkBenchmark { + enum { + N = 1000 + }; + SkRect fArray0[N]; + SkRect fArray1[N]; + SkString fName; + bool fNewWay; + +public: + static void RandRect(SkRect* r, SkRandom& rand) { + r->set(rand.nextSScalar1(), rand.nextSScalar1(), + rand.nextSScalar1(), rand.nextSScalar1()); + r->sort(); + } + + RectSectBench(bool newWay) : fNewWay(newWay) { + fName.printf("rect_intersect_%s", newWay ? "new" : "old"); + + SkRandom rand; + for (int i = 0; i < N; i++) { + RandRect(&fArray0[i], rand); + RandRect(&fArray1[i], rand); + } + } + + virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { + return backend == kNonRendering_Backend; + } + +protected: + virtual const char* onGetName() { return fName.c_str(); } + + virtual void onDraw(const int loops, SkCanvas* canvas) { + for (int i = 0; i < loops; ++i) { + if (fNewWay) { + for (int j = 0; j < N; ++j) { + SkRect r = fArray0[j]; + r.intersect2(fArray1[j]); + } + } else { + for (int j = 0; j < N; ++j) { + SkRect r = fArray0[j]; + r.intersect(fArray1[j]); + } + } + } + } + +private: + typedef SkBenchmark INHERITED; +}; + +/////////////////////////////////////////////////////////////////////////////// + #define SMALL 16 DEF_BENCH( return SkNEW_ARGS(RegionBench, (SMALL, union_proc, "union")); ) @@ -128,3 +183,6 @@ DEF_BENCH( return SkNEW_ARGS(RegionBench, (SMALL, containsrect_proc, "containsre DEF_BENCH( return SkNEW_ARGS(RegionBench, (SMALL, sectsrgn_proc, "intersectsrgn")); ) DEF_BENCH( return SkNEW_ARGS(RegionBench, (SMALL, sectsrect_proc, "intersectsrect")); ) DEF_BENCH( return SkNEW_ARGS(RegionBench, (SMALL, containsxy_proc, "containsxy")); ) + +DEF_BENCH( return SkNEW_ARGS(RectSectBench, (false)); ) +DEF_BENCH( return SkNEW_ARGS(RectSectBench, (true)); ) |