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 */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMask.h" 10f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkBlurMaskFilter.h" 1125df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkCanvas.h" 1225df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkPaint.h" 1325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkRandom.h" 1425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkShader.h" 1525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com#include "SkString.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 29f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass BlurBench : public Benchmark { 3025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkScalar fRadius; 31e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org SkBlurStyle fStyle; 32e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org uint32_t fFlags; 3325df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com SkString fName; 3425df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 3525df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.compublic: 36e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org BlurBench(SkScalar rad, SkBlurStyle 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 { 46e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com fName.printf("blur_%d_%s_%s", SkScalarRoundToInt(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: 78f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 7925df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com}; 8025df8884bb616f8acf1ddbfb15d800a215c5ac65reed@google.com 81e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kNormal_SkBlurStyle);) 82e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kSolid_SkBlurStyle);) 83e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kOuter_SkBlurStyle);) 84e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kInner_SkBlurStyle);) 85fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 86e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kNormal_SkBlurStyle);) 87e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kSolid_SkBlurStyle);) 88e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kOuter_SkBlurStyle);) 89e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kInner_SkBlurStyle);) 90fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 91e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kNormal_SkBlurStyle);) 92e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kSolid_SkBlurStyle);) 93e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kOuter_SkBlurStyle);) 94e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kInner_SkBlurStyle);) 9591f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 96e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kNormal_SkBlurStyle);) 97e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kSolid_SkBlurStyle);) 98e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kOuter_SkBlurStyle);) 99e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kInner_SkBlurStyle);) 100fc5100af556b40411c71ac90b2af7b03bd88eddareed@google.com 101e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(SMALL, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10291f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 103e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(BIG, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10491f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 105e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REALBIG, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10691f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 107e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(REAL, kNormal_SkBlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag);) 10891f489a65d436d36c7fe580af2775cd0cd13c8d2senorblanco@chromium.org 109e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.orgDEF_BENCH(return new BlurBench(0, kNormal_SkBlurStyle);) 110