Chromium Code Reviews| Index: bench/GrSetBench.cpp |
| diff --git a/bench/GrSetBench.cpp b/bench/GrSetBench.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..42addc55fd1fcd9be93c850ded234bd8e2c85a3e |
| --- /dev/null |
| +++ b/bench/GrSetBench.cpp |
| @@ -0,0 +1,146 @@ |
| +/* |
| + * 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 "SkBenchmark.h" |
| +#include "SkCanvas.h" |
| +#include "SkRandom.h" |
| +#include "SkString.h" |
| +#include "GrSet.h" |
| + |
| +static const int NUM_ELEMENTS = 1000; |
| + |
| +// Time how long it takes to build a set |
| +class GrSetBuildBench : public SkBenchmark { |
| +public: |
| + GrSetBuildBench() { |
| + fName.append("grSet_build"); |
|
bsalomon
2014/02/26 21:56:09
For the names maybe we should use "set_<foo>" rath
|
| + } |
| + |
| + virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { |
| + return kNonRendering_Backend == backend; |
| + } |
| + |
| + virtual ~GrSetBuildBench() {} |
| + |
| +protected: |
| + virtual const char* onGetName() SK_OVERRIDE { |
| + return fName.c_str(); |
| + } |
| + |
| + virtual void onPreDraw() SK_OVERRIDE { |
| + SkRandom rand; |
| + for (int j = 0; j < NUM_ELEMENTS; ++j) { |
| + fData[j] = rand.nextU() % NUM_ELEMENTS; |
| + } |
| + } |
| + |
| + virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
| + for (int i = 0; i < loops; ++i) { |
| + GrSet<int> set; |
| + for (int j = 0; j < NUM_ELEMENTS; ++j) { |
| + set.insert(fData[j]); |
| + } |
| + set.reset(); |
| + } |
| + } |
| + |
| +private: |
| + SkString fName; |
| + int fData[NUM_ELEMENTS]; |
| + typedef SkBenchmark INHERITED; |
| +}; |
| + |
| +// Time how long it takes to find elements in a set |
| +class GrSetFindBench : public SkBenchmark { |
| +public: |
| + GrSetFindBench() { |
| + fName.append("grSet_find"); |
| + } |
| + |
| + virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { |
| + return kNonRendering_Backend == backend; |
| + } |
| + |
| + virtual ~GrSetFindBench() {} |
| + |
| +protected: |
| + virtual const char* onGetName() SK_OVERRIDE { |
| + return fName.c_str(); |
| + } |
| + |
| + virtual void onPreDraw() SK_OVERRIDE { |
| + SkRandom rand; |
| + for (int j = 0; j < NUM_ELEMENTS; ++j) { |
| + fData[j] = rand.nextU() % 1500; |
| + fSet.insert(rand.nextU() % NUM_ELEMENTS); |
| + } |
| + } |
| + |
| + virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
| + for (int i = 0; i < loops; ++i) { |
| + for (int j = 0; j < NUM_ELEMENTS; ++j) { |
| + fSet.find(fData[j]); |
| + } |
| + } |
| + } |
| + |
| +private: |
| + SkString fName; |
| + int fData[NUM_ELEMENTS]; |
| + GrSet<int> fSet; |
| + typedef SkBenchmark INHERITED; |
| +}; |
| + |
| +// Time how long it takes to iterate over and remove all elements from set |
| +class GrSetRemoveBench : public SkBenchmark { |
| +public: |
| + GrSetRemoveBench() { |
| + fName.append("grSet_remove"); |
| + } |
| + |
| + virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { |
| + return kNonRendering_Backend == backend; |
| + } |
| + |
| + virtual ~GrSetRemoveBench() {} |
| + |
| +protected: |
| + virtual const char* onGetName() SK_OVERRIDE { |
| + return fName.c_str(); |
| + } |
| + |
| + virtual void onPreDraw() SK_OVERRIDE { |
| + SkRandom rand; |
| + for (int j = 0; j < NUM_ELEMENTS; ++j) { |
| + fSet.insert(rand.nextU() % NUM_ELEMENTS); |
| + } |
| + } |
| + |
| + virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
| + typedef GrSet<int>::Iter SetIter; |
| + for (int i = 0; i < loops; ++i) { |
| + GrSet<int> testSet; |
| + for (SetIter s = fSet.begin(); fSet.end() != s; ++s) { |
| + testSet.insert(*s); |
| + } |
| + for (int j = 0; j < NUM_ELEMENTS; ++j) { |
| + testSet.remove(testSet.find(j)); |
| + } |
| + } |
| + } |
| + |
| +private: |
| + SkString fName; |
| + GrSet<int> fSet; |
| + typedef SkBenchmark INHERITED; |
| +}; |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| + |
| +DEF_BENCH(return SkNEW_ARGS(GrSetBuildBench, ());) |
| +DEF_BENCH(return SkNEW_ARGS(GrSetFindBench, ());) |
| +DEF_BENCH(return SkNEW_ARGS(GrSetRemoveBench, ());) |