diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-31 15:23:44 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-31 15:23:44 +0000 |
commit | a3c134897602f878da9dd858109498392a5daae9 (patch) | |
tree | 0e8695d90cb4193ee718111161a2bb73eb1980fe | |
parent | 4688de1ee5b54277d9b5a34dc7dda4c61d6bfcd7 (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
-rw-r--r-- | bench/RegionContainBench.cpp | 69 |
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); + |