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

Side by Side Diff: tests/ImageFilterTest.cpp

Issue 1860573002: Update SkMorphology ImageFilters 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
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkBitmapDevice.h" 9 #include "SkBitmapDevice.h"
10 #include "SkBlurImageFilter.h" 10 #include "SkBlurImageFilter.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 SkBitmap make_gradient_circle(int width, int height) { 98 SkBitmap make_gradient_circle(int width, int height) {
99 SkBitmap bitmap; 99 SkBitmap bitmap;
100 bitmap.allocN32Pixels(width, height); 100 bitmap.allocN32Pixels(width, height);
101 SkCanvas canvas(bitmap); 101 SkCanvas canvas(bitmap);
102 draw_gradient_circle(&canvas, width, height); 102 draw_gradient_circle(&canvas, width, height);
103 return bitmap; 103 return bitmap;
104 } 104 }
105 105
106 class FilterList { 106 class FilterList {
107 public: 107 public:
108 FilterList(SkImageFilter* input = nullptr, const SkImageFilter::CropRect* cr opRect = nullptr) { 108 FilterList(sk_sp<SkImageFilter> input, const SkImageFilter::CropRect* cropRe ct = nullptr) {
109 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); 109 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
110 SkScalar kernel[9] = { 110 SkScalar kernel[9] = {
111 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), 111 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
112 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), 112 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1),
113 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), 113 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
114 }; 114 };
115 const SkISize kernelSize = SkISize::Make(3, 3); 115 const SkISize kernelSize = SkISize::Make(3, 3);
116 const SkScalar gain = SK_Scalar1, bias = 0; 116 const SkScalar gain = SK_Scalar1, bias = 0;
117 const SkScalar five = SkIntToScalar(5); 117 const SkScalar five = SkIntToScalar(5);
118 118
119 SkMatrix matrix; 119 SkMatrix matrix;
120 120
121 matrix.setTranslate(SK_Scalar1, SK_Scalar1); 121 matrix.setTranslate(SK_Scalar1, SK_Scalar1);
122 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1); 122 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1);
123 123
124 { 124 {
125 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, 125 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED,
126 SkXfermode::kS rcIn_Mode)); 126 SkXfermode::kS rcIn_Mode));
127 127
128 this->addFilter("color filter", 128 this->addFilter("color filter",
129 SkColorFilterImageFilter::Create(cf.get(), input, cropRect)); 129 SkColorFilterImageFilter::Create(cf.get(), input.get(), cropRect ));
130 } 130 }
131 131
132 { 132 {
133 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_c ircle(64, 64))); 133 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_c ircle(64, 64)));
134 sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gr adientImage))); 134 sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gr adientImage)));
135 135
136 this->addFilter("displacement map", SkDisplacementMapEffect::Create( 136 this->addFilter("displacement map", SkDisplacementMapEffect::Create(
137 SkDisplacementMapEffect::kR_ChannelSelectorType, 137 SkDisplacementMapEffect::kR_ChannelSelectorType,
138 SkDisplacementMapEffect::kB_ChannelSelectorType, 138 SkDisplacementMapEffect::kB_ChannelSelectorType,
139 20.0f, gradientSource.get(), input, cropRect)); 139 20.0f, gradientSource.get(), input.get(), cropRect));
140 } 140 }
141 141
142 this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1, 142 this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1,
143 SK_Scalar1, 143 SK_Scalar1,
144 sk_ref_sp<SkImageFilter> (input), 144 input,
145 cropRect).release()); 145 cropRect).release());
146 this->addFilter("drop shadow", SkDropShadowImageFilter::Create( 146 this->addFilter("drop shadow", SkDropShadowImageFilter::Create(
147 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, 147 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN,
148 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, input, cropRect)); 148 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode,
149 input.get(), cropRect));
149 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi tDiffuse( 150 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi tDiffuse(
150 location, SK_ColorGREEN, 0, 0, input, cropRect)); 151 location, SK_ColorGREEN, 0, 0, input.get(), cropRect));
151 this->addFilter("specular lighting", 152 this->addFilter("specular lighting",
152 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col orGREEN, 0, 0, 0, 153 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col orGREEN, 0, 0, 0,
153 input, cropRect) ); 154 input.get(), cro pRect));
154 this->addFilter("matrix convolution", 155 this->addFilter("matrix convolution",
155 SkMatrixConvolutionImageFilter::Create( 156 SkMatrixConvolutionImageFilter::Create(
156 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), 157 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1),
157 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, i nput, cropRect)); 158 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false,
158 this->addFilter("merge", SkMergeImageFilter::Make(sk_ref_sp<SkImageFilte r>(input), 159 input.get(), cropRect));
159 sk_ref_sp<SkImageFilte r>(input), 160 this->addFilter("merge", SkMergeImageFilter::Make(input, input,
160 SkXfermode::kSrcOver_M ode, 161 SkXfermode::kSrcOver_M ode,
161 cropRect).release()); 162 cropRect).release());
162 { 163 {
163 SkPaint greenColorShaderPaint; 164 SkPaint greenColorShaderPaint;
164 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR EEN)); 165 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR EEN));
165 166
166 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64)); 167 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64));
167 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC olorShaderPaint, 168 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC olorShaderPaint,
168 &leftS ideCropRect)); 169 &leftS ideCropRect));
169 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32 , 64)); 170 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32 , 64));
170 sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(green ColorShaderPaint, 171 sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(green ColorShaderPaint,
171 &righ tSideCropRect)); 172 &righ tSideCropRect));
172 173
173 174
174 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Ma ke( 175 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Ma ke(
175 std::move(paintFilterLeft), std::move(paintFilterRight), 176 std::move(paintFilterLeft), std::move(paintFilterRight),
176 SkXfermode::kSrcOver_Mode, cropRect).release()); 177 SkXfermode::kSrcOver_Mode, cropRect).release());
177 } 178 }
178 179
179 this->addFilter("offset", 180 this->addFilter("offset",
180 SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, 181 SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, input,
181 sk_ref_sp<SkImageFilter>(input ),
182 cropRect).release()); 182 cropRect).release());
183 this->addFilter("dilate", SkDilateImageFilter::Create(3, 2, input, cropR ect)); 183 this->addFilter("dilate", SkDilateImageFilter::Make(3, 2, input, cropRec t).release());
184 this->addFilter("erode", SkErodeImageFilter::Create(2, 3, input, cropRec t)); 184 this->addFilter("erode", SkErodeImageFilter::Make(2, 3, input, cropRect) .release());
185 this->addFilter("tile", SkTileImageFilter::Create( 185 this->addFilter("tile", SkTileImageFilter::Create(
186 SkRect::MakeXYWH(0, 0, 50, 50), 186 SkRect::MakeXYWH(0, 0, 50, 50),
187 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100), 187 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100),
188 input)); 188 input.get()));
189 if (!cropRect) { 189 if (!cropRect) {
190 this->addFilter("matrix", SkImageFilter::CreateMatrixFilter( 190 this->addFilter("matrix", SkImageFilter::CreateMatrixFilter(
191 matrix, kLow_SkFilterQuality, input)); 191 matrix, kLow_SkFilterQuality, input.get()));
192 } 192 }
193 193
194 { 194 {
195 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, 195 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, input) );
196 sk_ref_sp<SkImageF ilter>(input)));
197 196
198 this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, f ive, 197 this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, f ive,
199 std::mo ve(blur), 198 std::mo ve(blur),
200 cropRec t).release()); 199 cropRec t).release());
201 } 200 }
202 { 201 {
203 SkRTreeFactory factory; 202 SkRTreeFactory factory;
204 SkPictureRecorder recorder; 203 SkPictureRecorder recorder;
205 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory , 0); 204 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory , 0);
206 205
(...skipping 10 matching lines...) Expand all
217 { 216 {
218 SkPaint paint; 217 SkPaint paint;
219 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S calar1, 1, 0)); 218 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S calar1, 1, 0));
220 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); 219 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint));
221 220
222 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five , 221 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five ,
223 std::move( paintFilter), 222 std::move( paintFilter),
224 cropRect). release()); 223 cropRect). release());
225 } 224 }
226 this->addFilter("xfermode", SkXfermodeImageFilter::Make( 225 this->addFilter("xfermode", SkXfermodeImageFilter::Make(
227 SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect).rel ease()); 226 SkXfermode::Make(SkXfermode::kSrc_Mode), input.get(), input.get(),
227 cropRect).release());
228 } 228 }
229 int count() const { return fFilters.count(); } 229 int count() const { return fFilters.count(); }
230 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g et(); } 230 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g et(); }
231 const char* getName(int index) const { return fFilters[index].fName; } 231 const char* getName(int index) const { return fFilters[index].fName; }
232 private: 232 private:
233 struct Filter { 233 struct Filter {
234 Filter() : fName(nullptr), fFilter(nullptr) {} 234 Filter() : fName(nullptr), fFilter(nullptr) {}
235 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f ilter) {} 235 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f ilter) {}
236 const char* fName; 236 const char* fName;
237 sk_sp<SkImageFilter> fFilter; 237 sk_sp<SkImageFilter> fFilter;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 skiatest::Reporter* reporter, 474 skiatest::Reporter* reporter,
475 GrContext* context) { 475 GrContext* context) {
476 // Check that all filters offset to their absolute crop rect, 476 // Check that all filters offset to their absolute crop rect,
477 // unaffected by the input crop rect. 477 // unaffected by the input crop rect.
478 // Tests pass by not asserting. 478 // Tests pass by not asserting.
479 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); 479 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) );
480 SkASSERT(srcImg); 480 SkASSERT(srcImg);
481 481
482 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); 482 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80));
483 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); 483 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60));
484 SkAutoTUnref<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect)); 484 sk_sp<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect));
485 485
486 FilterList filters(input.get(), &cropRect); 486 FilterList filters(input, &cropRect);
487 487
488 for (int i = 0; i < filters.count(); ++i) { 488 for (int i = 0; i < filters.count(); ++i) {
489 SkImageFilter* filter = filters.getFilter(i); 489 SkImageFilter* filter = filters.getFilter(i);
490 SkIPoint offset; 490 SkIPoint offset;
491 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr); 491 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr);
492 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, & offset)); 492 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, & offset));
493 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i)); 493 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i));
494 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i)); 494 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i));
495 } 495 }
496 } 496 }
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) { 663 DEF_GPUTEST_FOR_NATIVE_CONTEXT(TestZeroBlurSigma_Gpu, reporter, context) {
664 run_gpu_test(reporter, context, 100, test_zero_blur_sigma); 664 run_gpu_test(reporter, context, 100, test_zero_blur_sigma);
665 } 665 }
666 #endif 666 #endif
667 667
668 DEF_TEST(ImageFilterDrawTiled, reporter) { 668 DEF_TEST(ImageFilterDrawTiled, reporter) {
669 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly 669 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly
670 // match the same filters drawn with a single full-canvas bitmap draw. 670 // match the same filters drawn with a single full-canvas bitmap draw.
671 // Tests pass by not asserting. 671 // Tests pass by not asserting.
672 672
673 FilterList filters; 673 FilterList filters(nullptr);
674 674
675 SkBitmap untiledResult, tiledResult; 675 SkBitmap untiledResult, tiledResult;
676 const int width = 64, height = 64; 676 const int width = 64, height = 64;
677 untiledResult.allocN32Pixels(width, height); 677 untiledResult.allocN32Pixels(width, height);
678 tiledResult.allocN32Pixels(width, height); 678 tiledResult.allocN32Pixels(width, height);
679 SkCanvas tiledCanvas(tiledResult); 679 SkCanvas tiledCanvas(tiledResult);
680 SkCanvas untiledCanvas(untiledResult); 680 SkCanvas untiledCanvas(untiledResult);
681 int tileSize = 8; 681 int tileSize = 8;
682 682
683 for (int scale = 1; scale <= 2; ++scale) { 683 for (int scale = 1; scale <= 2; ++scale) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 sk_sp<SkImageFilter> filter2(make_blur(std::move(filter1))); 796 sk_sp<SkImageFilter> filter2(make_blur(std::move(filter1)));
797 797
798 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); 798 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100);
799 SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236); 799 SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236);
800 bounds = filter2->filterBounds(bounds, SkMatrix::I()); 800 bounds = filter2->filterBounds(bounds, SkMatrix::I());
801 801
802 REPORTER_ASSERT(reporter, bounds == expectedBounds); 802 REPORTER_ASSERT(reporter, bounds == expectedBounds);
803 } 803 }
804 804
805 DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) { 805 DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) {
806 sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Create(2, 2)); 806 sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Make(2, 2, nullptr));
807 sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1))); 807 sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1)));
808 808
809 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); 809 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100);
810 SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234); 810 SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234);
811 bounds = filter2->filterBounds(bounds, SkMatrix::I()); 811 bounds = filter2->filterBounds(bounds, SkMatrix::I());
812 812
813 REPORTER_ASSERT(reporter, bounds == expectedBounds); 813 REPORTER_ASSERT(reporter, bounds == expectedBounds);
814 } 814 }
815 815
816 DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) { 816 DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) {
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
1623 1623
1624 test_xfermode_cropped_input(&canvas, reporter); 1624 test_xfermode_cropped_input(&canvas, reporter);
1625 } 1625 }
1626 1626
1627 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { 1627 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) {
1628 auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, 1628 auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes,
1629 SkImageInfo::MakeN32Premul(100, 100 ))); 1629 SkImageInfo::MakeN32Premul(100, 100 )));
1630 test_large_blur_input(reporter, surface->getCanvas()); 1630 test_large_blur_input(reporter, surface->getCanvas());
1631 } 1631 }
1632 #endif 1632 #endif
OLDNEW
« gm/imagefilterscropped.cpp ('K') | « src/effects/SkMorphologyImageFilter.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698