summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/bench/RegionContainBench.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/bench/RegionContainBench.cpp')
-rw-r--r--chromium/third_party/skia/bench/RegionContainBench.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/chromium/third_party/skia/bench/RegionContainBench.cpp b/chromium/third_party/skia/bench/RegionContainBench.cpp
new file mode 100644
index 00000000000..a47ab3395f8
--- /dev/null
+++ b/chromium/third_party/skia/bench/RegionContainBench.cpp
@@ -0,0 +1,67 @@
+/*
+ * 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 "Benchmark.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 Benchmark {
+public:
+ typedef bool (*Proc)(SkRegion& a, SkRegion& b);
+ SkRegion fA, fB;
+ Proc fProc;
+ SkString fName;
+
+ enum {
+ W = 200,
+ H = 200,
+ COUNT = 10,
+ };
+
+ SkIRect randrect(SkRandom& rand, int i) {
+ int w = rand.nextU() % W;
+ return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT);
+ }
+
+ RegionContainBench(Proc proc, const char name[]) {
+ 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);
+ }
+
+ 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*) {
+ Proc proc = fProc;
+
+ for (int i = 0; i < loops; ++i) {
+ proc(fA, fB);
+ }
+ }
+
+private:
+ typedef Benchmark INHERITED;
+};
+
+DEF_BENCH( return SkNEW_ARGS(RegionContainBench, (sect_proc, "sect")); )