180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc.
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBenchmark.h"
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkCanvas.h"
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkRTree.h"
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkRandom.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// confine rectangles to a smallish area, so queries generally hit something, and overlap occurs:
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const int GENERATE_EXTENTS = 1000;
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const int NUM_BUILD_RECTS = 500;
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const int NUM_QUERY_RECTS = 5000;
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const int NUM_QUERIES = 1000;
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
21e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergertypedef SkIRect (*MakeRectProc)(SkMWCRandom&, int, int);
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// Time how long it takes to build an R-Tree either bulk-loaded or not
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass BBoxBuildBench : public SkBenchmark {
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    BBoxBuildBench(void* param, const char* name, MakeRectProc proc, bool bulkLoad,
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    SkBBoxHierarchy* tree)
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        : INHERITED(param)
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fTree(tree)
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fProc(proc)
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fBulkLoad(bulkLoad) {
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fName.append("rtree_");
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fName.append(name);
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fName.append("_build");
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        if (fBulkLoad) {
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fName.append("_bulk");
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        }
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fIsRendering = false;
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~BBoxBuildBench() {
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fTree->unref();
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
44e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger    virtual const char* onGetName() SK_OVERRIDE {
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return fName.c_str();
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
47e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
48e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        SkMWCRandom rand;
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        for (int i = 0; i < SkBENCHLOOP(100); ++i) {
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            for (int j = 0; j < NUM_BUILD_RECTS; ++j) {
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                fTree->insert(reinterpret_cast<void*>(j), fProc(rand, j, NUM_BUILD_RECTS),
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                              fBulkLoad);
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            }
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fTree->flushDeferredInserts();
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fTree->clear();
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        }
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBBoxHierarchy* fTree;
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    MakeRectProc fProc;
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkString fName;
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool fBulkLoad;
6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef SkBenchmark INHERITED;
6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// Time how long it takes to perform queries on an R-Tree, bulk-loaded or not
6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass BBoxQueryBench : public SkBenchmark {
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    enum QueryType {
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kSmall_QueryType, // small queries
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kLarge_QueryType, // large queries
7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kRandom_QueryType,// randomly sized queries
7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        kFull_QueryType   // queries that cover everything
7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    };
7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    BBoxQueryBench(void* param, const char* name, MakeRectProc proc, bool bulkLoad,
7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    QueryType q, SkBBoxHierarchy* tree)
7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        : INHERITED(param)
7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fTree(tree)
8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fProc(proc)
8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fBulkLoad(bulkLoad)
8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        , fQuery(q) {
8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fName.append("rtree_");
8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fName.append(name);
8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fName.append("_query");
8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        if (fBulkLoad) {
8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fName.append("_bulk");
8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        }
8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fIsRendering = false;
9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~BBoxQueryBench() {
9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fTree->unref();
9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
95e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger    virtual const char* onGetName() SK_OVERRIDE {
9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return fName.c_str();
9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
98e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger    virtual void onPreDraw() SK_OVERRIDE {
99e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        SkMWCRandom rand;
100e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        for (int j = 0; j < SkBENCHLOOP(NUM_QUERY_RECTS); ++j) {
101e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger            fTree->insert(reinterpret_cast<void*>(j), fProc(rand, j,
102e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger                           SkBENCHLOOP(NUM_QUERY_RECTS)), fBulkLoad);
103e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        }
104e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        fTree->flushDeferredInserts();
105e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger    }
106e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger
107e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
108e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        SkMWCRandom rand;
10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        for (int i = 0; i < SkBENCHLOOP(NUM_QUERIES); ++i) {
11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            SkTDArray<void*> hits;
11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            SkIRect query;
11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            switch(fQuery) {
11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                case kSmall_QueryType:
11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fLeft = rand.nextU() % GENERATE_EXTENTS;
11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fTop = rand.nextU() % GENERATE_EXTENTS;
11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fRight = query.fLeft + (GENERATE_EXTENTS / 20);
11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fBottom = query.fTop + (GENERATE_EXTENTS / 20);
11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    break;
11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                case kLarge_QueryType:
12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fLeft = rand.nextU() % GENERATE_EXTENTS;
12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fTop = rand.nextU() % GENERATE_EXTENTS;
12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fRight = query.fLeft + (GENERATE_EXTENTS / 2);
12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fBottom = query.fTop + (GENERATE_EXTENTS / 2);
12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    break;
12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                case kFull_QueryType:
12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fLeft = -GENERATE_EXTENTS;
12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fTop = -GENERATE_EXTENTS;
12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fRight = 2 * GENERATE_EXTENTS;
12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fBottom = 2 * GENERATE_EXTENTS;
13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    break;
13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                default: // fallthrough
13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                case kRandom_QueryType:
13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fLeft = rand.nextU() % GENERATE_EXTENTS;
13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fTop = rand.nextU() % GENERATE_EXTENTS;
13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fRight = query.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 2);
13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    query.fBottom = query.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 2);
13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    break;
13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            };
13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fTree->search(query, &hits);
14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        }
14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBBoxHierarchy* fTree;
14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    MakeRectProc fProc;
14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkString fName;
14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool fBulkLoad;
14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    QueryType fQuery;
14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef SkBenchmark INHERITED;
14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
151e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerstatic inline SkIRect make_simple_rect(SkMWCRandom&, int index, int numRects) {
15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkIRect out = {0, 0, GENERATE_EXTENTS, GENERATE_EXTENTS};
15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return out;
15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
156e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerstatic inline SkIRect make_concentric_rects_increasing(SkMWCRandom&, int index, int numRects) {
15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkIRect out = {0, 0, index + 1, index + 1};
15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return out;
15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
161e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerstatic inline SkIRect make_concentric_rects_decreasing(SkMWCRandom&, int index, int numRects) {
16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkIRect out = {0, 0, numRects - index, numRects - index};
16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return out;
16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
166e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerstatic inline SkIRect make_point_rects(SkMWCRandom& rand, int index, int numRects) {
16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkIRect out;
16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fLeft   = rand.nextU() % GENERATE_EXTENTS;
16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fTop    = rand.nextU() % GENERATE_EXTENTS;
17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fRight  = out.fLeft + (GENERATE_EXTENTS / 200);
17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fBottom = out.fTop + (GENERATE_EXTENTS / 200);
17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return out;
17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
175e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerstatic inline SkIRect make_random_rects(SkMWCRandom& rand, int index, int numRects) {
17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkIRect out;
17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fLeft   = rand.nextS() % GENERATE_EXTENTS;
17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fTop    = rand.nextS() % GENERATE_EXTENTS;
17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fRight  = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 5);
18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fBottom = out.fTop  + 1 + rand.nextU() % (GENERATE_EXTENTS / 5);
18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return out;
18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
184e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerstatic inline SkIRect make_large_rects(SkMWCRandom& rand, int index, int numRects) {
18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkIRect out;
18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fLeft   = rand.nextU() % GENERATE_EXTENTS;
18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fTop    = rand.nextU() % GENERATE_EXTENTS;
18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fRight  = out.fLeft + (GENERATE_EXTENTS / 3);
18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    out.fBottom = out.fTop  + (GENERATE_EXTENTS / 3);
19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return out;
19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru///////////////////////////////////////////////////////////////////////////////
19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
195d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerstatic inline SkBenchmark* Fact0(void* p) {
19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return SkNEW_ARGS(BBoxBuildBench, (p, "random", &make_random_rects, true,
19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                      SkRTree::Create(5, 16)));
19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
199d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerstatic inline SkBenchmark* Fact1(void* p) {
20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return SkNEW_ARGS(BBoxBuildBench, (p, "random", &make_random_rects, false,
20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                      SkRTree::Create(5, 16)));
20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
203d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerstatic inline SkBenchmark* Fact2(void* p) {
20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return SkNEW_ARGS(BBoxBuildBench, (p, "concentric",
20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                      &make_concentric_rects_increasing, true, SkRTree::Create(5, 16)));
20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
207d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerstatic inline SkBenchmark* Fact3(void* p) {
20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return SkNEW_ARGS(BBoxQueryBench, (p, "random", &make_random_rects, true,
20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)));
21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
211d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerstatic inline SkBenchmark* Fact4(void* p) {
21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return SkNEW_ARGS(BBoxQueryBench, (p, "random", &make_random_rects, false,
21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                      BBoxQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)));
21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic BenchRegistry gReg0(Fact0);
21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic BenchRegistry gReg1(Fact1);
21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic BenchRegistry gReg2(Fact2);
21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic BenchRegistry gReg3(Fact3);
22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic BenchRegistry gReg4(Fact4);
221