OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "Benchmark.h" | 9 #include "Benchmark.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
11 #include "SkRTree.h" | 11 #include "SkRTree.h" |
12 #include "SkRandom.h" | 12 #include "SkRandom.h" |
13 #include "SkString.h" | 13 #include "SkString.h" |
14 | 14 |
15 // confine rectangles to a smallish area, so queries generally hit something, an
d overlap occurs: | 15 // confine rectangles to a smallish area, so queries generally hit something, an
d overlap occurs: |
16 static const SkScalar GENERATE_EXTENTS = 1000.0f; | 16 static const SkScalar GENERATE_EXTENTS = 1000.0f; |
17 static const int NUM_BUILD_RECTS = 500; | 17 static const int NUM_BUILD_RECTS = 500; |
18 static const int NUM_QUERY_RECTS = 5000; | 18 static const int NUM_QUERY_RECTS = 5000; |
19 static const int GRID_WIDTH = 100; | 19 static const int GRID_WIDTH = 100; |
20 | 20 |
21 typedef SkRect (*MakeRectProc)(SkRandom&, int, int); | 21 typedef SkRect (*MakeRectProc)(SkRandom&, int, int); |
22 | 22 |
23 // Time how long it takes to build an R-Tree either bulk-loaded or not | 23 // Time how long it takes to build an R-Tree either bulk-loaded or not |
24 class RTreeBuildBench : public Benchmark { | 24 class RTreeBuildBench : public Benchmark { |
25 public: | 25 public: |
26 RTreeBuildBench(const char* name, MakeRectProc proc, bool bulkLoad, | 26 RTreeBuildBench(const char* name, MakeRectProc proc, bool bulkLoad, |
27 SkBBoxHierarchy* tree) | 27 SkRTree* tree) |
28 : fTree(tree) | 28 : fTree(tree) |
29 , fProc(proc) | 29 , fProc(proc) |
30 , fBulkLoad(bulkLoad) { | 30 , fBulkLoad(bulkLoad) { |
31 fName.append("rtree_"); | 31 fName.append("rtree_"); |
32 fName.append(name); | 32 fName.append(name); |
33 fName.append("_build"); | 33 fName.append("_build"); |
34 if (fBulkLoad) { | 34 if (fBulkLoad) { |
35 fName.append("_bulk"); | 35 fName.append("_bulk"); |
36 } | 36 } |
37 } | 37 } |
(...skipping 13 matching lines...) Expand all Loading... |
51 SkRandom rand; | 51 SkRandom rand; |
52 for (int i = 0; i < loops; ++i) { | 52 for (int i = 0; i < loops; ++i) { |
53 for (int j = 0; j < NUM_BUILD_RECTS; ++j) { | 53 for (int j = 0; j < NUM_BUILD_RECTS; ++j) { |
54 fTree->insert(j, fProc(rand, j, NUM_BUILD_RECTS), fBulkLoad); | 54 fTree->insert(j, fProc(rand, j, NUM_BUILD_RECTS), fBulkLoad); |
55 } | 55 } |
56 fTree->flushDeferredInserts(); | 56 fTree->flushDeferredInserts(); |
57 fTree->clear(); | 57 fTree->clear(); |
58 } | 58 } |
59 } | 59 } |
60 private: | 60 private: |
61 SkBBoxHierarchy* fTree; | 61 SkRTree* fTree; |
62 MakeRectProc fProc; | 62 MakeRectProc fProc; |
63 SkString fName; | 63 SkString fName; |
64 bool fBulkLoad; | 64 bool fBulkLoad; |
65 typedef Benchmark INHERITED; | 65 typedef Benchmark INHERITED; |
66 }; | 66 }; |
67 | 67 |
68 // Time how long it takes to perform queries on an R-Tree, bulk-loaded or not | 68 // Time how long it takes to perform queries on an R-Tree, bulk-loaded or not |
69 class RTreeQueryBench : public Benchmark { | 69 class RTreeQueryBench : public Benchmark { |
70 public: | 70 public: |
71 enum QueryType { | 71 enum QueryType { |
72 kSmall_QueryType, // small queries | 72 kSmall_QueryType, // small queries |
73 kLarge_QueryType, // large queries | 73 kLarge_QueryType, // large queries |
74 kRandom_QueryType,// randomly sized queries | 74 kRandom_QueryType,// randomly sized queries |
75 kFull_QueryType // queries that cover everything | 75 kFull_QueryType // queries that cover everything |
76 }; | 76 }; |
77 | 77 |
78 RTreeQueryBench(const char* name, MakeRectProc proc, bool bulkLoad, | 78 RTreeQueryBench(const char* name, MakeRectProc proc, bool bulkLoad, |
79 QueryType q, SkBBoxHierarchy* tree) | 79 QueryType q, SkRTree* tree) |
80 : fTree(tree) | 80 : fTree(tree) |
81 , fProc(proc) | 81 , fProc(proc) |
82 , fBulkLoad(bulkLoad) | 82 , fBulkLoad(bulkLoad) |
83 , fQuery(q) { | 83 , fQuery(q) { |
84 fName.append("rtree_"); | 84 fName.append("rtree_"); |
85 fName.append(name); | 85 fName.append(name); |
86 fName.append("_query"); | 86 fName.append("_query"); |
87 if (fBulkLoad) { | 87 if (fBulkLoad) { |
88 fName.append("_bulk"); | 88 fName.append("_bulk"); |
89 } | 89 } |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 &make_concentric_rects_increasing, true, SkRTree::Create(5
, 16, 1, false))); | 257 &make_concentric_rects_increasing, true, SkRTree::Create(5
, 16, 1, false))); |
258 ) | 258 ) |
259 DEF_BENCH( | 259 DEF_BENCH( |
260 return SkNEW_ARGS(RTreeQueryBench, ("concentric", &make_concentric_rects_inc
reasing, true, | 260 return SkNEW_ARGS(RTreeQueryBench, ("concentric", &make_concentric_rects_inc
reasing, true, |
261 RTreeQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)
)); | 261 RTreeQueryBench::kRandom_QueryType, SkRTree::Create(5, 16)
)); |
262 ) | 262 ) |
263 DEF_BENCH( | 263 DEF_BENCH( |
264 return SkNEW_ARGS(RTreeQueryBench, ("(unsorted)concentric", &make_concentric
_rects_increasing, true, | 264 return SkNEW_ARGS(RTreeQueryBench, ("(unsorted)concentric", &make_concentric
_rects_increasing, true, |
265 RTreeQueryBench::kRandom_QueryType, SkRTree::Create(5, 16,
1, false))); | 265 RTreeQueryBench::kRandom_QueryType, SkRTree::Create(5, 16,
1, false))); |
266 ) | 266 ) |
OLD | NEW |