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

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: update to ToT 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/SkMorphologyImageFilter.cpp ('k') | 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 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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 SkBitmap make_gradient_circle(int width, int height) { 136 SkBitmap make_gradient_circle(int width, int height) {
137 SkBitmap bitmap; 137 SkBitmap bitmap;
138 bitmap.allocN32Pixels(width, height); 138 bitmap.allocN32Pixels(width, height);
139 SkCanvas canvas(bitmap); 139 SkCanvas canvas(bitmap);
140 draw_gradient_circle(&canvas, width, height); 140 draw_gradient_circle(&canvas, width, height);
141 return bitmap; 141 return bitmap;
142 } 142 }
143 143
144 class FilterList { 144 class FilterList {
145 public: 145 public:
146 FilterList(SkImageFilter* input = nullptr, const SkImageFilter::CropRect* cr opRect = nullptr) { 146 FilterList(sk_sp<SkImageFilter> input, const SkImageFilter::CropRect* cropRe ct = nullptr) {
147 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); 147 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1);
148 SkScalar kernel[9] = { 148 SkScalar kernel[9] = {
149 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), 149 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
150 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1), 150 SkIntToScalar( 1), SkIntToScalar(-7), SkIntToScalar( 1),
151 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), 151 SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1),
152 }; 152 };
153 const SkISize kernelSize = SkISize::Make(3, 3); 153 const SkISize kernelSize = SkISize::Make(3, 3);
154 const SkScalar gain = SK_Scalar1, bias = 0; 154 const SkScalar gain = SK_Scalar1, bias = 0;
155 const SkScalar five = SkIntToScalar(5); 155 const SkScalar five = SkIntToScalar(5);
156 156
157 SkMatrix matrix; 157 SkMatrix matrix;
158 158
159 matrix.setTranslate(SK_Scalar1, SK_Scalar1); 159 matrix.setTranslate(SK_Scalar1, SK_Scalar1);
160 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1); 160 matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1);
161 161
162 { 162 {
163 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, 163 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED,
164 SkXfermode::kS rcIn_Mode)); 164 SkXfermode::kS rcIn_Mode));
165 165
166 this->addFilter("color filter", 166 this->addFilter("color filter",
167 SkColorFilterImageFilter::Create(cf.get(), input, cropRect)); 167 SkColorFilterImageFilter::Create(cf.get(), input.get(), cropRect ));
168 } 168 }
169 169
170 { 170 {
171 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_c ircle(64, 64))); 171 sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_c ircle(64, 64)));
172 sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gr adientImage))); 172 sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gr adientImage)));
173 173
174 this->addFilter("displacement map", SkDisplacementMapEffect::Create( 174 this->addFilter("displacement map", SkDisplacementMapEffect::Create(
175 SkDisplacementMapEffect::kR_ChannelSelectorType, 175 SkDisplacementMapEffect::kR_ChannelSelectorType,
176 SkDisplacementMapEffect::kB_ChannelSelectorType, 176 SkDisplacementMapEffect::kB_ChannelSelectorType,
177 20.0f, gradientSource.get(), input, cropRect)); 177 20.0f, gradientSource.get(), input.get(), cropRect));
178 } 178 }
179 179
180 this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1, 180 this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1,
181 SK_Scalar1, 181 SK_Scalar1,
182 sk_ref_sp<SkImageFilter> (input), 182 input,
183 cropRect).release()); 183 cropRect).release());
184 this->addFilter("drop shadow", SkDropShadowImageFilter::Create( 184 this->addFilter("drop shadow", SkDropShadowImageFilter::Create(
185 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, 185 SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN,
186 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, input, cropRect)); 186 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode,
187 input.get(), cropRect));
187 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi tDiffuse( 188 this->addFilter("diffuse lighting", SkLightingImageFilter::CreatePointLi tDiffuse(
188 location, SK_ColorGREEN, 0, 0, input, cropRect)); 189 location, SK_ColorGREEN, 0, 0, input.get(), cropRect));
189 this->addFilter("specular lighting", 190 this->addFilter("specular lighting",
190 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col orGREEN, 0, 0, 0, 191 SkLightingImageFilter::CreatePointLitSpecular(location, SK_Col orGREEN, 0, 0, 0,
191 input, cropRect) ); 192 input.get(), cro pRect));
192 this->addFilter("matrix convolution", 193 this->addFilter("matrix convolution",
193 SkMatrixConvolutionImageFilter::Create( 194 SkMatrixConvolutionImageFilter::Create(
194 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1), 195 kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1),
195 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, i nput, cropRect)); 196 SkMatrixConvolutionImageFilter::kRepeat_TileMode, false,
196 this->addFilter("merge", SkMergeImageFilter::Make(sk_ref_sp<SkImageFilte r>(input), 197 input.get(), cropRect));
197 sk_ref_sp<SkImageFilte r>(input), 198 this->addFilter("merge", SkMergeImageFilter::Make(input, input,
198 SkXfermode::kSrcOver_M ode, 199 SkXfermode::kSrcOver_M ode,
199 cropRect).release()); 200 cropRect).release());
200 { 201 {
201 SkPaint greenColorShaderPaint; 202 SkPaint greenColorShaderPaint;
202 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR EEN)); 203 greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGR EEN));
203 204
204 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64)); 205 SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64));
205 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC olorShaderPaint, 206 sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenC olorShaderPaint,
206 &leftS ideCropRect)); 207 &leftS ideCropRect));
207 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32 , 64)); 208 SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32 , 64));
208 sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(green ColorShaderPaint, 209 sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(green ColorShaderPaint,
209 &righ tSideCropRect)); 210 &righ tSideCropRect));
210 211
211 212
212 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Ma ke( 213 this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Ma ke(
213 std::move(paintFilterLeft), std::move(paintFilterRight), 214 std::move(paintFilterLeft), std::move(paintFilterRight),
214 SkXfermode::kSrcOver_Mode, cropRect).release()); 215 SkXfermode::kSrcOver_Mode, cropRect).release());
215 } 216 }
216 217
217 this->addFilter("offset", 218 this->addFilter("offset",
218 SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, 219 SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, input,
219 sk_ref_sp<SkImageFilter>(input ),
220 cropRect).release()); 220 cropRect).release());
221 this->addFilter("dilate", SkDilateImageFilter::Create(3, 2, input, cropR ect)); 221 this->addFilter("dilate", SkDilateImageFilter::Make(3, 2, input, cropRec t).release());
222 this->addFilter("erode", SkErodeImageFilter::Create(2, 3, input, cropRec t)); 222 this->addFilter("erode", SkErodeImageFilter::Make(2, 3, input, cropRect) .release());
223 this->addFilter("tile", SkTileImageFilter::Create( 223 this->addFilter("tile", SkTileImageFilter::Create(
224 SkRect::MakeXYWH(0, 0, 50, 50), 224 SkRect::MakeXYWH(0, 0, 50, 50),
225 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100), 225 cropRect ? cropRect->rect() : SkRect::MakeXYWH(0, 0, 100, 100),
226 input)); 226 input.get()));
227 if (!cropRect) { 227 if (!cropRect) {
228 this->addFilter("matrix", SkImageFilter::CreateMatrixFilter( 228 this->addFilter("matrix", SkImageFilter::CreateMatrixFilter(
229 matrix, kLow_SkFilterQuality, input)); 229 matrix, kLow_SkFilterQuality, input.get()));
230 } 230 }
231 231
232 { 232 {
233 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, 233 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, input) );
234 sk_ref_sp<SkImageF ilter>(input)));
235 234
236 this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, f ive, 235 this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, f ive,
237 std::mo ve(blur), 236 std::mo ve(blur),
238 cropRec t).release()); 237 cropRec t).release());
239 } 238 }
240 { 239 {
241 SkRTreeFactory factory; 240 SkRTreeFactory factory;
242 SkPictureRecorder recorder; 241 SkPictureRecorder recorder;
243 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory , 0); 242 SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory , 0);
244 243
(...skipping 10 matching lines...) Expand all
255 { 254 {
256 SkPaint paint; 255 SkPaint paint;
257 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S calar1, 1, 0)); 256 paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_S calar1, 1, 0));
258 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); 257 sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint));
259 258
260 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five , 259 this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five ,
261 std::move( paintFilter), 260 std::move( paintFilter),
262 cropRect). release()); 261 cropRect). release());
263 } 262 }
264 this->addFilter("xfermode", SkXfermodeImageFilter::Make( 263 this->addFilter("xfermode", SkXfermodeImageFilter::Make(
265 SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect).rel ease()); 264 SkXfermode::Make(SkXfermode::kSrc_Mode), input.get(), input.get(),
265 cropRect).release());
266 } 266 }
267 int count() const { return fFilters.count(); } 267 int count() const { return fFilters.count(); }
268 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g et(); } 268 SkImageFilter* getFilter(int index) const { return fFilters[index].fFilter.g et(); }
269 const char* getName(int index) const { return fFilters[index].fName; } 269 const char* getName(int index) const { return fFilters[index].fName; }
270 private: 270 private:
271 struct Filter { 271 struct Filter {
272 Filter() : fName(nullptr), fFilter(nullptr) {} 272 Filter() : fName(nullptr), fFilter(nullptr) {}
273 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f ilter) {} 273 Filter(const char* name, SkImageFilter* filter) : fName(name), fFilter(f ilter) {}
274 const char* fName; 274 const char* fName;
275 sk_sp<SkImageFilter> fFilter; 275 sk_sp<SkImageFilter> fFilter;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 skiatest::Reporter* reporter, 512 skiatest::Reporter* reporter,
513 GrContext* context) { 513 GrContext* context) {
514 // Check that all filters offset to their absolute crop rect, 514 // Check that all filters offset to their absolute crop rect,
515 // unaffected by the input crop rect. 515 // unaffected by the input crop rect.
516 // Tests pass by not asserting. 516 // Tests pass by not asserting.
517 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) ); 517 sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 100) );
518 SkASSERT(srcImg); 518 SkASSERT(srcImg);
519 519
520 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80)); 520 SkImageFilter::CropRect inputCropRect(SkRect::MakeXYWH(8, 13, 80, 80));
521 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60)); 521 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(20, 30, 60, 60));
522 SkAutoTUnref<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect)); 522 sk_sp<SkImageFilter> input(make_grayscale(nullptr, &inputCropRect));
523 523
524 FilterList filters(input.get(), &cropRect); 524 FilterList filters(input, &cropRect);
525 525
526 for (int i = 0; i < filters.count(); ++i) { 526 for (int i = 0; i < filters.count(); ++i) {
527 SkImageFilter* filter = filters.getFilter(i); 527 SkImageFilter* filter = filters.getFilter(i);
528 SkIPoint offset; 528 SkIPoint offset;
529 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr); 529 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul lptr);
530 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, & offset)); 530 sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, & offset));
531 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i)); 531 REPORTER_ASSERT_MESSAGE(reporter, resultImg, filters.getName(i));
532 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i)); 532 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, fi lters.getName(i));
533 } 533 }
534 } 534 }
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 DEF_GPUTEST_FOR_NATIVE_CONTEXT(ImageFilterFailAffectsTransparentBlack_Gpu, repor ter, context) { 735 DEF_GPUTEST_FOR_NATIVE_CONTEXT(ImageFilterFailAffectsTransparentBlack_Gpu, repor ter, context) {
736 run_gpu_test(reporter, context, 100, test_fail_affects_transparent_black); 736 run_gpu_test(reporter, context, 100, test_fail_affects_transparent_black);
737 } 737 }
738 #endif 738 #endif
739 739
740 DEF_TEST(ImageFilterDrawTiled, reporter) { 740 DEF_TEST(ImageFilterDrawTiled, reporter) {
741 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly 741 // Check that all filters when drawn tiled (with subsequent clip rects) exac tly
742 // match the same filters drawn with a single full-canvas bitmap draw. 742 // match the same filters drawn with a single full-canvas bitmap draw.
743 // Tests pass by not asserting. 743 // Tests pass by not asserting.
744 744
745 FilterList filters; 745 FilterList filters(nullptr);
746 746
747 SkBitmap untiledResult, tiledResult; 747 SkBitmap untiledResult, tiledResult;
748 const int width = 64, height = 64; 748 const int width = 64, height = 64;
749 untiledResult.allocN32Pixels(width, height); 749 untiledResult.allocN32Pixels(width, height);
750 tiledResult.allocN32Pixels(width, height); 750 tiledResult.allocN32Pixels(width, height);
751 SkCanvas tiledCanvas(tiledResult); 751 SkCanvas tiledCanvas(tiledResult);
752 SkCanvas untiledCanvas(untiledResult); 752 SkCanvas untiledCanvas(untiledResult);
753 int tileSize = 8; 753 int tileSize = 8;
754 754
755 for (int scale = 1; scale <= 2; ++scale) { 755 for (int scale = 1; scale <= 2; ++scale) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 sk_sp<SkImageFilter> filter2(make_blur(std::move(filter1))); 868 sk_sp<SkImageFilter> filter2(make_blur(std::move(filter1)));
869 869
870 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); 870 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100);
871 SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236); 871 SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236);
872 bounds = filter2->filterBounds(bounds, SkMatrix::I()); 872 bounds = filter2->filterBounds(bounds, SkMatrix::I());
873 873
874 REPORTER_ASSERT(reporter, bounds == expectedBounds); 874 REPORTER_ASSERT(reporter, bounds == expectedBounds);
875 } 875 }
876 876
877 DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) { 877 DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) {
878 sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Create(2, 2)); 878 sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Make(2, 2, nullptr));
879 sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1))); 879 sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1)));
880 880
881 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); 881 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100);
882 SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234); 882 SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234);
883 bounds = filter2->filterBounds(bounds, SkMatrix::I()); 883 bounds = filter2->filterBounds(bounds, SkMatrix::I());
884 884
885 REPORTER_ASSERT(reporter, bounds == expectedBounds); 885 REPORTER_ASSERT(reporter, bounds == expectedBounds);
886 } 886 }
887 887
888 DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) { 888 DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) {
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 1693
1694 test_xfermode_cropped_input(&canvas, reporter); 1694 test_xfermode_cropped_input(&canvas, reporter);
1695 } 1695 }
1696 1696
1697 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { 1697 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) {
1698 auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, 1698 auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes,
1699 SkImageInfo::MakeN32Premul(100, 100 ))); 1699 SkImageInfo::MakeN32Premul(100, 100 )));
1700 test_large_blur_input(reporter, surface->getCanvas()); 1700 test_large_blur_input(reporter, surface->getCanvas());
1701 } 1701 }
1702 #endif 1702 #endif
OLDNEW
« no previous file with comments | « src/effects/SkMorphologyImageFilter.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698