BlurBench.cpp revision 3361471a3504ecd0351ff70f4c42d8d6fee963d4
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkBenchmark.h" 9b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMask.h" 1025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkCanvas.h" 1125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkPaint.h" 1225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkRandom.h" 1325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkShader.h" 1425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkString.h" 1525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkBlurMaskFilter.h" 1625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 1725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#define SMALL SkIntToScalar(2) 184b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org#define REAL 1.5f 1925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#define BIG SkIntToScalar(10) 204b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org#define REALBIG 100.5f 2125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 2225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic const char* gStyleName[] = { 2325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "normal", 2425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "solid", 2525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "outer", 2625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "inner" 2725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 2825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 2925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comclass BlurBench : public SkBenchmark { 3025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkScalar fRadius; 3125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkBlurMaskFilter::BlurStyle fStyle; 3291f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org uint32_t fFlags; 3325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkString fName; 3425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 3525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.compublic: 36410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com BlurBench(SkScalar rad, SkBlurMaskFilter::BlurStyle bs, uint32_t flags = 0) { 3725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fRadius = rad; 3825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fStyle = bs; 3991f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org fFlags = flags; 4025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com const char* name = rad > 0 ? gStyleName[bs] : "none"; 41b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com const char* quality = flags & SkBlurMaskFilter::kHighQuality_BlurFlag ? "high_quality" 42b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com : "low_quality"; 438caac6447dd68655b57dfe876626a9733b191416tomhudson@google.com if (SkScalarFraction(rad) != 0) { 4491f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org fName.printf("blur_%.2f_%s_%s", SkScalarToFloat(rad), name, quality); 458caac6447dd68655b57dfe876626a9733b191416tomhudson@google.com } else { 4691f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org fName.printf("blur_%d_%s_%s", SkScalarRound(rad), name, quality); 478caac6447dd68655b57dfe876626a9733b191416tomhudson@google.com } 4825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 49fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 5025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comprotected: 5125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com virtual const char* onGetName() { 5225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com return fName.c_str(); 5325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 54fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 553361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 5625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkPaint paint; 5725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com this->setupPaint(&paint); 5825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 5925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com paint.setAntiAlias(true); 6025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 61e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 623361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 6325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, 6425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com rand.nextUScalar1() * 400); 6525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com r.offset(fRadius, fRadius); 6625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 6725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com if (fRadius > 0) { 68b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com SkMaskFilter* mf = SkBlurMaskFilter::Create(fStyle, 69b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com SkBlurMask::ConvertRadiusToSigma(fRadius), 70b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com fFlags); 7125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com paint.setMaskFilter(mf)->unref(); 7225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 7325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com canvas->drawOval(r, paint); 7425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 7525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 76fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 7725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comprivate: 7825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com typedef SkBenchmark INHERITED; 7925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 8025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 81410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(SMALL, SkBlurMaskFilter::kNormal_BlurStyle);) 82410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(SMALL, SkBlurMaskFilter::kSolid_BlurStyle);) 83410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(SMALL, SkBlurMaskFilter::kOuter_BlurStyle);) 84410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(SMALL, SkBlurMaskFilter::kInner_BlurStyle);) 85fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 86410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(BIG, SkBlurMaskFilter::kNormal_BlurStyle);) 87410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(BIG, SkBlurMaskFilter::kSolid_BlurStyle);) 88410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(BIG, SkBlurMaskFilter::kOuter_BlurStyle);) 89410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(BIG, SkBlurMaskFilter::kInner_BlurStyle);) 90fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 91410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REALBIG, SkBlurMaskFilter::kNormal_BlurStyle);) 92410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REALBIG, SkBlurMaskFilter::kSolid_BlurStyle);) 93410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REALBIG, SkBlurMaskFilter::kOuter_BlurStyle);) 94410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REALBIG, SkBlurMaskFilter::kInner_BlurStyle);) 9591f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 96410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REAL, SkBlurMaskFilter::kNormal_BlurStyle);) 97410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REAL, SkBlurMaskFilter::kSolid_BlurStyle);) 98410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REAL, SkBlurMaskFilter::kOuter_BlurStyle);) 99410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REAL, SkBlurMaskFilter::kInner_BlurStyle);) 100fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 101410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(SMALL, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10291f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 103410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(BIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10491f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 105410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REALBIG, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10691f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 107410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(REAL, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10891f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 109410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurBench(0, SkBlurMaskFilter::kNormal_BlurStyle);) 110