Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: bench/BlendBench.cpp

Issue 14234019: Added a few bench for some image filters (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | bench/ColorFilterBench.cpp » ('j') | bench/ColorFilterBench.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7 #include "SkBenchmark.h"
8 #include "SkBitmapSource.h"
9 #include "SkBlendImageFilter.h"
10 #include "SkCanvas.h"
11 #include "SkDevice.h"
12
13 class BlendBaseBench : public SkBenchmark {
14 public:
15 BlendBaseBench(void* param) : INHERITED(param) {
16 }
17
18 protected:
19 virtual void onPreDraw() SK_OVERRIDE {
20 if (!fInitialized) {
21 make_bitmap();
22 make_checkerboard();
23 fInitialized = true;
24 }
25 }
26
27 void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x) {
28 canvas->save();
29 canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), 0,
30 SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height())));
31 canvas->drawBitmap(fBitmap, SkIntToScalar(x), 0, &paint);
32 canvas->restore();
33 }
34
35 void make_bitmap() {
36 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, 80, 80);
Stephen White 2013/04/19 18:39:01 As discussed, we should probably use a larger bitm
sugoi1 2013/04/22 15:49:47 Bumped it only to 256x256 so that it's not too slo
37 fBitmap.allocPixels();
38 SkDevice device(fBitmap);
39 SkCanvas canvas(&device);
40 canvas.clear(0x00000000);
41 SkPaint paint;
42 paint.setAntiAlias(true);
43 paint.setColor(0xD000D000);
44 paint.setTextSize(SkIntToScalar(96));
45 const char* str = "e";
46 canvas.drawText(str, strlen(str), SkIntToScalar(15), SkIntToScalar(65), paint);
47 }
48
49 void make_checkerboard() {
50 fCheckerboard.setConfig(SkBitmap::kARGB_8888_Config, 80, 80);
51 fCheckerboard.allocPixels();
52 SkDevice device(fCheckerboard);
53 SkCanvas canvas(&device);
54 canvas.clear(0x00000000);
55 SkPaint darkPaint;
56 darkPaint.setColor(0xFF404040);
57 SkPaint lightPaint;
58 lightPaint.setColor(0xFFA0A0A0);
59 for (int y = 0; y < 80; y += 16) {
60 for (int x = 0; x < 80; x += 16) {
61 canvas.save();
62 canvas.translate(SkIntToScalar(x), SkIntToScalar(y));
63 canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
64 canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
65 canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
66 canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
67 canvas.restore();
68 }
69 }
70 }
71
72 typedef SkBenchmark INHERITED;
73 SkBitmap fBitmap, fCheckerboard;
74 bool fInitialized;
75 };
76
77 class BlendNormalBench : public BlendBaseBench {
78 public:
79 BlendNormalBench(void* param) : INHERITED(param) {
80 }
81
82 protected:
83 virtual const char* onGetName() SK_OVERRIDE {
84 return "blend_normal";
85 }
86
87 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
88 SkPaint paint;
89 SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fChec kerboard)));
90 paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter,
91 (SkBlendImageFilter::kNormal_Mode, background)))->unref();
92 drawClippedBitmap(canvas, paint, 0);
93 }
94
95 private:
96 typedef BlendBaseBench INHERITED;
97 };
98
99 class BlendMultiplyBench : public BlendBaseBench {
100 public:
101 BlendMultiplyBench(void* param) : INHERITED(param) {
102 }
103
104 protected:
105 virtual const char* onGetName() SK_OVERRIDE {
106 return "blend_multiply";
107 }
108
109 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
110 SkPaint paint;
111 SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fChec kerboard)));
112 paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter,
113 (SkBlendImageFilter::kMultiply_Mode, background)))->unref();
114 drawClippedBitmap(canvas, paint, 100);
115 }
116
117 private:
118 typedef BlendBaseBench INHERITED;
119 };
120
121 class BlendScreenBench : public BlendBaseBench {
122 public:
123 BlendScreenBench(void* param) : INHERITED(param) {
124 }
125
126 protected:
127 virtual const char* onGetName() SK_OVERRIDE {
128 return "blend_screen";
129 }
130
131 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
132 SkPaint paint;
133 SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fChec kerboard)));
134 paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter,
135 (SkBlendImageFilter::kScreen_Mode, background)))->unref();
136 drawClippedBitmap(canvas, paint, 200);
137 }
138
139 private:
140 typedef BlendBaseBench INHERITED;
141 };
142
143 class BlendDarkenBench : public BlendBaseBench {
144 public:
145 BlendDarkenBench(void* param) : INHERITED(param) {
146 }
147
148 protected:
149 virtual const char* onGetName() SK_OVERRIDE {
150 return "blend_darken";
151 }
152
153 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
154 SkPaint paint;
155 SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fChec kerboard)));
156 paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter,
157 (SkBlendImageFilter::kDarken_Mode, background)))->unref();
158 drawClippedBitmap(canvas, paint, 300);
159 }
160
161 private:
162 typedef BlendBaseBench INHERITED;
163 };
164
165 class BlendLightenBench : public BlendBaseBench {
166 public:
167 BlendLightenBench(void* param) : INHERITED(param) {
168 }
169
170 protected:
171 virtual const char* onGetName() SK_OVERRIDE {
172 return "blend_lighten";
173 }
174
175 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
176 SkPaint paint;
177 SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fChec kerboard)));
178 paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter,
179 (SkBlendImageFilter::kLighten_Mode, background)))->unref();
180 drawClippedBitmap(canvas, paint, 400);
181 }
182
183 private:
184 typedef BlendBaseBench INHERITED;
185 };
186
187 ///////////////////////////////////////////////////////////////////////////////
188
189 DEF_BENCH( return new BlendNormalBench(p); )
190 DEF_BENCH( return new BlendMultiplyBench(p); )
191 DEF_BENCH( return new BlendScreenBench(p); )
192 DEF_BENCH( return new BlendDarkenBench(p); )
193 DEF_BENCH( return new BlendLightenBench(p); )
194
OLDNEW
« no previous file with comments | « no previous file | bench/ColorFilterBench.cpp » ('j') | bench/ColorFilterBench.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698