RegionContainBench.cpp revision e0e7cfe44bb9d66d76120a79e5275c294bacaa22
1a3c134897602f878da9dd858109498392a5daae9reed@google.com/*
2a3c134897602f878da9dd858109498392a5daae9reed@google.com * Copyright 2013 Google Inc.
3a3c134897602f878da9dd858109498392a5daae9reed@google.com *
4a3c134897602f878da9dd858109498392a5daae9reed@google.com * Use of this source code is governed by a BSD-style license that can be
5a3c134897602f878da9dd858109498392a5daae9reed@google.com * found in the LICENSE file.
6a3c134897602f878da9dd858109498392a5daae9reed@google.com */
7a3c134897602f878da9dd858109498392a5daae9reed@google.com
8a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkBenchmark.h"
9a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkRandom.h"
10a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkRegion.h"
11a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkString.h"
12a3c134897602f878da9dd858109498392a5daae9reed@google.com
13a3c134897602f878da9dd858109498392a5daae9reed@google.comstatic bool sect_proc(SkRegion& a, SkRegion& b) {
14a3c134897602f878da9dd858109498392a5daae9reed@google.com    SkRegion result;
15a3c134897602f878da9dd858109498392a5daae9reed@google.com    return result.op(a, b, SkRegion::kIntersect_Op);
16a3c134897602f878da9dd858109498392a5daae9reed@google.com}
17a3c134897602f878da9dd858109498392a5daae9reed@google.com
18a3c134897602f878da9dd858109498392a5daae9reed@google.comclass RegionContainBench : public SkBenchmark {
19a3c134897602f878da9dd858109498392a5daae9reed@google.compublic:
20a3c134897602f878da9dd858109498392a5daae9reed@google.com    typedef bool (*Proc)(SkRegion& a, SkRegion& b);
21a3c134897602f878da9dd858109498392a5daae9reed@google.com    SkRegion fA, fB;
22a3c134897602f878da9dd858109498392a5daae9reed@google.com    Proc     fProc;
23a3c134897602f878da9dd858109498392a5daae9reed@google.com    SkString fName;
24a3c134897602f878da9dd858109498392a5daae9reed@google.com
25a3c134897602f878da9dd858109498392a5daae9reed@google.com    enum {
26a3c134897602f878da9dd858109498392a5daae9reed@google.com        W = 200,
27a3c134897602f878da9dd858109498392a5daae9reed@google.com        H = 200,
28a3c134897602f878da9dd858109498392a5daae9reed@google.com        COUNT = 10,
29a3c134897602f878da9dd858109498392a5daae9reed@google.com        N = SkBENCHLOOP(20000)
30a3c134897602f878da9dd858109498392a5daae9reed@google.com    };
31a3c134897602f878da9dd858109498392a5daae9reed@google.com
32e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org    SkIRect randrect(SkRandom& rand, int i) {
33a3c134897602f878da9dd858109498392a5daae9reed@google.com        int w = rand.nextU() % W;
34a3c134897602f878da9dd858109498392a5daae9reed@google.com        return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT);
35a3c134897602f878da9dd858109498392a5daae9reed@google.com    }
36a3c134897602f878da9dd858109498392a5daae9reed@google.com
37a3c134897602f878da9dd858109498392a5daae9reed@google.com    RegionContainBench(void* param, Proc proc, const char name[]) : INHERITED(param) {
38a3c134897602f878da9dd858109498392a5daae9reed@google.com        fProc = proc;
39a3c134897602f878da9dd858109498392a5daae9reed@google.com        fName.printf("region_contains_%s", name);
40a3c134897602f878da9dd858109498392a5daae9reed@google.com
41e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
42a3c134897602f878da9dd858109498392a5daae9reed@google.com        for (int i = 0; i < COUNT; i++) {
43a3c134897602f878da9dd858109498392a5daae9reed@google.com            fA.op(randrect(rand, i), SkRegion::kXOR_Op);
44a3c134897602f878da9dd858109498392a5daae9reed@google.com        }
45a3c134897602f878da9dd858109498392a5daae9reed@google.com
46a3c134897602f878da9dd858109498392a5daae9reed@google.com        fB.setRect(0, 0, H, W);
47a3c134897602f878da9dd858109498392a5daae9reed@google.com
48a3c134897602f878da9dd858109498392a5daae9reed@google.com        fIsRendering = false;
49a3c134897602f878da9dd858109498392a5daae9reed@google.com    }
50a3c134897602f878da9dd858109498392a5daae9reed@google.com
51a3c134897602f878da9dd858109498392a5daae9reed@google.comprotected:
52a3c134897602f878da9dd858109498392a5daae9reed@google.com    virtual const char* onGetName() { return fName.c_str(); }
53a3c134897602f878da9dd858109498392a5daae9reed@google.com
5477472f06f88b85e85fb690584c85d0a42e74b685sugoi@google.com    virtual void onDraw(SkCanvas*) {
55a3c134897602f878da9dd858109498392a5daae9reed@google.com        Proc proc = fProc;
56a3c134897602f878da9dd858109498392a5daae9reed@google.com
57a3c134897602f878da9dd858109498392a5daae9reed@google.com        for (int i = 0; i < N; ++i) {
58a3c134897602f878da9dd858109498392a5daae9reed@google.com           proc(fA, fB);
59a3c134897602f878da9dd858109498392a5daae9reed@google.com        }
60a3c134897602f878da9dd858109498392a5daae9reed@google.com    }
61a3c134897602f878da9dd858109498392a5daae9reed@google.com
62a3c134897602f878da9dd858109498392a5daae9reed@google.comprivate:
63a3c134897602f878da9dd858109498392a5daae9reed@google.com    typedef SkBenchmark INHERITED;
64a3c134897602f878da9dd858109498392a5daae9reed@google.com};
65a3c134897602f878da9dd858109498392a5daae9reed@google.com
66a3c134897602f878da9dd858109498392a5daae9reed@google.comstatic SkBenchmark* gF0(void* p) { return SkNEW_ARGS(RegionContainBench, (p, sect_proc, "sect")); }
67a3c134897602f878da9dd858109498392a5daae9reed@google.com
68a3c134897602f878da9dd858109498392a5daae9reed@google.comstatic BenchRegistry gR0(gF0);
69