15faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org/* 25faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Copyright 2012 Google Inc. 35faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * 45faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 55faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * found in the LICENSE file. 65faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org */ 7f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 85faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#include "SkCanvas.h" 9f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkMatrixConvolutionImageFilter.h" 105faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#include "SkPaint.h" 115faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#include "SkRandom.h" 125faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#include "SkString.h" 135faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org 14f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass MatrixConvolutionBench : public Benchmark { 155faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgpublic: 16410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com MatrixConvolutionBench(SkMatrixConvolutionImageFilter::TileMode tileMode, bool convolveAlpha) 17410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : fName("matrixconvolution") { 185faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkISize kernelSize = SkISize::Make(3, 3); 195faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkScalar kernel[9] = { 205faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), 215faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), 225faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), 235faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org }; 244b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org SkScalar gain = 0.3f, bias = SkIntToScalar(100); 2584cd099704b3896ca66081a96508572a924f850ccommit-bot@chromium.org SkIPoint kernelOffset = SkIPoint::Make(1, 1); 2684cd099704b3896ca66081a96508572a924f850ccommit-bot@chromium.org fFilter = SkMatrixConvolutionImageFilter::Create(kernelSize, kernel, gain, bias, kernelOffset, tileMode, convolveAlpha); 275faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org } 285faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org 295faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org ~MatrixConvolutionBench() { 305faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org fFilter->unref(); 315faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org } 325faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org 335faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgprotected: 345faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org virtual const char* onGetName() { 355faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org return fName.c_str(); 365faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org } 375faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org 383361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 395faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkPaint paint; 405faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org this->setupPaint(&paint); 415faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org paint.setAntiAlias(true); 42e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 433361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 445faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkRect r = SkRect::MakeWH(rand.nextUScalar1() * 400, 455faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org rand.nextUScalar1() * 400); 465faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org paint.setImageFilter(fFilter); 475faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org canvas->drawOval(r, paint); 485faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org } 495faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org } 505faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org 515faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgprivate: 52f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 535faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkMatrixConvolutionImageFilter* fFilter; 545faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org SkString fName; 555faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org}; 565faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org 57410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MatrixConvolutionBench(SkMatrixConvolutionImageFilter::kClamp_TileMode, true); ) 58410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MatrixConvolutionBench(SkMatrixConvolutionImageFilter::kRepeat_TileMode, true); ) 59410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MatrixConvolutionBench(SkMatrixConvolutionImageFilter::kClampToBlack_TileMode, true); ) 60410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MatrixConvolutionBench(SkMatrixConvolutionImageFilter::kClampToBlack_TileMode, false); ) 61