| /* | 
 |  * 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 "SkRandom.h" | 
 | #include "SkString.h" | 
 | #if SK_SUPPORT_GPU | 
 | #include "GrOrderedSet.h" | 
 |  | 
 | static const int NUM_ELEMENTS = 1000; | 
 |  | 
 | // Time how long it takes to build a set | 
 | class GrOrderedSetBuildBench : public Benchmark { | 
 | public: | 
 |     GrOrderedSetBuildBench() { | 
 |         fName.append("ordered_set_build"); | 
 |     } | 
 |  | 
 |     virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { | 
 |         return kNonRendering_Backend == backend; | 
 |     } | 
 |  | 
 |     virtual ~GrOrderedSetBuildBench() {} | 
 |  | 
 | 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) { | 
 |             GrOrderedSet<int> set; | 
 |             for (int j = 0; j < NUM_ELEMENTS; ++j) { | 
 |                 set.insert(fData[j]); | 
 |             } | 
 |             set.reset(); | 
 |         } | 
 |     } | 
 |  | 
 | private: | 
 |     SkString fName; | 
 |     int fData[NUM_ELEMENTS]; | 
 |     typedef Benchmark INHERITED; | 
 | }; | 
 |  | 
 | // Time how long it takes to find elements in a set | 
 | class GrOrderedSetFindBench : public Benchmark { | 
 | public: | 
 |     GrOrderedSetFindBench() { | 
 |         fName.append("ordered_set_find"); | 
 |     } | 
 |  | 
 |     virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { | 
 |         return kNonRendering_Backend == backend; | 
 |     } | 
 |  | 
 |     virtual ~GrOrderedSetFindBench() {} | 
 |  | 
 | 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]; | 
 |     GrOrderedSet<int> fSet; | 
 |     typedef Benchmark INHERITED; | 
 | }; | 
 |  | 
 | // Time how long it takes to iterate over and remove all elements from set | 
 | class GrOrderedSetRemoveBench : public Benchmark { | 
 | public: | 
 |     GrOrderedSetRemoveBench() { | 
 |         fName.append("ordered_set_remove"); | 
 |     } | 
 |  | 
 |     virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { | 
 |         return kNonRendering_Backend == backend; | 
 |     } | 
 |  | 
 |     virtual ~GrOrderedSetRemoveBench() {} | 
 |  | 
 | 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 GrOrderedSet<int>::Iter SetIter; | 
 |         for (int i = 0; i < loops; ++i) { | 
 |             GrOrderedSet<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; | 
 |     GrOrderedSet<int> fSet; | 
 |     typedef Benchmark INHERITED; | 
 | }; | 
 |  | 
 | /////////////////////////////////////////////////////////////////////////////// | 
 |  | 
 | DEF_BENCH(return SkNEW_ARGS(GrOrderedSetBuildBench, ());) | 
 | DEF_BENCH(return SkNEW_ARGS(GrOrderedSetFindBench, ());) | 
 | DEF_BENCH(return SkNEW_ARGS(GrOrderedSetRemoveBench, ());) | 
 | #endif |