diff options
Diffstat (limited to 'bench/MatrixConvolutionBench.cpp')
-rw-r--r-- | bench/MatrixConvolutionBench.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/bench/MatrixConvolutionBench.cpp b/bench/MatrixConvolutionBench.cpp new file mode 100644 index 0000000000..1f6a004270 --- /dev/null +++ b/bench/MatrixConvolutionBench.cpp @@ -0,0 +1,65 @@ +/* + * Copyright 2012 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 "SkPaint.h" +#include "SkRandom.h" +#include "SkString.h" +#include "SkMatrixConvolutionImageFilter.h" + +class MatrixConvolutionBench : public SkBenchmark { + SkMatrixConvolutionImageFilter::TileMode fTileMode; + +public: + MatrixConvolutionBench(void* param, SkMatrixConvolutionImageFilter::TileMode tileMode) + : INHERITED(param), fName("matrixconvolution") { + SkISize kernelSize = SkISize::Make(3, 3); + SkScalar kernel[9] = { + SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), + SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), + SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), + }; + SkScalar gain = SkFloatToScalar(0.3f), bias = SkIntToScalar(100); + SkIPoint target = SkIPoint::Make(1, 1); + fFilter = new SkMatrixConvolutionImageFilter(kernelSize, kernel, gain, bias, target, tileMode); + } + + ~MatrixConvolutionBench() { + fFilter->unref(); + } + +protected: + virtual const char* onGetName() { + return fName.c_str(); + } + + virtual void onDraw(SkCanvas* canvas) { + SkPaint paint; + this->setupPaint(&paint); + paint.setAntiAlias(true); + SkRandom rand; + for (int i = 0; i < SkBENCHLOOP(3); i++) { + SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, + rand.nextUScalar1() * 400); + paint.setImageFilter(fFilter); + canvas->drawOval(r, paint); + } + } + +private: + typedef SkBenchmark INHERITED; + SkMatrixConvolutionImageFilter* fFilter; + SkString fName; +}; + +static SkBenchmark* Fact00(void* p) { return new MatrixConvolutionBench(p, SkMatrixConvolutionImageFilter::kClamp_TileMode); } +static SkBenchmark* Fact01(void* p) { return new MatrixConvolutionBench(p, SkMatrixConvolutionImageFilter::kRepeat_TileMode); } +static SkBenchmark* Fact02(void* p) { return new MatrixConvolutionBench(p, SkMatrixConvolutionImageFilter::kClampToBlack_TileMode); } + +static BenchRegistry gReg00(Fact00); +static BenchRegistry gReg01(Fact01); +static BenchRegistry gReg02(Fact02); |