1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 8b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMask.h" 9f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkBlurMaskFilter.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 165acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#define MINI 0.01f 1725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#define SMALL SkIntToScalar(2) 1835c556f33e2c9316055537e5683c28ea1645ff49Herb Derby#define REAL 0.5f 1925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#define BIG SkIntToScalar(10) 204b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org#define REALBIG 100.5f 2135c556f33e2c9316055537e5683c28ea1645ff49Herb Derby// The value that produces a sigma of just over 2. 2235c556f33e2c9316055537e5683c28ea1645ff49Herb Derby#define CUTOVER 2.6f 2325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 2425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comstatic const char* gStyleName[] = { 2525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "normal", 2625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "solid", 2725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "outer", 2825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com "inner" 2925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 3025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 31f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass BlurBench : public Benchmark { 3225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkScalar fRadius; 33e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org SkBlurStyle fStyle; 34e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org uint32_t fFlags; 3525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkString fName; 3625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 3725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.compublic: 38e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org BlurBench(SkScalar rad, SkBlurStyle bs, uint32_t flags = 0) { 3925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fRadius = rad; 4025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com fStyle = bs; 4191f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org fFlags = flags; 4225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com const char* name = rad > 0 ? gStyleName[bs] : "none"; 43b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com const char* quality = flags & SkBlurMaskFilter::kHighQuality_BlurFlag ? "high_quality" 44b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com : "low_quality"; 458caac6447dd68655b57dfe876626a9733b191416tomhudson@google.com if (SkScalarFraction(rad) != 0) { 4691f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org fName.printf("blur_%.2f_%s_%s", SkScalarToFloat(rad), name, quality); 478caac6447dd68655b57dfe876626a9733b191416tomhudson@google.com } else { 48e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com fName.printf("blur_%d_%s_%s", SkScalarRoundToInt(rad), name, quality); 498caac6447dd68655b57dfe876626a9733b191416tomhudson@google.com } 5025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 51fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 5225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comprotected: 5325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com virtual const char* onGetName() { 5425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com return fName.c_str(); 5525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 56fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 57a1ebeb25e9acfcd801e089e063311d716b83b8a5mtklein virtual void onDraw(int loops, SkCanvas* canvas) { 5825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkPaint paint; 5925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com this->setupPaint(&paint); 6025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 6125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com paint.setAntiAlias(true); 6225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 63e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 643361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 6525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, 6625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com rand.nextUScalar1() * 400); 6725df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com r.offset(fRadius, fRadius); 6825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 6925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com if (fRadius > 0) { 70efdfd51b68a300d5c6e28743fe0344ca05d1cec9reed paint.setMaskFilter(SkBlurMaskFilter::Make(fStyle, 71efdfd51b68a300d5c6e28743fe0344ca05d1cec9reed SkBlurMask::ConvertRadiusToSigma(fRadius), 72efdfd51b68a300d5c6e28743fe0344ca05d1cec9reed fFlags)); 7325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 7425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com canvas->drawOval(r, paint); 7525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 7625df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com } 77fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 7825df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.comprivate: 79f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 8025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 8125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 825acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurBench(MINI, kNormal_SkBlurStyle);) 835acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurBench(MINI, kSolid_SkBlurStyle);) 845acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurBench(MINI, kOuter_SkBlurStyle);) 855acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurBench(MINI, kInner_SkBlurStyle);) 865acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 87e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kNormal_SkBlurStyle);) 88e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kSolid_SkBlurStyle);) 89e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kOuter_SkBlurStyle);) 90e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kInner_SkBlurStyle);) 91fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 92e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kNormal_SkBlurStyle);) 93e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kSolid_SkBlurStyle);) 94e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kOuter_SkBlurStyle);) 95e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kInner_SkBlurStyle);) 96fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 97e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kNormal_SkBlurStyle);) 98e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kSolid_SkBlurStyle);) 99e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kOuter_SkBlurStyle);) 100e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kInner_SkBlurStyle);) 10191f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 102e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kNormal_SkBlurStyle);) 103e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kSolid_SkBlurStyle);) 104e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kOuter_SkBlurStyle);) 105e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kInner_SkBlurStyle);) 106fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 1075acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurBench(MINI, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 1085acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 109e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 11091f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 111e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 11291f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 113e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 11491f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 115e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 11635c556f33e2c9316055537e5683c28ea1645ff49Herb DerbyDEF_BENCH(return new BlurBench(CUTOVER, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 11791f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 118e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(0, kNormal_SkBlurStyle);) 119