aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/RegionContainBench.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-31 15:23:44 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-31 15:23:44 +0000
commita3c134897602f878da9dd858109498392a5daae9 (patch)
tree0e8695d90cb4193ee718111161a2bb73eb1980fe /bench/RegionContainBench.cpp
parent4688de1ee5b54277d9b5a34dc7dda4c61d6bfcd7 (diff)
add new test for region::intersect, when one is a rect, and it wholly contains
a complex region. git-svn-id: http://skia.googlecode.com/svn/trunk@7490 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/RegionContainBench.cpp')
-rw-r--r--bench/RegionContainBench.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/bench/RegionContainBench.cpp b/bench/RegionContainBench.cpp
new file mode 100644
index 0000000000..8597f3120c
--- /dev/null
+++ b/bench/RegionContainBench.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkBenchmark.h"
+#include "SkRandom.h"
+#include "SkRegion.h"
+#include "SkString.h"
+
+static bool sect_proc(SkRegion& a, SkRegion& b) {
+ SkRegion result;
+ return result.op(a, b, SkRegion::kIntersect_Op);
+}
+
+class RegionContainBench : public SkBenchmark {
+public:
+ typedef bool (*Proc)(SkRegion& a, SkRegion& b);
+ SkRegion fA, fB;
+ Proc fProc;
+ SkString fName;
+
+ enum {
+ W = 200,
+ H = 200,
+ COUNT = 10,
+ N = SkBENCHLOOP(20000)
+ };
+
+ SkIRect randrect(SkRandom& rand, int i) {
+ int w = rand.nextU() % W;
+ return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT);
+ }
+
+ RegionContainBench(void* param, Proc proc, const char name[]) : INHERITED(param) {
+ fProc = proc;
+ fName.printf("region_contains_%s", name);
+
+ SkRandom rand;
+ for (int i = 0; i < COUNT; i++) {
+ fA.op(randrect(rand, i), SkRegion::kXOR_Op);
+ }
+
+ fB.setRect(0, 0, H, W);
+
+ fIsRendering = false;
+ }
+
+protected:
+ virtual const char* onGetName() { return fName.c_str(); }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ Proc proc = fProc;
+
+ for (int i = 0; i < N; ++i) {
+ proc(fA, fB);
+ }
+ }
+
+private:
+ typedef SkBenchmark INHERITED;
+};
+
+static SkBenchmark* gF0(void* p) { return SkNEW_ARGS(RegionContainBench, (p, sect_proc, "sect")); }
+
+static BenchRegistry gR0(gF0);
+