1c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org/* 2c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org * Copyright 2013 Google Inc. 3c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org * 4c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 5c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org * found in the LICENSE file. 6c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org */ 7c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkBicubicImageFilter.h" 10c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org#include "SkCanvas.h" 11c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org#include "SkShader.h" 12c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org#include "SkString.h" 13c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 14c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org// This bench exercises SkBicubicImageFilter, upsampling a 40x40 input to 15c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org// 100x100, 400x100, 100x400, and 400x400. 16c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 17f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass BicubicBench : public Benchmark { 18c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org SkSize fScale; 19c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org SkString fName; 20c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 21c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.orgpublic: 22410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com BicubicBench(float x, float y) 234b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org : fScale(SkSize::Make(x, y)) { 24c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org fName.printf("bicubic_%gx%g", 25410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com SkScalarToFloat(fScale.fWidth), SkScalarToFloat(fScale.fHeight)); 26c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org } 27c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 28c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.orgprotected: 29c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org virtual const char* onGetName() { 30c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org return fName.c_str(); 31c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org } 32c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 333361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 34c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org SkPaint paint; 35c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org this->setupPaint(&paint); 36c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 37c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org paint.setAntiAlias(true); 38c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 39c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org SkRect r = SkRect::MakeWH(40, 40); 40c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org SkAutoTUnref<SkImageFilter> bicubic(SkBicubicImageFilter::CreateMitchell(fScale)); 41c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org paint.setImageFilter(bicubic); 42c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 433361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 44c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->save(); 45c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->clipRect(r); 46c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawOval(r, paint); 47c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->restore(); 48c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 49c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org } 50c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 51c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.orgprivate: 52f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 53c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org}; 54c3799ada5b291000b2adde57cc0fee734fd7e232senorblanco@chromium.org 55410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new BicubicBench(10.0f, 10.0f); ) 56410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new BicubicBench(2.5f, 10.0f); ) 57410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new BicubicBench(10.0f, 2.5f); ) 58410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new BicubicBench(2.5f, 2.5f); ) 59