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

Side by Side Diff: gm/blurrect.cpp

Issue 306583007: make new blurrect GM and replace the dozens of existing ones (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix signed unsigned Created 6 years, 6 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "gm.h" 8 #include "gm.h"
9 #include "SkBlurMask.h" 9 #include "SkBlurMask.h"
10 #include "SkBlurMaskFilter.h" 10 #include "SkBlurMaskFilter.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 if (doClip) { 132 if (doClip) {
133 canvas->restore(); 133 canvas->restore();
134 } 134 }
135 canvas->translate(0, r.height() * 4/3); 135 canvas->translate(0, r.height() * 4/3);
136 } 136 }
137 } 137 }
138 private: 138 private:
139 typedef GM INHERITED; 139 typedef GM INHERITED;
140 }; 140 };
141 141
142
143 class BlurRectDirectGM : public skiagm::GM {
144 SkString fName;
145 int fGMWidth, fGMHeight;
146 int fPadding, fMargin;
147 public:
148 BlurRectDirectGM(const char name[])
149 : fName(name),
150 fGMWidth(1200),
151 fGMHeight(1024),
152 fPadding(10),
153 fMargin(100)
154 {
155 }
156
157 protected:
158 virtual SkString onShortName() {
159 return fName;
160 }
161
162 virtual SkISize onISize() {
163 return SkISize::Make(fGMWidth, fGMHeight);
164 }
165
166 virtual void onDraw(SkCanvas* canvas) {
167 const int widths[] = {25, 5, 5, 100, 150, 25};
168 const int heights[] = {100, 100, 5, 25, 150, 25};
169 const SkBlurStyle styles[] = {kNormal_SkBlurStyle, kInner_SkBlurStyle, k Outer_SkBlurStyle};
170 const float radii[] = {20, 5, 10};
171
172 canvas->translate(50,20);
173
174 int cur_x = 0;
175 int cur_y = 0;
176
177 int max_height = 0;
178
179 for (size_t i = 0 ; i < SK_ARRAY_COUNT(widths) ; i++) {
180 int width = widths[i];
181 int height = heights[i];
182 SkRect r;
183 r.setWH(SkIntToScalar(width), SkIntToScalar(height));
184 SkAutoCanvasRestore autoRestore(canvas, true);
185
186 for (size_t j = 0 ; j < SK_ARRAY_COUNT(radii) ; j++) {
187 float radius = radii[j];
188 for (size_t k = 0 ; k < SK_ARRAY_COUNT(styles) ; k++) {
189 SkBlurStyle style = styles[k];
190
191 SkMask mask;
192 SkBlurMask::BlurRect(SkBlurMask::ConvertRadiusToSigma(radius ), &mask, r, style);
193
194 SkAutoMaskFreeImage amfi(mask.fImage);
195
196 SkBitmap bm;
197 bm.installMaskPixels(mask);
198
199 if (cur_x + bm.width() >= fGMWidth - fMargin) {
200 cur_x = 0;
201 cur_y += max_height + fPadding;
202 max_height = 0;
203 }
204
205 canvas->save();
206 canvas->translate(cur_x, cur_y);
207 canvas->translate(-(bm.width() - r.width())/2, -(bm.height() -r.height())/2);
208 canvas->drawBitmap(bm, 0.f, 0.f, NULL);
209 canvas->restore();
210
211 cur_x += bm.width() + fPadding;
212 if (bm.height() > max_height)
213 max_height = bm.height();
214 }
215 }
216 }
217 }
218
219 virtual uint32_t onGetFlags() const { return kSkipPipe_Flag; }
220
221 private:
222 typedef GM INHERITED;
223 };
224
142 class BlurRectCompareGM : public skiagm::GM { 225 class BlurRectCompareGM : public skiagm::GM {
143 SkString fName; 226 SkString fName;
144 unsigned int fRectWidth, fRectHeight; 227 unsigned int fRectWidth, fRectHeight;
145 SkScalar fRadius; 228 SkScalar fRadius;
146 SkBlurStyle fStyle; 229 SkBlurStyle fStyle;
147 public: 230 public:
148 BlurRectCompareGM(const char name[], unsigned int rectWidth, 231 BlurRectCompareGM(const char name[], unsigned int rectWidth,
149 unsigned int rectHeight, float radius, 232 unsigned int rectHeight, float radius,
150 SkBlurStyle style) 233 SkBlurStyle style)
151 : fName(name) 234 : fName(name)
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 return kHigh_SkBlurQuality; 384 return kHigh_SkBlurQuality;
302 } 385 }
303 private: 386 private:
304 typedef BlurRectCompareGM INHERITED; 387 typedef BlurRectCompareGM INHERITED;
305 }; 388 };
306 389
307 390
308 ////////////////////////////////////////////////////////////////////////////// 391 //////////////////////////////////////////////////////////////////////////////
309 392
310 DEF_GM(return new BlurRectGM("blurrects", 0xFF);) 393 DEF_GM(return new BlurRectGM("blurrects", 0xFF);)
311 394 DEF_GM(return new BlurRectDirectGM("blurrect_gallery");)
312 static const SkScalar kBig = 20;
313 static const SkScalar kSmall = 2;
314
315 // regular size rects, blurs should be small enough not to completely overlap.
316
317 DEF_GM(return new BlurRectFastGM( "blurrect_25_100_2_normal_fast", 25, 100, kSma ll, kNormal_SkBlurStyle);)
318 DEF_GM(return new BlurRectFastGM("blurrect_25_100_20_normal_fast", 25, 100, kBig , kNormal_SkBlurStyle);)
319 DEF_GM(return new BlurRectSlowGM( "blurrect_25_100_2_normal_slow", 25, 100, kSma ll, kNormal_SkBlurStyle);)
320 DEF_GM(return new BlurRectSlowGM("blurrect_25_100_20_normal_slow", 25, 100, kBig , kNormal_SkBlurStyle);)
321 DEF_GM(return new BlurRectFastGM( "blurrect_25_100_2_inner_fast", 25, 100, kSmal l, kInner_SkBlurStyle);)
322 DEF_GM(return new BlurRectFastGM("blurrect_25_100_20_inner_fast", 25, 100, kBig, kInner_SkBlurStyle);)
323 DEF_GM(return new BlurRectSlowGM( "blurrect_25_100_2_inner_slow", 25, 100, kSmal l, kInner_SkBlurStyle);)
324 DEF_GM(return new BlurRectSlowGM("blurrect_25_100_20_inner_slow", 25, 100, kBig, kInner_SkBlurStyle);)
325 DEF_GM(return new BlurRectFastGM( "blurrect_25_100_2_outer_fast", 25, 100, kSmal l, kOuter_SkBlurStyle);)
326 DEF_GM(return new BlurRectFastGM("blurrect_25_100_20_outer_fast", 25, 100, kBig, kOuter_SkBlurStyle);)
327 DEF_GM(return new BlurRectSlowGM( "blurrect_25_100_2_outer_slow", 25, 100, kSmal l, kOuter_SkBlurStyle);)
328 DEF_GM(return new BlurRectSlowGM("blurrect_25_100_20_outer_slow", 25, 100, kBig, kOuter_SkBlurStyle);)
329
330 // skinny tall rects, blurs overlap in X but not y
331
332 DEF_GM(return new BlurRectFastGM( "blurrect_5_100_2_normal_fast", 5, 100, kSmall , kNormal_SkBlurStyle);)
333 DEF_GM(return new BlurRectFastGM("blurrect_5_100_20_normal_fast", 5, 100, kBig, kNormal_SkBlurStyle);)
334 DEF_GM(return new BlurRectSlowGM( "blurrect_5_100_2_normal_slow", 5, 100, kSmall , kNormal_SkBlurStyle);)
335 DEF_GM(return new BlurRectSlowGM("blurrect_5_100_20_normal_slow", 5, 100, kBig, kNormal_SkBlurStyle);)
336 DEF_GM(return new BlurRectFastGM( "blurrect_5_100_2_inner_fast", 5, 100, kSmall, kInner_SkBlurStyle);)
337 DEF_GM(return new BlurRectFastGM("blurrect_5_100_20_inner_fast", 5, 100, kBig, k Inner_SkBlurStyle);)
338 DEF_GM(return new BlurRectSlowGM( "blurrect_5_100_2_inner_slow", 5, 100, kSmall, kInner_SkBlurStyle);)
339 DEF_GM(return new BlurRectSlowGM("blurrect_5_100_20_inner_slow", 5, 100, kBig, k Inner_SkBlurStyle);)
340 DEF_GM(return new BlurRectFastGM( "blurrect_5_100_2_outer_fast", 5, 100, kSmall, kOuter_SkBlurStyle);)
341 DEF_GM(return new BlurRectFastGM("blurrect_5_100_20_outer_fast", 5, 100, kBig, k Outer_SkBlurStyle);)
342 DEF_GM(return new BlurRectSlowGM( "blurrect_5_100_2_outer_slow", 5, 100, kSmall, kOuter_SkBlurStyle);)
343 DEF_GM(return new BlurRectSlowGM("blurrect_5_100_20_outer_slow", 5, 100, kBig, k Outer_SkBlurStyle);)
344
345 // tiny rects, blurs overlap in X and Y
346
347 DEF_GM(return new BlurRectFastGM( "blurrect_5_5_2_normal_fast", 5, 5, kSmall, kN ormal_SkBlurStyle);)
348 DEF_GM(return new BlurRectFastGM("blurrect_5_5_20_normal_fast", 5, 5, kBig, kNor mal_SkBlurStyle);)
349 DEF_GM(return new BlurRectSlowGM( "blurrect_5_5_2_normal_slow", 5, 5, kSmall, kN ormal_SkBlurStyle);)
350 DEF_GM(return new BlurRectSlowGM("blurrect_5_5_20_normal_slow", 5, 5, kBig, kNor mal_SkBlurStyle);)
351 DEF_GM(return new BlurRectFastGM( "blurrect_5_5_2_inner_fast", 5, 5, kSmall, kIn ner_SkBlurStyle);)
352 DEF_GM(return new BlurRectFastGM("blurrect_5_5_20_inner_fast", 5, 5, kBig, kInne r_SkBlurStyle);)
353 DEF_GM(return new BlurRectSlowGM( "blurrect_5_5_2_inner_slow", 5, 5, kSmall, kIn ner_SkBlurStyle);)
354 DEF_GM(return new BlurRectSlowGM("blurrect_5_5_20_inner_slow", 5, 5, kBig, kInne r_SkBlurStyle);)
355 DEF_GM(return new BlurRectFastGM( "blurrect_5_5_2_outer_fast", 5, 5, kSmall, kOu ter_SkBlurStyle);)
356 DEF_GM(return new BlurRectFastGM("blurrect_5_5_20_outer_fast", 5, 5, kBig, kOute r_SkBlurStyle);)
357 DEF_GM(return new BlurRectSlowGM( "blurrect_5_5_2_outer_slow", 5, 5, kSmall, kOu ter_SkBlurStyle);)
358 DEF_GM(return new BlurRectSlowGM("blurrect_5_5_20_outer_slow", 5, 5, kBig, kOute r_SkBlurStyle);)
359
360
361 #if 0
362 // dont' need to GM the gaussian convolution; it's slow and intended
363 // as a ground truth comparison only. Leaving these here in case we
364 // ever want to turn these back on for debugging reasons.
365 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_1_simple", 25, 100, 1) ;)
366 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_2_simple", 25, 100, 2) ;)
367 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_3_simple", 25, 100, 3) ;)
368 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_4_simple", 25, 100, 4) ;)
369 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_5_simple", 25, 100, 5) ;)
370 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_6_simple", 25, 100, 6) ;)
371 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_7_simple", 25, 100, 7) ;)
372 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_8_simple", 25, 100, 8) ;)
373 DEF_GM(return new BlurRectGroundTruthGM( "blurrect_25_100_9_simple", 25, 100, 9) ;)
374 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_10_simple", 25, 100, 10 );)
375 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_11_simple", 25, 100, 11 );)
376 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_12_simple", 25, 100, 12 );)
377 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_13_simple", 25, 100, 13 );)
378 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_14_simple", 25, 100, 14 );)
379 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_15_simple", 25, 100, 15 );)
380 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_16_simple", 25, 100, 16 );)
381 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_17_simple", 25, 100, 17 );)
382 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_18_simple", 25, 100, 18 );)
383 DEF_GM(return new BlurRectGroundTruthGM("blurrect_25_100_19_simple", 25, 100, 19 );)
384 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698