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 */ 7aa4c7a704289b7adcbfbd23580667a1950a9ca6ereed 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkCanvas.h" 10580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkColorFilterImageFilter.h" 11580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkColorMatrixFilter.h" 126c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#include "SkLumaColorFilter.h" 13580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#include "SkTableColorFilter.h" 14580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 15580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_WIDTH_SMALL SkIntToScalar(32) 16580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_HEIGHT_SMALL SkIntToScalar(32) 17580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_WIDTH_LARGE SkIntToScalar(256) 18580a17241c51712f26441c6551c773e3769738e9sugoi@google.com#define FILTER_HEIGHT_LARGE SkIntToScalar(256) 19580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 20f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass ColorFilterBaseBench : public Benchmark { 21580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 22580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 23aa4c7a704289b7adcbfbd23580667a1950a9ca6ereed ColorFilterBaseBench(bool small) : fIsSmall(small) {} 24580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 25580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 26580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect getFilterRect() const { 27580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? SkRect::MakeWH(FILTER_WIDTH_SMALL, FILTER_HEIGHT_SMALL) : 28580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect::MakeWH(FILTER_WIDTH_LARGE, FILTER_HEIGHT_LARGE); 29580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 30580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 31580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkImageFilter* make_brightness(float amount, SkImageFilter* input = NULL) { 324b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org SkScalar amount255 = SkScalarMul(amount, SkIntToScalar(255)); 33580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkScalar matrix[20] = { 1, 0, 0, 0, amount255, 34580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 0, 1, 0, 0, amount255, 35580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 0, 0, 1, 0, amount255, 36580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 0, 0, 0, 1, 0 }; 37727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org SkAutoTUnref<SkColorFilter> filter(SkColorMatrixFilter::Create(matrix)); 38580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkColorFilterImageFilter::Create(filter, input); 39580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 40580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 41580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkImageFilter* make_grayscale(SkImageFilter* input = NULL) { 42580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkScalar matrix[20]; 43580a17241c51712f26441c6551c773e3769738e9sugoi@google.com memset(matrix, 0, 20 * sizeof(SkScalar)); 444b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[0] = matrix[5] = matrix[10] = 0.2126f; 454b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[1] = matrix[6] = matrix[11] = 0.7152f; 464b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[2] = matrix[7] = matrix[12] = 0.0722f; 474b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix[18] = 1.0f; 48727a352f7412753d2a3e4d30eab6500a1a4de135commit-bot@chromium.org SkAutoTUnref<SkColorFilter> filter(SkColorMatrixFilter::Create(matrix)); 49580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkColorFilterImageFilter::Create(filter, input); 50580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 51580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 52580a17241c51712f26441c6551c773e3769738e9sugoi@google.com static SkImageFilter* make_mode_blue(SkImageFilter* input = NULL) { 53580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkColorFilter> filter( 54580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkColorFilter::CreateModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mode)); 55580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return SkColorFilterImageFilter::Create(filter, input); 56580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 57580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 58580a17241c51712f26441c6551c773e3769738e9sugoi@google.com inline bool isSmall() const { return fIsSmall; } 59aa4c7a704289b7adcbfbd23580667a1950a9ca6ereed 60580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 61580a17241c51712f26441c6551c773e3769738e9sugoi@google.com bool fIsSmall; 62580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 63f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 64580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 65580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 66580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterDimBrightBench : public ColorFilterBaseBench { 67580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 68580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 69410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterDimBrightBench(bool small) : INHERITED(small) { 70580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 71580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 72580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 7336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 74580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_dim_bright_small" : "colorfilter_dim_bright_large"; 75580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 76580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 7736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 78580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 79580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 80580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 81c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com 823361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 83c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com for (float brightness = -1.0f; brightness <= 1.0f; brightness += 0.4f) { 84c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkAutoTUnref<SkImageFilter> dim(make_brightness(-brightness)); 85c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkAutoTUnref<SkImageFilter> bright(make_brightness(brightness, dim)); 86c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setImageFilter(bright); 87c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawRect(r, paint); 88c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 89580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 90580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 91580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 92580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 93580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 94580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 95580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 96580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBrightGrayBench : public ColorFilterBaseBench { 97580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 98580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 99410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBrightGrayBench(bool small) : INHERITED(small) { 100580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 101580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 102580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 10336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 104580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_bright_gray_small" : "colorfilter_bright_gray_large"; 105580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 106580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 10736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 108580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 109580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 110580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1113361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 112580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(0.9f)); 113580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> grayscale(make_grayscale(brightness)); 114580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(grayscale); 115580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 116580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 117580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 118580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 119580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 120580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 121580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 122580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 123580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterGrayBrightBench : public ColorFilterBaseBench { 124580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 125580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 126410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterGrayBrightBench(bool small) : INHERITED(small) { 127580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 128580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 129580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 13036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 131580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_gray_bright_small" : "colorfilter_gray_bright_large"; 132580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 133580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 13436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 135580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 136580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 137580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1383361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 139580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> grayscale(make_grayscale()); 140580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(0.9f, grayscale)); 141580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(brightness); 142580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 143580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 144580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 145580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 146580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 147580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 148580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 149580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 150580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBlueBrightBench : public ColorFilterBaseBench { 151580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 152580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 153410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBlueBrightBench(bool small) : INHERITED(small) { 154580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 155580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 156580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 15736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 158580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_blue_bright_small" : "colorfilter_blue_bright_large"; 159580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 160580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 16136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 162580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 163580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 164580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1653361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 166580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> blue(make_mode_blue()); 167580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f, blue)); 168580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(brightness); 169580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 170580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 171580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 172580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 173580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 174580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 175580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 176580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 177580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBrightBlueBench : public ColorFilterBaseBench { 178580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 179580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 180410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBrightBlueBench(bool small) : INHERITED(small) { 181580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 182580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 183580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 18436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 185580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_bright_blue_small" : "colorfilter_bright_blue_large"; 186580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 187580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 18836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 189580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 190580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 191580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 1923361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 193580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f)); 194580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> blue(make_mode_blue(brightness)); 195580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(blue); 196580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 197580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 198580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 199580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 200580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 201580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 202580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 203580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 204580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBrightBench : public ColorFilterBaseBench { 205580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 206580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 207410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBrightBench(bool small) : INHERITED(small) { 208580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 209580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 210580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 21136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 212580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_bright_small" : "colorfilter_bright_large"; 213580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 214580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 21536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 216580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 217580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 218580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2193361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 220580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> brightness(make_brightness(1.0f)); 221580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(brightness); 222580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 223580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 224580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 225580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 226580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 227580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 228580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 229580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 230580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterBlueBench : public ColorFilterBaseBench { 231580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 232580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 233410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ColorFilterBlueBench(bool small) : INHERITED(small) { 234580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 235580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 236580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 23736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 238580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_blue_small" : "colorfilter_blue_large"; 239580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 240580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 24136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 242580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 243580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 244580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2453361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 246580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> blue(make_mode_blue()); 247580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(blue); 248580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 249580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 250580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 251580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 252580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 253580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 254580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 255580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 256580a17241c51712f26441c6551c773e3769738e9sugoi@google.comclass ColorFilterGrayBench : public ColorFilterBaseBench { 257580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 258580a17241c51712f26441c6551c773e3769738e9sugoi@google.compublic: 259aa4c7a704289b7adcbfbd23580667a1950a9ca6ereed ColorFilterGrayBench(bool small) : INHERITED(small) {} 260580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 261580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprotected: 26236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 263580a17241c51712f26441c6551c773e3769738e9sugoi@google.com return isSmall() ? "colorfilter_gray_small" : "colorfilter_gray_large"; 264580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 265580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 26636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 267580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkRect r = getFilterRect(); 268580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkPaint paint; 269580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setColor(SK_ColorRED); 2703361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 271580a17241c51712f26441c6551c773e3769738e9sugoi@google.com SkAutoTUnref<SkImageFilter> grayscale(make_grayscale()); 272580a17241c51712f26441c6551c773e3769738e9sugoi@google.com paint.setImageFilter(grayscale); 273580a17241c51712f26441c6551c773e3769738e9sugoi@google.com canvas->drawRect(r, paint); 274580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 275580a17241c51712f26441c6551c773e3769738e9sugoi@google.com } 276580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 277580a17241c51712f26441c6551c773e3769738e9sugoi@google.comprivate: 278580a17241c51712f26441c6551c773e3769738e9sugoi@google.com typedef ColorFilterBaseBench INHERITED; 279580a17241c51712f26441c6551c773e3769738e9sugoi@google.com}; 280580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 281580a17241c51712f26441c6551c773e3769738e9sugoi@google.com/////////////////////////////////////////////////////////////////////////////// 282580a17241c51712f26441c6551c773e3769738e9sugoi@google.com 283410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterDimBrightBench(true); ) 284410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightGrayBench(true); ) 285410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBrightBench(true); ) 286410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBrightBench(true); ) 287410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBlueBench(true); ) 288410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBench(true); ) 289410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBench(true); ) 290410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBench(true); ) 291410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com 292410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterDimBrightBench(false); ) 293410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightGrayBench(false); ) 294410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBrightBench(false); ) 295410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBrightBench(false); ) 296410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBlueBench(false); ) 297410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBrightBench(false); ) 298410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterBlueBench(false); ) 299410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ColorFilterGrayBench(false); ) 300