diff options
Diffstat (limited to 'bench')
-rw-r--r-- | bench/PathUtilsBench.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/bench/PathUtilsBench.cpp b/bench/PathUtilsBench.cpp new file mode 100644 index 0000000000..6c8086fb9d --- /dev/null +++ b/bench/PathUtilsBench.cpp @@ -0,0 +1,72 @@ +/* + * Copyright 2011 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 "SkPathUtils.h" +#include "SkRandom.h" +#include "SkString.h" +#include "SkTime.h" + +#define H 16 +#define W 16 +#define STRIDE 2 + +//this function is redefined for sample, test, and bench. is there anywhere +// I can put it to avoid code duplcation? +static void fillRandomBits( int chars, char* bits ){ + SkRandom rand(SkTime::GetMSecs()); + + for (int i = 0; i < chars; ++i){ + bits[i] = rand.nextU(); + } +} + +static void path_proc(char* bits, SkPath* path) { + SkPathUtils::BitsToPath_Path(path, bits, H, W, STRIDE); +} + +static void region_proc(char* bits, SkPath* path) { + SkPathUtils::BitsToPath_Region(path, bits, H, W, STRIDE); +} + +/// Emulates the mix of rects blitted by gmail during scrolling +class PathUtilsBench : public Benchmark { + typedef void (*Proc)(char*, SkPath*); + + Proc fProc; + SkString fName; + char* bits[H * STRIDE]; + +public: + PathUtilsBench(Proc proc, const char name[]) { + fProc = proc; + fName.printf("pathUtils_%s", name); + + + } + +protected: + virtual const char* onGetName() { return fName.c_str(); } + + virtual void onDraw(const int loops, SkCanvas* canvas) { + + for (int i = 0; i < loops; ++i){ + //create a random 16x16 bitmap + fillRandomBits(H * STRIDE, (char*) &bits); + + //use passed function pointer to handle it + SkPath path; + fProc( (char*) &bits, &path); + } + } + +private: + typedef Benchmark INHERITED; +}; + +DEF_BENCH( return SkNEW_ARGS(PathUtilsBench, (path_proc, "path")); ) +DEF_BENCH( return SkNEW_ARGS(PathUtilsBench, (region_proc, "region")); ) |