BlurBench.cpp revision 25df8884bb616f8acf1ddbfb15d800a215c5ac65
125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkBenchmark.h" 225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkCanvas.h" 325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkPaint.h" 425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkRandom.h" 525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkShader.h" 625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkString.h" 725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkBlurMaskFilter.h" 825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#define SMALL SkIntToScalar(2) 1025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#define BIG SkIntToScalar(10) 1125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 1225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic const char* gStyleName[] = { 1325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "normal", 1425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "solid", 1525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "outer", 1625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "inner" 1725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 1825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 1925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comclass BlurBench : public SkBenchmark { 2025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkScalar fRadius; 2125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkBlurMaskFilter::BlurStyle fStyle; 2225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkString fName; 2325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 2425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.compublic: 2525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com BlurBench(void* param, SkScalar rad, SkBlurMaskFilter::BlurStyle bs) : INHERITED(param) { 2625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fRadius = rad; 2725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fStyle = bs; 2825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com const char* name = rad > 0 ? gStyleName[bs] : "none"; 2925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fName.printf("blur_%g_%s", rad, name); 3025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 3125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 3225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comprotected: 3325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com virtual const char* onGetName() { 3425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com return fName.c_str(); 3525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 3625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 3725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com virtual void onDraw(SkCanvas* canvas) { 3825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkPaint paint; 3925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com this->setupPaint(&paint); 4025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 4125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com paint.setAntiAlias(true); 4225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 4325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkRandom rand; 4425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com for (int i = 0; i < 10; i++) { 4525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, 4625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com rand.nextUScalar1() * 400); 4725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com r.offset(fRadius, fRadius); 4825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 4925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com if (fRadius > 0) { 5025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkMaskFilter* mf = SkBlurMaskFilter::Create(fRadius, fStyle, 0); 5125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com paint.setMaskFilter(mf)->unref(); 5225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 5325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com canvas->drawOval(r, paint); 5425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 5525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 5625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 5725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comprivate: 5825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com typedef SkBenchmark INHERITED; 5925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 6025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 6125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact00(void* p) { return new BlurBench(p, SMALL, SkBlurMaskFilter::kNormal_BlurStyle); } 6225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact01(void* p) { return new BlurBench(p, SMALL, SkBlurMaskFilter::kSolid_BlurStyle); } 6325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact02(void* p) { return new BlurBench(p, SMALL, SkBlurMaskFilter::kOuter_BlurStyle); } 6425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact03(void* p) { return new BlurBench(p, SMALL, SkBlurMaskFilter::kInner_BlurStyle); } 6525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 6625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact10(void* p) { return new BlurBench(p, BIG, SkBlurMaskFilter::kNormal_BlurStyle); } 6725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact11(void* p) { return new BlurBench(p, BIG, SkBlurMaskFilter::kSolid_BlurStyle); } 6825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact12(void* p) { return new BlurBench(p, BIG, SkBlurMaskFilter::kOuter_BlurStyle); } 6925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* Fact13(void* p) { return new BlurBench(p, BIG, SkBlurMaskFilter::kInner_BlurStyle); } 7025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 7125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic SkBenchmark* FactNone(void* p) { return new BlurBench(p, 0, SkBlurMaskFilter::kNormal_BlurStyle); } 7225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 7325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg00(Fact00); 7425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg01(Fact01); 7525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg02(Fact02); 7625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg03(Fact03); 7725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 7825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg10(Fact10); 7925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg11(Fact11); 8025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg12(Fact12); 8125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gReg13(Fact13); 8225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 8325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic BenchRegistry gRegNone(FactNone); 8425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 85