BlurRectBench.cpp revision 3361471a3504ecd0351ff70f4c42d8d6fee963d4
14ee2ad04344446e610172a0e73949212923014dfSebastian Redl/* 22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor * Copyright 2013 Google Inc. 32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor * 42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor * Use of this source code is governed by a BSD-style license that can be 52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor * found in the LICENSE file. 62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor */ 72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "SkBenchmark.h" 92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "SkCanvas.h" 10a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl#include "SkPaint.h" 112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "SkRandom.h" 122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "SkShader.h" 132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "SkString.h" 147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl#include "SkBlurMask.h" 150eca89e9890db4d8336ce762a5b359a1d58ca02bArgyrios Kyrtzidis 16e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor#define SMALL SkIntToScalar(2) 17e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor#define REAL 1.5f 182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorstatic const SkScalar kMedium = SkIntToScalar(5); 192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#define BIG SkIntToScalar(10) 202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorstatic const SkScalar kMedBig = SkIntToScalar(20); 212a7fb27913999d132cf9e10e03dc5271faa2e9d3John McCall#define REALBIG 30.5f 2289eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis 230b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregorclass BlurRectBench: public SkBenchmark { 247a1fad38256eb4c5129359be85ba1ea1678eb5c9John McCall int fLoopCount; 252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkScalar fRadius; 26a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall SkString fName; 276ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl 287c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattnerpublic: 296a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor BlurRectBench(SkScalar rad) { 307c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner fRadius = rad; 3183d63c78810556d26b62ac4cbae2eda6cdd2570cSteve Naroff 3214f79002e58556798e86168c63e48d533287eda5Douglas Gregor if (fRadius > SkIntToScalar(25)) { 3310e286aa8d39fb51a21412850265d9dae74613eeChris Lattner fLoopCount = 100; 343251ceb90b3fec68e86d6dcfa58836e20a7205c3Douglas Gregor } else if (fRadius > SkIntToScalar(5)) { 3514f79002e58556798e86168c63e48d533287eda5Douglas Gregor fLoopCount = 1000; 36bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor } else { 372bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor fLoopCount = 10000; 3857016dda61498294120b1a881d9e6606337b29d9Douglas Gregor } 39ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor } 400a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor 4117fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregorprotected: 4217fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor virtual const char* onGetName() { 432596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar return fName.c_str(); 442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 45fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer 4614f79002e58556798e86168c63e48d533287eda5Douglas Gregor SkScalar radius() const { 4703013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer return fRadius; 48f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor } 493c304bd9ec2b4611572d4cbae9e1727bbecb5dc9Chris Lattner 50cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor void setName(const SkString& name) { 51f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor fName = name; 522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void onDraw(const int loops, SkCanvas*) { 55ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl SkPaint paint; 565f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner this->setupPaint(&paint); 575f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 585f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner paint.setAntiAlias(true); 596e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer 60ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl SkScalar pad = fRadius*3/2 + SK_Scalar1; 616e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer SkRect r = SkRect::MakeWH(2 * pad + SK_Scalar1, 2 * pad + SK_Scalar1); 626e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer 635f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner preBenchSetup(r); 645f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 656e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer for (int i = 0; i < loops; i++) { 66ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl makeBlurryRect(r); 67ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl } 682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void makeBlurryRect(const SkRect&) = 0; 7112b1c7615d4f9a2edc544be499f895f16ac100edChris Lattner virtual void preBenchSetup(const SkRect&) {} 722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorprivate: 733397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl typedef SkBenchmark INHERITED; 74a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl}; 7589eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis 762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorclass BlurRectDirectBench: public BlurRectBench { 782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor public: 798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl BlurRectDirectBench(SkScalar rad) : INHERITED(rad) { 802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkString name; 8189eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis 828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl if (SkScalarFraction(rad) != 0) { 832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor name.printf("blurrect_direct_%.2f", SkScalarToFloat(rad)); 842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } else { 852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor name.printf("blurrect_direct_%d", SkScalarRoundToInt(rad)); 862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor this->setName(name); 892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorprotected: 912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void makeBlurryRect(const SkRect& r) SK_OVERRIDE { 922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkMask mask; 932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkBlurMask::BlurRect(SkBlurMask::ConvertRadiusToSigma(this->radius()), 943397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl &mask, r, SkBlurMask::kNormal_Style); 95b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie SkMask::FreeImage(mask.fImage); 962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorprivate: 983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl typedef BlurRectBench INHERITED; 992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor}; 1008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorclass BlurRectSeparableBench: public BlurRectBench { 1022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1033397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlpublic: 1042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor BlurRectSeparableBench(SkScalar rad) : INHERITED(rad) { 1058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl fSrcMask.fImage = NULL; 1062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1083397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl ~BlurRectSeparableBench() { 1091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SkMask::FreeImage(fSrcMask.fImage); 1108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 1112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorprotected: 1133397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl virtual void preBenchSetup(const SkRect& r) SK_OVERRIDE { 114df1550fc59b51681d37225934fe4e3acac321621Richard Smith SkMask::FreeImage(fSrcMask.fImage); 115df1550fc59b51681d37225934fe4e3acac321621Richard Smith 1168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl r.roundOut(&fSrcMask.fBounds); 1172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor fSrcMask.fFormat = SkMask::kA8_Format; 1182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor fSrcMask.fRowBytes = fSrcMask.fBounds.width(); 1193397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl fSrcMask.fImage = SkMask::AllocImage(fSrcMask.computeTotalImageSize()); 120df1550fc59b51681d37225934fe4e3acac321621Richard Smith 1218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl memset(fSrcMask.fImage, 0xff, fSrcMask.computeTotalImageSize()); 1222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1243397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl SkMask fSrcMask; 1251eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpprivate: 1261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump typedef BlurRectBench INHERITED; 1278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl}; 1282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorclass BlurRectBoxFilterBench: public BlurRectSeparableBench { 1303397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlpublic: 1312cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor BlurRectBoxFilterBench(SkScalar rad) : INHERITED(rad) { 1322cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkString name; 1330953e767ff7817f97b3ab20896b229891eeff45bJohn McCall 1342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor if (SkScalarFraction(rad) != 0) { 1352cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor name.printf("blurrect_boxfilter_%.2f", SkScalarToFloat(rad)); 1363397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } else { 1372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor name.printf("blurrect_boxfilter_%d", SkScalarRoundToInt(rad)); 1382cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor this->setName(name); 1412cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1423397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorprotected: 1448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1452cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void makeBlurryRect(const SkRect&) SK_OVERRIDE { 1462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkMask mask; 1473397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl mask.fImage = NULL; 1482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkBlurMask::BoxBlur(&mask, fSrcMask, SkBlurMask::ConvertRadiusToSigma(this->radius()), 1497e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor SkBlurMask::kNormal_Style, 1507e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor SkBlurMask::kHigh_Quality); 151c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor SkMask::FreeImage(mask.fImage); 1528538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 1532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorprivate: 1542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor typedef BlurRectSeparableBench INHERITED; 1553397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl}; 1562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorclass BlurRectGaussianBench: public BlurRectSeparableBench { 158e86d78cf4754a6aef2cf9a33d847aa15338e276fBob Wilsonpublic: 1598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl BlurRectGaussianBench(SkScalar rad) : INHERITED(rad) { 1602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkString name; 1612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1623397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl if (SkScalarFraction(rad) != 0) { 1632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor name.printf("blurrect_gaussian_%.2f", SkScalarToFloat(rad)); 1648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } else { 1652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor name.printf("blurrect_gaussian_%d", SkScalarRoundToInt(rad)); 1662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1673397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor this->setName(name); 169264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola } 170264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola 171a49218e17bcbb1acde0245773173e2c0c42f4f19Eli Friedmanprotected: 172425ef72306d4ff6b3698b744353e5f0e56b4b884Rafael Espindola 173ab8bbf4ebd3e3e6eab913cb044772a62b7581941Douglas Gregor virtual void makeBlurryRect(const SkRect&) SK_OVERRIDE { 174264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola SkMask mask; 175f85e193739c953358c865005855253af4f68a497John McCall mask.fImage = NULL; 1762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SkBlurMask::BlurGroundTruth(SkBlurMask::ConvertRadiusToSigma(this->radius()), 1772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor &mask, fSrcMask, SkBlurMask::kNormal_Style); 1783397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl SkMask::FreeImage(mask.fImage); 1792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1808538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlprivate: 1812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor typedef BlurRectSeparableBench INHERITED; 1822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor}; 1833397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectBoxFilterBench(SMALL);) 1852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectBoxFilterBench(BIG);) 1862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectBoxFilterBench(REALBIG);) 1872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectBoxFilterBench(REAL);) 1882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SMALL);) 189eefb3d5b49c844347f212073a7e975b8118fe8e9Richard SmithDEF_BENCH(return new BlurRectGaussianBench(BIG);) 1902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(REALBIG);) 191c938c1668b4fd12af154e965dd935a89e4801a70Douglas GregorDEF_BENCH(return new BlurRectGaussianBench(REAL);) 19260618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlDEF_BENCH(return new BlurRectDirectBench(SMALL);) 19360618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlDEF_BENCH(return new BlurRectDirectBench(BIG);) 19460618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlDEF_BENCH(return new BlurRectDirectBench(REALBIG);) 19560618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlDEF_BENCH(return new BlurRectDirectBench(REAL);) 19660618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl 19760618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlDEF_BENCH(return new BlurRectDirectBench(kMedium);) 19860618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian RedlDEF_BENCH(return new BlurRectDirectBench(kMedBig);) 1997bb698aa054de4c0e0aa23973b2c62dac9611262Richard Smith 2007bb698aa054de4c0e0aa23973b2c62dac9611262Richard SmithDEF_BENCH(return new BlurRectBoxFilterBench(kMedium);) 2017bb698aa054de4c0e0aa23973b2c62dac9611262Richard SmithDEF_BENCH(return new BlurRectBoxFilterBench(kMedBig);) 202b9d0b76e42fd2d4cdfd135220302458d03ad09feRichard Smith 203b9d0b76e42fd2d4cdfd135220302458d03ad09feRichard Smith#if 0 20460618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl// disable Gaussian benchmarks; the algorithm works well enough 2058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl// and serves as a baseline for ground truth, but it's too slow 2062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// to use in production for non-trivial radii, so no real point 2072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// in having the bots benchmark it all the time. 2083397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 209ed97649e9574b9d854fa4d6109c9333ae0993554John McCallDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(1));) 2108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(2));) 211ed97649e9574b9d854fa4d6109c9333ae0993554John McCallDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(3));) 212ed97649e9574b9d854fa4d6109c9333ae0993554John McCallDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(4));) 2133397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(5));) 2142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(6));) 2159763e221e16026ddf487d2564ed349d2c874a1a1Argyrios KyrtzidisDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(7));) 2169763e221e16026ddf487d2564ed349d2c874a1a1Argyrios KyrtzidisDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(8));) 2178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(9));) 2182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(10));) 2192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(11));) 2203397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(12));) 221c9490c000f515c29f200a1215328d8ab9a0f3818Douglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(13));) 2228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(14));) 2232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(15));) 2242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(16));) 2253397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(17));) 2262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(18));) 2278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(19));) 2282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorDEF_BENCH(return new BlurRectGaussianBench(SkIntToScalar(20));) 2292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#endif 2303397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl