15d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com/* 25d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com * Copyright 2013 Google Inc. 35d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com * 45d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com * Use of this source code is governed by a BSD-style license that can be 55d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com * found in the LICENSE file. 65d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com */ 75d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 95d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#include "SkBlurImageFilter.h" 105d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#include "SkCanvas.h" 115d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#include "SkPaint.h" 125d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#include "SkRandom.h" 135d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#include "SkShader.h" 145d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#include "SkString.h" 155d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 165d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#define FILTER_WIDTH_SMALL 32 175d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#define FILTER_HEIGHT_SMALL 32 185d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#define FILTER_WIDTH_LARGE 256 195d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com#define FILTER_HEIGHT_LARGE 256 205acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#define BLUR_SIGMA_MINI 0.5f 214b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org#define BLUR_SIGMA_SMALL 1.0f 224b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org#define BLUR_SIGMA_LARGE 10.0f 23c45ece5f7f53e2d1dacfe71d407ff495dfdc0f58commit-bot@chromium.org#define BLUR_SIGMA_HUGE 80.0f 245d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 25f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass BlurImageFilterBench : public Benchmark { 265d71adf4b187b41858139675a499a704af15b2cbsugoi@google.compublic: 27410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com BlurImageFilterBench(SkScalar sigmaX, SkScalar sigmaY, bool small) : 28410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com fIsSmall(small), fInitialized(false), fSigmaX(sigmaX), fSigmaY(sigmaY) { 295d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com fName.printf("blur_image_filter_%s_%.2f_%.2f", fIsSmall ? "small" : "large", 305d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkScalarToFloat(sigmaX), SkScalarToFloat(sigmaY)); 315d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 325d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 335d71adf4b187b41858139675a499a704af15b2cbsugoi@google.comprotected: 345d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 355d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com return fName.c_str(); 365d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 375d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 385d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com virtual void onPreDraw() SK_OVERRIDE { 395d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com if (!fInitialized) { 405d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com make_checkerboard(); 415d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com fInitialized = true; 425d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 435d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 445d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 453361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 465d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkPaint paint; 47cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org paint.setImageFilter(SkBlurImageFilter::Create(fSigmaX, fSigmaY))->unref(); 48c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 493361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 50c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawBitmap(fCheckerboard, 0, 0, &paint); 51c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 525d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 535d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 545d71adf4b187b41858139675a499a704af15b2cbsugoi@google.comprivate: 555d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com void make_checkerboard() { 565d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com const int w = fIsSmall ? FILTER_WIDTH_SMALL : FILTER_WIDTH_LARGE; 575d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com const int h = fIsSmall ? FILTER_HEIGHT_LARGE : FILTER_HEIGHT_LARGE; 586c22573edb234ad14df947278cfed010669a39a7reed fCheckerboard.allocN32Pixels(w, h); 596c22573edb234ad14df947278cfed010669a39a7reed SkCanvas canvas(fCheckerboard); 605d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.clear(0x00000000); 615d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkPaint darkPaint; 625d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com darkPaint.setColor(0xFF804020); 635d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkPaint lightPaint; 645d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com lightPaint.setColor(0xFF244484); 655d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com for (int y = 0; y < h; y += 16) { 665d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com for (int x = 0; x < w; x += 16) { 675d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.save(); 685d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.translate(SkIntToScalar(x), SkIntToScalar(y)); 695d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint); 705d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint); 715d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint); 725d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint); 735d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com canvas.restore(); 745d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 755d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 765d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com } 775d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 785d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkString fName; 795d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com bool fIsSmall; 805d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com bool fInitialized; 815d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkBitmap fCheckerboard; 825d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com SkScalar fSigmaX, fSigmaY; 83f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 845d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com}; 855d71adf4b187b41858139675a499a704af15b2cbsugoi@google.com 8627eec46d6925afc76c2241c6b3182ce9b3284c9esenorblanco@chromium.orgDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, 0, false);) 8727eec46d6925afc76c2241c6b3182ce9b3284c9esenorblanco@chromium.orgDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, 0, false);) 8827eec46d6925afc76c2241c6b3182ce9b3284c9esenorblanco@chromium.orgDEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_LARGE, false);) 8927eec46d6925afc76c2241c6b3182ce9b3284c9esenorblanco@chromium.orgDEF_BENCH(return new BlurImageFilterBench(0, BLUR_SIGMA_SMALL, false);) 905acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, true);) 915acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_MINI, BLUR_SIGMA_MINI, false);) 92410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, true);) 93410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_SMALL, BLUR_SIGMA_SMALL, false);) 94410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, true);) 95410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_LARGE, BLUR_SIGMA_LARGE, false);) 96c45ece5f7f53e2d1dacfe71d407ff495dfdc0f58commit-bot@chromium.orgDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, true);) 97c45ece5f7f53e2d1dacfe71d407ff495dfdc0f58commit-bot@chromium.orgDEF_BENCH(return new BlurImageFilterBench(BLUR_SIGMA_HUGE, BLUR_SIGMA_HUGE, false);) 98