1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2013 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Benchmark.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorFilterImageFilter.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorMatrixFilter.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define FILTER_WIDTH_SMALL  SkIntToScalar(32)
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define FILTER_HEIGHT_SMALL SkIntToScalar(32)
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define FILTER_WIDTH_LARGE  SkIntToScalar(256)
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define FILTER_HEIGHT_LARGE SkIntToScalar(256)
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic sk_sp<SkImageFilter> make_brightness(float amount, sk_sp<SkImageFilter> input) {
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar amount255 = amount * 255;
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar matrix[20] = { 1, 0, 0, 0, amount255,
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            0, 1, 0, 0, amount255,
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            0, 0, 1, 0, amount255,
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            0, 0, 0, 1, 0 };
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkColorFilter> filter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix));
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return SkColorFilterImageFilter::Make(std::move(filter), std::move(input));
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic sk_sp<SkImageFilter> make_grayscale(sk_sp<SkImageFilter> input) {
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkScalar matrix[20];
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    memset(matrix, 0, 20 * sizeof(SkScalar));
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    matrix[0] = matrix[5] = matrix[10] = 0.2126f;
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    matrix[1] = matrix[6] = matrix[11] = 0.7152f;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    matrix[2] = matrix[7] = matrix[12] = 0.0722f;
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    matrix[18] = 1.0f;
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkColorFilter> filter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix));
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return SkColorFilterImageFilter::Make(std::move(filter), std::move(input));
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic sk_sp<SkImageFilter> make_mode_blue(sk_sp<SkImageFilter> input) {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkColorFilter> filter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkBlendMode::kSrcIn));
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return SkColorFilterImageFilter::Make(std::move(filter), std::move(input));
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterBaseBench : public Benchmark {
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterBaseBench(bool small) : fIsSmall(small) { }
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRect getFilterRect() const {
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? SkRect::MakeWH(FILTER_WIDTH_SMALL, FILTER_HEIGHT_SMALL) :
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                 SkRect::MakeWH(FILTER_WIDTH_LARGE, FILTER_HEIGHT_LARGE);
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    inline bool isSmall() const { return fIsSmall; }
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fIsSmall;
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef Benchmark INHERITED;
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterDimBrightBench : public ColorFilterBaseBench {
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterDimBrightBench(bool small) : INHERITED(small) { }
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_dim_bright_small" : "colorfilter_dim_bright_large";
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            for (float brightness = -1.0f; brightness <= 1.0f; brightness += 0.4f) {
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                sk_sp<SkImageFilter> dim(make_brightness(-brightness, nullptr));
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                paint.setImageFilter(make_brightness(brightness, std::move(dim)));
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                canvas->drawRect(r, paint);
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterBrightGrayBench : public ColorFilterBaseBench {
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterBrightGrayBench(bool small) : INHERITED(small) { }
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_bright_gray_small" : "colorfilter_bright_gray_large";
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_sp<SkImageFilter> brightness(make_brightness(0.9f, nullptr));
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_grayscale(std::move(brightness)));
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterGrayBrightBench : public ColorFilterBaseBench {
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterGrayBrightBench(bool small) : INHERITED(small) { }
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_gray_bright_small" : "colorfilter_gray_bright_large";
124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_sp<SkImageFilter> grayscale(make_grayscale(nullptr));
132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_brightness(0.9f, std::move(grayscale)));
133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterBlueBrightBench : public ColorFilterBaseBench {
142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterBlueBrightBench(bool small) : INHERITED(small) { }
145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_blue_bright_small" : "colorfilter_blue_bright_large";
149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_sp<SkImageFilter> blue(make_mode_blue(nullptr));
157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_brightness(1.0f, std::move(blue)));
158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterBrightBlueBench : public ColorFilterBaseBench {
167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterBrightBlueBench(bool small) : INHERITED(small) { }
170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_bright_blue_small" : "colorfilter_bright_blue_large";
174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_sp<SkImageFilter> brightness(make_brightness(1.0f, nullptr));
182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_mode_blue(std::move(brightness)));
183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterBrightBench : public ColorFilterBaseBench {
192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterBrightBench(bool small) : INHERITED(small) { }
195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_bright_small" : "colorfilter_bright_large";
199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_brightness(1.0f, nullptr));
207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterBlueBench : public ColorFilterBaseBench {
216fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
217fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
218fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterBlueBench(bool small) : INHERITED(small) { }
219fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
220fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
221fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
222fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_blue_small" : "colorfilter_blue_large";
223fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
224fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
225fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
226fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
227fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
228fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
229fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
230fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_mode_blue(nullptr));
231fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
232fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
233fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
234fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
235fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
236fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
237fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
238fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
239fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ColorFilterGrayBench : public ColorFilterBaseBench {
240fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
241fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
242fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ColorFilterGrayBench(bool small) : INHERITED(small) { }
243fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
244fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
245fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* onGetName() override {
246fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return this->isSmall() ? "colorfilter_gray_small" : "colorfilter_gray_large";
247fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
248fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
249fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDraw(int loops, SkCanvas* canvas) override {
250fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkRect r = this->getFilterRect();
251fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint paint;
252fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        paint.setColor(SK_ColorRED);
253fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < loops; i++) {
254fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            paint.setImageFilter(make_grayscale(nullptr));
255fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            canvas->drawRect(r, paint);
256fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
257fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
258fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
259fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
260fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef ColorFilterBaseBench INHERITED;
261fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
262fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
263fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot///////////////////////////////////////////////////////////////////////////////
264fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
265fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterDimBrightBench(true); )
266fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBrightGrayBench(true); )
267fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterGrayBrightBench(true); )
268fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBlueBrightBench(true); )
269fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBrightBlueBench(true); )
270fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBrightBench(true); )
271fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBlueBench(true); )
272fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterGrayBench(true); )
273fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
274fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterDimBrightBench(false); )
275fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBrightGrayBench(false); )
276fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterGrayBrightBench(false); )
277fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBlueBrightBench(false); )
278fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBrightBlueBench(false); )
279fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBrightBench(false); )
280fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterBlueBench(false); )
281fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH( return new ColorFilterGrayBench(false); )
282