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

Side by Side Diff: tests/BlurTest.cpp

Issue 1852113003: switch maskfilters to sk_sp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 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
« no previous file with comments | « src/effects/SkLayerDrawLooper.cpp ('k') | tests/PaintTest.cpp » ('j') | 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 2011 Google Inc. 2 * Copyright 2011 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 "SkBlurMask.h" 8 #include "SkBlurMask.h"
9 #include "SkBlurMaskFilter.h" 9 #include "SkBlurMaskFilter.h"
10 #include "SkBlurDrawLooper.h" 10 #include "SkBlurDrawLooper.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 paint.setColor(SK_ColorGRAY); 104 paint.setColor(SK_ColorGRAY);
105 paint.setStyle(SkPaint::kStroke_Style); 105 paint.setStyle(SkPaint::kStroke_Style);
106 paint.setStrokeWidth(SkIntToScalar(strokeWidth)); 106 paint.setStrokeWidth(SkIntToScalar(strokeWidth));
107 107
108 SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)); 108 SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5));
109 for (int style = 0; style <= kLastEnum_SkBlurStyle; ++style) { 109 for (int style = 0; style <= kLastEnum_SkBlurStyle; ++style) {
110 SkBlurStyle blurStyle = static_cast<SkBlurStyle>(style); 110 SkBlurStyle blurStyle = static_cast<SkBlurStyle>(style);
111 111
112 const uint32_t flagPermutations = SkBlurMaskFilter::kAll_BlurFlag; 112 const uint32_t flagPermutations = SkBlurMaskFilter::kAll_BlurFlag;
113 for (uint32_t flags = 0; flags < flagPermutations; ++flags) { 113 for (uint32_t flags = 0; flags < flagPermutations; ++flags) {
114 SkMaskFilter* filter; 114 paint.setMaskFilter(SkBlurMaskFilter::Make(blurStyle, sigma, flags)) ;
115 filter = SkBlurMaskFilter::Create(blurStyle, sigma, flags);
116
117 paint.setMaskFilter(filter);
118 filter->unref();
119 115
120 for (size_t test = 0; test < SK_ARRAY_COUNT(tests); ++test) { 116 for (size_t test = 0; test < SK_ARRAY_COUNT(tests); ++test) {
121 SkPath path; 117 SkPath path;
122 tests[test].addPath(&path); 118 tests[test].addPath(&path);
123 SkPath strokedPath; 119 SkPath strokedPath;
124 paint.getFillPath(path, &strokedPath); 120 paint.getFillPath(path, &strokedPath);
125 SkRect refBound = strokedPath.getBounds(); 121 SkRect refBound = strokedPath.getBounds();
126 SkIRect iref; 122 SkIRect iref;
127 refBound.roundOut(&iref); 123 refBound.roundOut(&iref);
128 iref.inset(-outset, -outset); 124 iref.inset(-outset, -outset);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 static void blur_path(SkCanvas* canvas, const SkPath& path, 223 static void blur_path(SkCanvas* canvas, const SkPath& path,
228 SkScalar gaussianSigma) { 224 SkScalar gaussianSigma) {
229 225
230 SkScalar midX = path.getBounds().centerX(); 226 SkScalar midX = path.getBounds().centerX();
231 SkScalar midY = path.getBounds().centerY(); 227 SkScalar midY = path.getBounds().centerY();
232 228
233 canvas->translate(-midX, -midY); 229 canvas->translate(-midX, -midY);
234 230
235 SkPaint blurPaint; 231 SkPaint blurPaint;
236 blurPaint.setColor(SK_ColorWHITE); 232 blurPaint.setColor(SK_ColorWHITE);
237 SkMaskFilter* filter = SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 233 blurPaint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, gaussian Sigma,
238 gaussianSigma, 234 SkBlurMaskFilter::kHighQualit y_BlurFlag));
239 SkBlurMaskFilter::kHighQuali ty_BlurFlag);
240 blurPaint.setMaskFilter(filter)->unref();
241 235
242 canvas->drawColor(SK_ColorBLACK); 236 canvas->drawColor(SK_ColorBLACK);
243 canvas->drawPath(path, blurPaint); 237 canvas->drawPath(path, blurPaint);
244 } 238 }
245 239
246 // Readback the blurred draw results from the canvas 240 // Readback the blurred draw results from the canvas
247 static void readback(SkCanvas* canvas, int* result, int resultCount) { 241 static void readback(SkCanvas* canvas, int* result, int resultCount) {
248 SkBitmap readback; 242 SkBitmap readback;
249 readback.allocN32Pixels(resultCount, 30); 243 readback.allocN32Pixels(resultCount, 30);
250 244
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 } 450 }
457 451
458 static void make_noop_layer(SkLayerDrawLooper::Builder* builder) { 452 static void make_noop_layer(SkLayerDrawLooper::Builder* builder) {
459 SkLayerDrawLooper::LayerInfo info; 453 SkLayerDrawLooper::LayerInfo info;
460 454
461 info.fPaintBits = 0; 455 info.fPaintBits = 0;
462 info.fColorMode = SkXfermode::kDst_Mode; 456 info.fColorMode = SkXfermode::kDst_Mode;
463 builder->addLayer(info); 457 builder->addLayer(info);
464 } 458 }
465 459
466 static void make_blur_layer(SkLayerDrawLooper::Builder* builder, SkMaskFilter* m f) { 460 static void make_blur_layer(SkLayerDrawLooper::Builder* builder, sk_sp<SkMaskFil ter> mf) {
467 SkLayerDrawLooper::LayerInfo info; 461 SkLayerDrawLooper::LayerInfo info;
468 462
469 info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit; 463 info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit;
470 info.fColorMode = SkXfermode::kSrc_Mode; 464 info.fColorMode = SkXfermode::kSrc_Mode;
471 SkPaint* paint = builder->addLayer(info); 465 SkPaint* paint = builder->addLayer(info);
472 paint->setMaskFilter(mf); 466 paint->setMaskFilter(std::move(mf));
473 } 467 }
474 468
475 static void test_layerDrawLooper(skiatest::Reporter* reporter, SkMaskFilter* mf, SkScalar sigma, 469 static void test_layerDrawLooper(skiatest::Reporter* reporter, sk_sp<SkMaskFilte r> mf,
476 SkBlurStyle style, SkBlurQuality quality, bool expectSuccess) { 470 SkScalar sigma, SkBlurStyle style, SkBlurQualit y quality,
471 bool expectSuccess) {
477 472
478 SkLayerDrawLooper::LayerInfo info; 473 SkLayerDrawLooper::LayerInfo info;
479 SkLayerDrawLooper::Builder builder; 474 SkLayerDrawLooper::Builder builder;
480 475
481 // 1 layer is too few 476 // 1 layer is too few
482 make_noop_layer(&builder); 477 make_noop_layer(&builder);
483 test_looper(reporter, builder.detach(), sigma, style, quality, false); 478 test_looper(reporter, builder.detach(), sigma, style, quality, false);
484 479
485 // 2 layers is good, but need blur 480 // 2 layers is good, but need blur
486 make_noop_layer(&builder); 481 make_noop_layer(&builder);
(...skipping 23 matching lines...) Expand all
510 505
511 // Test asABlur for SkBlurMaskFilter 506 // Test asABlur for SkBlurMaskFilter
512 // 507 //
513 for (size_t i = 0; i < SK_ARRAY_COUNT(styles); ++i) { 508 for (size_t i = 0; i < SK_ARRAY_COUNT(styles); ++i) {
514 const SkBlurStyle style = (SkBlurStyle)styles[i]; 509 const SkBlurStyle style = (SkBlurStyle)styles[i];
515 for (size_t j = 0; j < SK_ARRAY_COUNT(sigmas); ++j) { 510 for (size_t j = 0; j < SK_ARRAY_COUNT(sigmas); ++j) {
516 const SkScalar sigma = sigmas[j]; 511 const SkScalar sigma = sigmas[j];
517 for (int flags = 0; flags <= SkBlurMaskFilter::kAll_BlurFlag; ++flag s) { 512 for (int flags = 0; flags <= SkBlurMaskFilter::kAll_BlurFlag; ++flag s) {
518 const SkBlurQuality quality = blurMaskFilterFlags_as_quality(fla gs); 513 const SkBlurQuality quality = blurMaskFilterFlags_as_quality(fla gs);
519 514
520 SkAutoTUnref<SkMaskFilter> mf(SkBlurMaskFilter::Create(style, si gma, flags)); 515 sk_sp<SkMaskFilter> mf(SkBlurMaskFilter::Make(style, sigma, flag s));
521 if (nullptr == mf.get()) { 516 if (nullptr == mf.get()) {
522 REPORTER_ASSERT(reporter, sigma <= 0); 517 REPORTER_ASSERT(reporter, sigma <= 0);
523 } else { 518 } else {
524 REPORTER_ASSERT(reporter, sigma > 0); 519 REPORTER_ASSERT(reporter, sigma > 0);
525 SkMaskFilter::BlurRec rec; 520 SkMaskFilter::BlurRec rec;
526 bool success = mf->asABlur(&rec); 521 bool success = mf->asABlur(&rec);
527 if (flags & SkBlurMaskFilter::kIgnoreTransform_BlurFlag) { 522 if (flags & SkBlurMaskFilter::kIgnoreTransform_BlurFlag) {
528 REPORTER_ASSERT(reporter, !success); 523 REPORTER_ASSERT(reporter, !success);
529 } else { 524 } else {
530 REPORTER_ASSERT(reporter, success); 525 REPORTER_ASSERT(reporter, success);
531 REPORTER_ASSERT(reporter, rec.fSigma == sigma); 526 REPORTER_ASSERT(reporter, rec.fSigma == sigma);
532 REPORTER_ASSERT(reporter, rec.fStyle == style); 527 REPORTER_ASSERT(reporter, rec.fStyle == style);
533 REPORTER_ASSERT(reporter, rec.fQuality == quality); 528 REPORTER_ASSERT(reporter, rec.fQuality == quality);
534 } 529 }
535 test_layerDrawLooper(reporter, mf, sigma, style, quality, su ccess); 530 test_layerDrawLooper(reporter, std::move(mf), sigma, style, quality, success);
536 } 531 }
537 test_blurDrawLooper(reporter, sigma, style, flags); 532 test_blurDrawLooper(reporter, sigma, style, flags);
538 } 533 }
539 } 534 }
540 } 535 }
541 536
542 // Test asABlur for SkEmbossMaskFilter -- should never succeed 537 // Test asABlur for SkEmbossMaskFilter -- should never succeed
543 // 538 //
544 { 539 {
545 SkEmbossMaskFilter::Light light = { 540 SkEmbossMaskFilter::Light light = {
546 { 1, 1, 1 }, 0, 127, 127 541 { 1, 1, 1 }, 0, 127, 127
547 }; 542 };
548 for (size_t j = 0; j < SK_ARRAY_COUNT(sigmas); ++j) { 543 for (size_t j = 0; j < SK_ARRAY_COUNT(sigmas); ++j) {
549 const SkScalar sigma = sigmas[j]; 544 const SkScalar sigma = sigmas[j];
550 SkAutoTUnref<SkMaskFilter> mf(SkEmbossMaskFilter::Create(sigma, ligh t)); 545 auto mf(SkEmbossMaskFilter::Make(sigma, light));
551 if (mf.get()) { 546 if (mf) {
552 SkMaskFilter::BlurRec rec; 547 SkMaskFilter::BlurRec rec;
553 bool success = mf->asABlur(&rec); 548 bool success = mf->asABlur(&rec);
554 REPORTER_ASSERT(reporter, !success); 549 REPORTER_ASSERT(reporter, !success);
555 } 550 }
556 } 551 }
557 } 552 }
558 } 553 }
559 554
560 #if SK_SUPPORT_GPU 555 #if SK_SUPPORT_GPU
561 556
562 // This exercises the problem discovered in crbug.com/570232. The return value f rom 557 // This exercises the problem discovered in crbug.com/570232. The return value f rom
563 // SkBlurMask::BoxBlur wasn't being checked in SkBlurMaskFilter.cpp::GrRRectBlur Effect::Create 558 // SkBlurMask::BoxBlur wasn't being checked in SkBlurMaskFilter.cpp::GrRRectBlur Effect::Create
564 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SmallBoxBlurBug, reporter, ctx) { 559 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SmallBoxBlurBug, reporter, ctx) {
565 560
566 SkImageInfo info = SkImageInfo::MakeN32Premul(128, 128); 561 SkImageInfo info = SkImageInfo::MakeN32Premul(128, 128);
567 auto surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info)); 562 auto surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info));
568 SkCanvas* canvas = surface->getCanvas(); 563 SkCanvas* canvas = surface->getCanvas();
569 564
570 SkRect r = SkRect::MakeXYWH(10, 10, 100, 100); 565 SkRect r = SkRect::MakeXYWH(10, 10, 100, 100);
571 SkRRect rr = SkRRect::MakeRectXY(r, 10, 10); 566 SkRRect rr = SkRRect::MakeRectXY(r, 10, 10);
572 567
573 SkPaint p; 568 SkPaint p;
574 p.setMaskFilter(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 0.01f))->unref (); 569 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 0.01f));
575 570
576 canvas->drawRRect(rr, p); 571 canvas->drawRRect(rr, p);
577 } 572 }
578 573
579 #endif 574 #endif
580 575
581 //////////////////////////////////////////////////////////////////////////////// /////////// 576 //////////////////////////////////////////////////////////////////////////////// ///////////
OLDNEW
« no previous file with comments | « src/effects/SkLayerDrawLooper.cpp ('k') | tests/PaintTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698