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