Index: bench/QuadTreeBench.cpp |
diff --git a/bench/QuadTreeBench.cpp b/bench/QuadTreeBench.cpp |
deleted file mode 100644 |
index 79078a8ae9b92211f35cef491565d6f7dbe760ab..0000000000000000000000000000000000000000 |
--- a/bench/QuadTreeBench.cpp |
+++ /dev/null |
@@ -1,216 +0,0 @@ |
-/* |
- * Copyright 2014 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#include "Benchmark.h" |
-#include "SkCanvas.h" |
-#include "SkQuadTree.h" |
-#include "SkRandom.h" |
-#include "SkString.h" |
- |
-// confine rectangles to a smallish area, so queries generally hit something, and overlap occurs: |
-static const int GENERATE_EXTENTS = 1000; |
-static const int NUM_BUILD_RECTS = 500; |
-static const int NUM_QUERY_RECTS = 5000; |
-static const int GRID_WIDTH = 100; |
-static const SkIRect QUAD_TREE_BOUNDS = SkIRect::MakeLTRB( |
- -GENERATE_EXTENTS, -GENERATE_EXTENTS, 2 * GENERATE_EXTENTS, 2 * GENERATE_EXTENTS); |
- |
-typedef SkIRect (*MakeRectProc)(SkRandom&, int, int); |
- |
-// Time how long it takes to build an QuadTree |
-class QuadTreeBuildBench : public Benchmark { |
-public: |
- QuadTreeBuildBench(const char* name, MakeRectProc proc, SkBBoxHierarchy* tree) |
- : fTree(tree) |
- , fProc(proc) { |
- fName.append("quadtree_"); |
- fName.append(name); |
- fName.append("_build"); |
- } |
- |
- virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { |
- return backend == kNonRendering_Backend; |
- } |
- |
- virtual ~QuadTreeBuildBench() { |
- fTree->unref(); |
- } |
-protected: |
- virtual const char* onGetName() SK_OVERRIDE { |
- return fName.c_str(); |
- } |
- virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
- SkRandom rand; |
- for (int i = 0; i < loops; ++i) { |
- for (int j = 0; j < NUM_BUILD_RECTS; ++j) { |
- fTree->insert(reinterpret_cast<void*>(j), fProc(rand, j, NUM_BUILD_RECTS), |
- false); |
- } |
- fTree->clear(); |
- } |
- } |
-private: |
- SkBBoxHierarchy* fTree; |
- MakeRectProc fProc; |
- SkString fName; |
- typedef Benchmark INHERITED; |
-}; |
- |
-// Time how long it takes to perform queries on an QuadTree |
-class QuadTreeQueryBench : public Benchmark { |
-public: |
- enum QueryType { |
- kSmall_QueryType, // small queries |
- kLarge_QueryType, // large queries |
- kRandom_QueryType,// randomly sized queries |
- kFull_QueryType // queries that cover everything |
- }; |
- |
- QuadTreeQueryBench(const char* name, MakeRectProc proc, |
- QueryType q, SkBBoxHierarchy* tree) |
- : fTree(tree) |
- , fProc(proc) |
- , fQuery(q) { |
- fName.append("quadtree_"); |
- fName.append(name); |
- fName.append("_query"); |
- } |
- |
- virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { |
- return backend == kNonRendering_Backend; |
- } |
- |
- virtual ~QuadTreeQueryBench() { |
- fTree->unref(); |
- } |
-protected: |
- virtual const char* onGetName() SK_OVERRIDE { |
- return fName.c_str(); |
- } |
- virtual void onPreDraw() SK_OVERRIDE { |
- SkRandom rand; |
- for (int j = 0; j < NUM_QUERY_RECTS; ++j) { |
- fTree->insert(reinterpret_cast<void*>(j), |
- fProc(rand, j, NUM_QUERY_RECTS), |
- false); |
- } |
- fTree->flushDeferredInserts(); |
- } |
- |
- virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
- SkRandom rand; |
- for (int i = 0; i < loops; ++i) { |
- SkTDArray<void*> hits; |
- SkIRect query; |
- switch(fQuery) { |
- case kSmall_QueryType: |
- query.fLeft = rand.nextU() % GENERATE_EXTENTS; |
- query.fTop = rand.nextU() % GENERATE_EXTENTS; |
- query.fRight = query.fLeft + (GENERATE_EXTENTS / 20); |
- query.fBottom = query.fTop + (GENERATE_EXTENTS / 20); |
- break; |
- case kLarge_QueryType: |
- query.fLeft = rand.nextU() % GENERATE_EXTENTS; |
- query.fTop = rand.nextU() % GENERATE_EXTENTS; |
- query.fRight = query.fLeft + (GENERATE_EXTENTS / 2); |
- query.fBottom = query.fTop + (GENERATE_EXTENTS / 2); |
- break; |
- case kFull_QueryType: |
- query.fLeft = -GENERATE_EXTENTS; |
- query.fTop = -GENERATE_EXTENTS; |
- query.fRight = 2 * GENERATE_EXTENTS; |
- query.fBottom = 2 * GENERATE_EXTENTS; |
- break; |
- default: // fallthrough |
- case kRandom_QueryType: |
- query.fLeft = rand.nextU() % GENERATE_EXTENTS; |
- query.fTop = rand.nextU() % GENERATE_EXTENTS; |
- query.fRight = query.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 2); |
- query.fBottom = query.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 2); |
- break; |
- }; |
- fTree->search(query, &hits); |
- } |
- } |
-private: |
- SkBBoxHierarchy* fTree; |
- MakeRectProc fProc; |
- SkString fName; |
- QueryType fQuery; |
- typedef Benchmark INHERITED; |
-}; |
- |
-static inline SkIRect make_concentric_rects_increasing(SkRandom&, int index, int numRects) { |
- SkIRect out = {0, 0, index + 1, index + 1}; |
- return out; |
-} |
- |
-static inline SkIRect make_XYordered_rects(SkRandom& rand, int index, int numRects) { |
- SkIRect out; |
- out.fLeft = index % GRID_WIDTH; |
- out.fTop = index / GRID_WIDTH; |
- out.fRight = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 3); |
- out.fBottom = out.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 3); |
- return out; |
-} |
- |
-static inline SkIRect make_YXordered_rects(SkRandom& rand, int index, int numRects) { |
- SkIRect out; |
- out.fLeft = index / GRID_WIDTH; |
- out.fTop = index % GRID_WIDTH; |
- out.fRight = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 3); |
- out.fBottom = out.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 3); |
- return out; |
-} |
- |
-static inline SkIRect make_random_rects(SkRandom& rand, int index, int numRects) { |
- SkIRect out; |
- out.fLeft = rand.nextS() % GENERATE_EXTENTS; |
- out.fTop = rand.nextS() % GENERATE_EXTENTS; |
- out.fRight = out.fLeft + 1 + rand.nextU() % (GENERATE_EXTENTS / 5); |
- out.fBottom = out.fTop + 1 + rand.nextU() % (GENERATE_EXTENTS / 5); |
- return out; |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeBuildBench, ("XYordered", &make_XYordered_rects, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeQueryBench, ("XYordered", &make_XYordered_rects, |
- QuadTreeQueryBench::kRandom_QueryType, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeBuildBench, ("YXordered", &make_YXordered_rects, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeQueryBench, ("YXordered", &make_YXordered_rects, |
- QuadTreeQueryBench::kRandom_QueryType, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeBuildBench, ("random", &make_random_rects, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeQueryBench, ("random", &make_random_rects, |
- QuadTreeQueryBench::kRandom_QueryType, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeBuildBench, ("concentric", &make_concentric_rects_increasing, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |
-DEF_BENCH( |
- return SkNEW_ARGS(QuadTreeQueryBench, ("concentric", &make_concentric_rects_increasing, |
- QuadTreeQueryBench::kRandom_QueryType, |
- SkNEW_ARGS(SkQuadTree, (QUAD_TREE_BOUNDS)))); |
-) |