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