skia2/bench/GrOrderedSetBench.cpp
tfarina f168b86d7f Remove Sk prefix from some bench classes.
This idea came while commenting on
https://codereview.chromium.org/343583005/

Since SkBenchmark, SkBenchLogger and SkGMBench are not part of the Skia library,
they should not have the Sk prefix.

BUG=None
TEST=make all
R=mtklein@google.com

Author: tfarina@chromium.org

Review URL: https://codereview.chromium.org/347823004
2014-06-19 12:32:29 -07:00

149 lines
3.7 KiB
C++

/*
* 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