1580a17241c51712f26441c6551c773e3769738e9sugoi@google.com/* 2580a17241c51712f26441c6551c773e3769738e9sugoi@google.com * Copyright 2013 Google Inc. 3580a17241c51712f26441c6551c773e3769738e9sugoi@google.com * 4580a17241c51712f26441c6551c773e3769738e9sugoi@google.com * Use of this source code is governed by a BSD-style license that can be 5580a17241c51712f26441c6551c773e3769738e9sugoi@google.com * found in the LICENSE file. 6580a17241c51712f26441c6551c773e3769738e9sugoi@google.com */ 7f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 8580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkCanvas.h" 9580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkColorFilterImageFilter.h" 10580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkColorMatrixFilter.h" 116c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#include "SkLumaColorFilter.h" 12580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkTableColorFilter.h" 13580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 14580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_WIDTH_SMALL SkIntToScalar(32) 15580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_HEIGHT_SMALL SkIntToScalar(32) 16580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_WIDTH_LARGE SkIntToScalar(256) 17580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_HEIGHT_LARGE SkIntToScalar(256) 18580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 19f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass ColorFilterBaseBench : public Benchmark { 20580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 21580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 22410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBaseBench(bool small) : fIsSmall(small) { } 23580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 24580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 25580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect getFilterRect() const { 26580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? SkRect::MakeWH(FILTER_WIDTH_SMALL, FILTER_HEIGHT_SMALL) : 27580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect::MakeWH(FILTER_WIDTH_LARGE, FILTER_HEIGHT_LARGE); 28580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 29580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 30580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkImageFilter* make_brightness(float amount, SkImageFilter* input = NULL) { 314b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org SkScalar amount255 = SkScalarMul(amount, SkIntToScalar(255)); 32580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkScalar matrix[20] = { 1, 0, 0, 0, amount255, 33580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 0, 1, 0, 0, amount255, 34580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 0, 0, 1, 0, amount255, 35580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 0, 0, 0, 1, 0 }; 36727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org SkAutoTUnref<SkColorFilter> filter(SkColorMatrixFilter::Create(matrix)); 37580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkColorFilterImageFilter::Create(filter, input); 38580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 39580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 40580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkImageFilter* make_grayscale(SkImageFilter* input = NULL) { 41580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkScalar matrix[20]; 42580a17241c51712f26441c6551c773e3769738e9sugoi@google.com memset(matrix, 0, 20 * sizeof(SkScalar)); 434b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[0] = matrix[5] = matrix[10] = 0.2126f; 444b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[1] = matrix[6] = matrix[11] = 0.7152f; 454b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[2] = matrix[7] = matrix[12] = 0.0722f; 464b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[18] = 1.0f; 47727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org SkAutoTUnref<SkColorFilter> filter(SkColorMatrixFilter::Create(matrix)); 48580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkColorFilterImageFilter::Create(filter, input); 49580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 50580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 51580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkImageFilter* make_mode_blue(SkImageFilter* input = NULL) { 52580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkColorFilter> filter( 53580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkColorFilter::CreateModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mode)); 54580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkColorFilterImageFilter::Create(filter, input); 55580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 56580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 57580a17241c51712f26441c6551c773e3769738e9sugoi@google.com inline bool isSmall() const { return fIsSmall; } 58580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 59580a17241c51712f26441c6551c773e3769738e9sugoi@google.com bool fIsSmall; 60580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 61f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 62580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 63580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 64580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterDimBrightBench : public ColorFilterBaseBench { 65580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 66580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 67410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterDimBrightBench(bool small) : INHERITED(small) { 68580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 69580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 70580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 71580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 72580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_dim_bright_small" : "colorfilter_dim_bright_large"; 73580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 74580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 753361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 76580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 77580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 78580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 79c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 803361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 81c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (float brightness = -1.0f; brightness <= 1.0f; brightness += 0.4f) { 82c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkAutoTUnref<SkImageFilter> dim(make_brightness(-brightness)); 83c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkAutoTUnref<SkImageFilter> bright(make_brightness(brightness, dim)); 84c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setImageFilter(bright); 85c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawRect(r, paint); 86c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 87580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 88580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 89580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 90580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 91580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 92580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 93580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 94580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBrightGrayBench : public ColorFilterBaseBench { 95580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 96580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 97410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBrightGrayBench(bool small) : INHERITED(small) { 98580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 99580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 100580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 101580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 102580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_bright_gray_small" : "colorfilter_bright_gray_large"; 103580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 104580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 1053361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 106580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 107580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 108580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1093361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 110580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(0.9f)); 111580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> grayscale(make_grayscale(brightness)); 112580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(grayscale); 113580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 114580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 115580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 116580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 117580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 118580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 119580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 120580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 121580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterGrayBrightBench : public ColorFilterBaseBench { 122580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 123580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 124410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterGrayBrightBench(bool small) : INHERITED(small) { 125580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 126580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 127580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 128580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 129580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_gray_bright_small" : "colorfilter_gray_bright_large"; 130580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 131580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 1323361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 133580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 134580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 135580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1363361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 137580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> grayscale(make_grayscale()); 138580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(0.9f, grayscale)); 139580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(brightness); 140580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 141580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 142580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 143580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 144580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 145580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 146580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 147580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 148580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBlueBrightBench : public ColorFilterBaseBench { 149580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 150580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 151410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBlueBrightBench(bool small) : INHERITED(small) { 152580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 153580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 154580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 155580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 156580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_blue_bright_small" : "colorfilter_blue_bright_large"; 157580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 158580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 1593361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 160580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 161580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 162580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1633361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 164580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> blue(make_mode_blue()); 165580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f, blue)); 166580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(brightness); 167580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 168580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 169580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 170580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 171580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 172580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 173580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 174580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 175580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBrightBlueBench : public ColorFilterBaseBench { 176580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 177580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 178410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBrightBlueBench(bool small) : INHERITED(small) { 179580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 180580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 181580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 182580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 183580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_bright_blue_small" : "colorfilter_bright_blue_large"; 184580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 185580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 1863361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 187580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 188580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 189580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1903361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 191580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f)); 192580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> blue(make_mode_blue(brightness)); 193580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(blue); 194580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 195580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 196580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 197580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 198580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 199580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 200580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 201580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 202580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBrightBench : public ColorFilterBaseBench { 203580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 204580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 205410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBrightBench(bool small) : INHERITED(small) { 206580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 207580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 208580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 209580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 210580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_bright_small" : "colorfilter_bright_large"; 211580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 212580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 2133361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 214580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 215580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 216580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2173361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 218580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f)); 219580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(brightness); 220580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 221580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 222580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 223580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 224580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 225580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 226580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 227580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 228580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBlueBench : public ColorFilterBaseBench { 229580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 230580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 231410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBlueBench(bool small) : INHERITED(small) { 232580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 233580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 234580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 235580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 236580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_blue_small" : "colorfilter_blue_large"; 237580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 238580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 2393361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 240580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 241580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 242580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2433361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 244580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> blue(make_mode_blue()); 245580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(blue); 246580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 247580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 248580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 249580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 250580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 251580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 252580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 253580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 254580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterGrayBench : public ColorFilterBaseBench { 255580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 256580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 257410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterGrayBench(bool small) : INHERITED(small) { 258580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 259580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 260580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 261580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 262580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_gray_small" : "colorfilter_gray_large"; 263580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 264580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 2653361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 266580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 267580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 268580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2693361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 270580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> grayscale(make_grayscale()); 271580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(grayscale); 272580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 273580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 274580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 275580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 276580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 277580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 278580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 279580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 280580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass TableColorFilterBench : public ColorFilterBaseBench { 281580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 282580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 283410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com TableColorFilterBench(bool small) : INHERITED(small) { 284580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 285580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 286580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 287580a17241c51712f26441c6551c773e3769738e9sugoi@google.com virtual const char* onGetName() SK_OVERRIDE { 288580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "table_colorfilter_small" : "table_colorfilter_large"; 289580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 290580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 2913361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 292580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 293580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 294580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2953361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 296580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkColorFilter> table_filter(make_table_filter()); 297580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColorFilter(table_filter); 298580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 299580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 300580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 301580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 302580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 303580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static void fill_table_data(uint8_t table[]) { 304580a17241c51712f26441c6551c773e3769738e9sugoi@google.com for (int i = 0; i < 256; ++i) { 305580a17241c51712f26441c6551c773e3769738e9sugoi@google.com int n = i >> 5; 306580a17241c51712f26441c6551c773e3769738e9sugoi@google.com table[i] = (n << 5) | (n << 2) | (n >> 1); 307580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 308580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 309580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 310580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkColorFilter* make_table_filter() { 311580a17241c51712f26441c6551c773e3769738e9sugoi@google.com uint8_t table[256]; fill_table_data(table); 312580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkTableColorFilter::Create(table); 313580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 314580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 315580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 316580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 317580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 3186c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgclass LumaColorFilterBench : public ColorFilterBaseBench { 3196c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org 3206c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgpublic: 3216c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org LumaColorFilterBench(bool small) : INHERITED(small) { 3226c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org } 3236c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org 3246c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgprotected: 3256c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org virtual const char* onGetName() SK_OVERRIDE { 3266c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org return isSmall() ? "luma_colorfilter_small" : "luma_colorfilter_large"; 3276c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org } 3286c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org 3293361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 3306c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org SkRect r = getFilterRect(); 3316c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org SkPaint paint; 3326c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org paint.setColor(SK_ColorRED); 3336c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org 3343361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 3356c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org SkAutoTUnref<SkColorFilter> luma_filter(SkLumaColorFilter::Create()); 3366c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org paint.setColorFilter(luma_filter); 3376c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org canvas->drawRect(r, paint); 3386c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org } 3396c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org } 3406c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org 3416c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgprivate: 3426c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org typedef ColorFilterBaseBench INHERITED; 3436c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org}; 3446c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org 345580a17241c51712f26441c6551c773e3769738e9sugoi@google.com/////////////////////////////////////////////////////////////////////////////// 346580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 347410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterDimBrightBench(true); ) 348410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightGrayBench(true); ) 349410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBrightBench(true); ) 350410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBrightBench(true); ) 351410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBlueBench(true); ) 352410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBench(true); ) 353410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBench(true); ) 354410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBench(true); ) 355410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new TableColorFilterBench(true); ) 3566c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgDEF_BENCH( return new LumaColorFilterBench(true); ) 357410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com 358410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterDimBrightBench(false); ) 359410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightGrayBench(false); ) 360410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBrightBench(false); ) 361410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBrightBench(false); ) 362410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBlueBench(false); ) 363410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBench(false); ) 364410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBench(false); ) 365410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBench(false); ) 366410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new TableColorFilterBench(false); ) 3676c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgDEF_BENCH( return new LumaColorFilterBench(false); ) 368