aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/RegionBench.cpp
diff options
context:
space:
mode:
authorGravatar mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-01-01 20:32:45 +0000
committerGravatar mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-01-01 20:32:45 +0000
commitae8f9528fd0052e06653272abb44a1f49a3b726b (patch)
tree6ec6ff2239699ce32d69046ae5330fc8e5f2fa71 /bench/RegionBench.cpp
parent725a64cf89605680ebb0f56cd6727f29d8b9899b (diff)
speedup SkRect::intersect
git-svn-id: http://skia.googlecode.com/svn/trunk@12851 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/RegionBench.cpp')
-rw-r--r--bench/RegionBench.cpp58
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)); )