| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |