RTreeBench.cpp revision e0e7cfe44bb9d66d76120a79e5275c294bacaa22
1981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
2981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com/*
3981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com * Copyright 2012 Google Inc.
4981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com *
5981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com * Use of this source code is governed by a BSD-style license that can be
6981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com * found in the LICENSE file.
7981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com */
8981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
9981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com#include "SkBenchmark.h"
10981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com#include "SkCanvas.h"
11981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com#include "SkRTree.h"
12981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com#include "SkRandom.h"
13981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com#include "SkString.h"
14981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
15981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com// confine rectangles to a smallish area, so queries generally hit something, and overlap occurs:
16981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comstatic const int GENERATE_EXTENTS = 1000;
17981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comstatic const int NUM_BUILD_RECTS = 500;
18981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comstatic const int NUM_QUERY_RECTS = 5000;
19981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comstatic const int NUM_QUERIES = 1000;
208c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic const int GRID_WIDTH = 100;
21981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
22e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgtypedef SkIRect (*MakeRectProc)(SkRandom&, int, int);
23981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
24981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com// Time how long it takes to build an R-Tree either bulk-loaded or not
25981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comclass BBoxBuildBench : public SkBenchmark {
26981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.compublic:
27981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    BBoxBuildBench(void* param, const char* name, MakeRectProc proc, bool bulkLoad,
28981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    SkBBoxHierarchy* tree)
296c778164a743f8760dca251524d51848548b436fskia.committer@gmail.com        : INHERITED(param)
30981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        , fTree(tree)
31981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        , fProc(proc)
3261348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        , fBulkLoad(bulkLoad) {
3361348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        fName.append("rtree_");
3461348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        fName.append(name);
3561348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        fName.append("_build");
36981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        if (fBulkLoad) {
3761348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com            fName.append("_bulk");
38981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        }
399dc2713fc4a75e7fbee2f985057fde680a07c7f0tomhudson@google.com        fIsRendering = false;
4061348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com    }
4107a05d5130ee0d8444960fdba574e69b7254f1dfrobertphillips@google.com    virtual ~BBoxBuildBench() {
424813458d89fb276680168848bd861b307cf83f51rileya@google.com        fTree->unref();
4307a05d5130ee0d8444960fdba574e69b7254f1dfrobertphillips@google.com    }
4461348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.comprotected:
457fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org    virtual const char* onGetName() SK_OVERRIDE {
4661348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        return fName.c_str();
47981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    }
487fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
49e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
50981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        for (int i = 0; i < SkBENCHLOOP(100); ++i) {
51981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            for (int j = 0; j < NUM_BUILD_RECTS; ++j) {
52981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                fTree->insert(reinterpret_cast<void*>(j), fProc(rand, j, NUM_BUILD_RECTS),
53981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                              fBulkLoad);
54981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            }
55981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            fTree->flushDeferredInserts();
56981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            fTree->clear();
57981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        }
58981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    }
59981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comprivate:
60981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkBBoxHierarchy* fTree;
61981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    MakeRectProc fProc;
6261348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com    SkString fName;
63981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    bool fBulkLoad;
64981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    typedef SkBenchmark INHERITED;
65981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com};
66981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
67981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com// Time how long it takes to perform queries on an R-Tree, bulk-loaded or not
68981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comclass BBoxQueryBench : public SkBenchmark {
69981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.compublic:
70981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    enum QueryType {
71981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        kSmall_QueryType, // small queries
72981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        kLarge_QueryType, // large queries
73981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        kRandom_QueryType,// randomly sized queries
74981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        kFull_QueryType   // queries that cover everything
75981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    };
76981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
776c778164a743f8760dca251524d51848548b436fskia.committer@gmail.com    BBoxQueryBench(void* param, const char* name, MakeRectProc proc, bool bulkLoad,
78981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    QueryType q, SkBBoxHierarchy* tree)
796c778164a743f8760dca251524d51848548b436fskia.committer@gmail.com        : INHERITED(param)
80981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        , fTree(tree)
81981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        , fProc(proc)
82981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        , fBulkLoad(bulkLoad)
83981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        , fQuery(q) {
8461348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        fName.append("rtree_");
8561348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        fName.append(name);
8661348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        fName.append("_query");
8761348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        if (fBulkLoad) {
8861348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com            fName.append("_bulk");
8961348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        }
909dc2713fc4a75e7fbee2f985057fde680a07c7f0tomhudson@google.com        fIsRendering = false;
91981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    }
9207a05d5130ee0d8444960fdba574e69b7254f1dfrobertphillips@google.com    virtual ~BBoxQueryBench() {
934813458d89fb276680168848bd861b307cf83f51rileya@google.com        fTree->unref();
9407a05d5130ee0d8444960fdba574e69b7254f1dfrobertphillips@google.com    }
95981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comprotected:
967fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org    virtual const char* onGetName() SK_OVERRIDE {
9761348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com        return fName.c_str();
98981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    }
997fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org    virtual void onPreDraw() SK_OVERRIDE {
100e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
1017fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org        for (int j = 0; j < SkBENCHLOOP(NUM_QUERY_RECTS); ++j) {
1027fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org            fTree->insert(reinterpret_cast<void*>(j), fProc(rand, j,
1037fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org                           SkBENCHLOOP(NUM_QUERY_RECTS)), fBulkLoad);
1047fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org        }
1057fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org        fTree->flushDeferredInserts();
1067fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org    }
1077fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org
1087fb83c8c72f2a035e84a4ee4ee6abcf5a4872166commit-bot@chromium.org    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
109e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
110981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        for (int i = 0; i < SkBENCHLOOP(NUM_QUERIES); ++i) {
111981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            SkTDArray<void*> hits;
112981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            SkIRect query;
113981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            switch(fQuery) {
114981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                case kSmall_QueryType:
115981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fLeft = rand.nextU() % GENERATE_EXTENTS;
116981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fTop = rand.nextU() % GENERATE_EXTENTS;
117981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fRight = query.fLeft + (GENERATE_EXTENTS / 20);
118981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fBottom = query.fTop + (GENERATE_EXTENTS / 20);
119981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    break;
120981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                case kLarge_QueryType:
121981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fLeft = rand.nextU() % GENERATE_EXTENTS;
122981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fTop = rand.nextU() % GENERATE_EXTENTS;
123981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fRight = query.fLeft + (GENERATE_EXTENTS / 2);
124981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fBottom = query.fTop + (GENERATE_EXTENTS / 2);
125981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    break;
126981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                case kFull_QueryType:
127981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fLeft = -GENERATE_EXTENTS;
128981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fTop = -GENERATE_EXTENTS;
129981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fRight = 2 * GENERATE_EXTENTS;
130981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fBottom = 2 * GENERATE_EXTENTS;
131981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    break;
132981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                default: // fallthrough
133981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                case kRandom_QueryType:
134981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fLeft = rand.nextU() % GENERATE_EXTENTS;
135981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fTop = rand.nextU() % GENERATE_EXTENTS;
136981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fRight = query.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 2);
137981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    query.fBottom = query.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 2);
138981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                    break;
139981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            };
140981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com            fTree->search(query, &hits);
141981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com        }
142981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    }
143981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comprivate:
144981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkBBoxHierarchy* fTree;
145981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    MakeRectProc fProc;
14661348d1cc68e7fa40d08c2c4bc03218305033838rileya@google.com    SkString fName;
147981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    bool fBulkLoad;
148981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    QueryType fQuery;
149981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    typedef SkBenchmark INHERITED;
150981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com};
151981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
152e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_simple_rect(SkRandom&, int index, int numRects) {
153981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkIRect out = {0, 0, GENERATE_EXTENTS, GENERATE_EXTENTS};
154981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    return out;
155981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
156981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
157e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_concentric_rects_increasing(SkRandom&, int index, int numRects) {
158981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkIRect out = {0, 0, index + 1, index + 1};
159981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    return out;
160981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
161981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
162e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_concentric_rects_decreasing(SkRandom&, int index, int numRects) {
163981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkIRect out = {0, 0, numRects - index, numRects - index};
164981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    return out;
165981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
166981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
167e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_XYordered_rects(SkRandom& rand, int index, int numRects) {
1688c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    SkIRect out;
1698c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    out.fLeft = index % GRID_WIDTH;
1708c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    out.fTop = index / GRID_WIDTH;
1710d60db60109951053f97bd6deac8fe00526b7231sglez@google.com    out.fRight  = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 3);
1720d60db60109951053f97bd6deac8fe00526b7231sglez@google.com    out.fBottom = out.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 3);
1738c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return out;
1748c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
175e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_YXordered_rects(SkRandom& rand, int index, int numRects) {
1768c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    SkIRect out;
1778c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    out.fLeft = index / GRID_WIDTH;
1788c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    out.fTop = index % GRID_WIDTH;
1790d60db60109951053f97bd6deac8fe00526b7231sglez@google.com    out.fRight  = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 3);
1800d60db60109951053f97bd6deac8fe00526b7231sglez@google.com    out.fBottom = out.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 3);
1818c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return out;
1828c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
1838c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com
184e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_point_rects(SkRandom& rand, int index, int numRects) {
185981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkIRect out;
186981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fLeft   = rand.nextU() % GENERATE_EXTENTS;
187981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fTop    = rand.nextU() % GENERATE_EXTENTS;
188981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fRight  = out.fLeft + (GENERATE_EXTENTS / 200);
189981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fBottom = out.fTop + (GENERATE_EXTENTS / 200);
190981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    return out;
191981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
192981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
193e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_random_rects(SkRandom& rand, int index, int numRects) {
194981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkIRect out;
195981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fLeft   = rand.nextS() % GENERATE_EXTENTS;
196981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fTop    = rand.nextS() % GENERATE_EXTENTS;
197981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fRight  = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 5);
198981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fBottom = out.fTop  + 1 + rand.nextU() % (GENERATE_EXTENTS / 5);
199981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    return out;
200981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
201981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
202e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic inline SkIRect make_large_rects(SkRandom& rand, int index, int numRects) {
203981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    SkIRect out;
204981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fLeft   = rand.nextU() % GENERATE_EXTENTS;
205981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fTop    = rand.nextU() % GENERATE_EXTENTS;
206981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fRight  = out.fLeft + (GENERATE_EXTENTS / 3);
207981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    out.fBottom = out.fTop  + (GENERATE_EXTENTS / 3);
208981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com    return out;
209981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
210981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
211981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com///////////////////////////////////////////////////////////////////////////////
212981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
21305af1afd429808913683da75644e48bece12e820humper@google.comstatic inline SkBenchmark* Fact0(void* p) {
2148c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "XYordered", &make_XYordered_rects, false,
215981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                      SkRTree::Create(5, 16)));
216981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
21705af1afd429808913683da75644e48bece12e820humper@google.comstatic inline SkBenchmark* Fact1(void* p) {
2188c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "XYordered", &make_XYordered_rects, true,
219981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                      SkRTree::Create(5, 16)));
220981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
22105af1afd429808913683da75644e48bece12e820humper@google.comstatic inline SkBenchmark* Fact2(void* p) {
2228c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "(unsorted)XYordered", &make_XYordered_rects, true,
2238c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16, 1, false)));
224981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
22505af1afd429808913683da75644e48bece12e820humper@google.comstatic inline SkBenchmark* Fact3(void* p) {
2268c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "XYordered", &make_XYordered_rects, true,
227981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)));
228981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
22905af1afd429808913683da75644e48bece12e820humper@google.comstatic inline SkBenchmark* Fact4(void* p) {
2308c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "(unsorted)XYordered", &make_XYordered_rects, true,
2318c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16, 1, false)));
2328c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2338c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com
2348c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact5(void* p) {
2358c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "YXordered", &make_YXordered_rects, false,
2368c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16)));
2378c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2388c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact6(void* p) {
2398c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "YXordered", &make_YXordered_rects, true,
2408c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16)));
2418c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2428c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact7(void* p) {
2438c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "(unsorted)YXordered", &make_YXordered_rects, true,
2448c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16, 1, false)));
2458c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2468c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact8(void* p) {
2478c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "YXordered", &make_YXordered_rects, true,
248981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)));
249981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com}
2508c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact9(void* p) {
2518c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "(unsorted)YXordered", &make_YXordered_rects, true,
2528c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16, 1, false)));
2538c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
254981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.com
2558c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact10(void* p) {
2568c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "random", &make_random_rects, false,
2578c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16)));
2588c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2598c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact11(void* p) {
2608c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "random", &make_random_rects, true,
2618c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16)));
2628c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2638c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact12(void* p) {
2648c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "(unsorted)random", &make_random_rects, true,
2658c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      SkRTree::Create(5, 16, 1, false)));
2668c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2678c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact13(void* p) {
2688c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "random", &make_random_rects, true,
2698c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)));
2708c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2718c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact14(void* p) {
2728c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "(unsorted)random", &make_random_rects, true,
2738c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16, 1, false)));
2748c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2758c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com
2768c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact15(void* p) {
2778c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "concentric",
2788c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      &make_concentric_rects_increasing, true, SkRTree::Create(5, 16)));
2798c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2808c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact16(void* p) {
2818c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxBuildBench, (p, "(unsorted)concentric",
2828c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      &make_concentric_rects_increasing, true, SkRTree::Create(5, 16, 1, false)));
2838c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2848c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact17(void* p) {
2858c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "concentric", &make_concentric_rects_increasing, true,
2868c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)));
2878c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2888c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic inline SkBenchmark* Fact18(void* p) {
2898c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com    return SkNEW_ARGS(BBoxQueryBench, (p, "(unsorted)concentric", &make_concentric_rects_increasing, true,
2908c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16, 1, false)));
2918c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com}
2928c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.com
2938c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg18(Fact18);
2948c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg17(Fact17);
2958c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg16(Fact16);
2968c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg15(Fact15);
2978c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg14(Fact14);
2988c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg13(Fact13);
2998c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg12(Fact12);
3008c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg11(Fact11);
3018c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg10(Fact10);
3028c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg9(Fact9);
3038c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg8(Fact8);
3048c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg7(Fact7);
3058c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg6(Fact6);
3068c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg5(Fact5);
307981b33abc65d968523d78d45e69cb071e8e03e91rileya@google.comstatic BenchRegistry gReg4(Fact4);
3088c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg3(Fact3);
3098c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg2(Fact2);
3108c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg1(Fact1);
3118c902126a90f37b6a038a78488c6215fa0c34b7dsglez@google.comstatic BenchRegistry gReg0(Fact0);
312