aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkMaskBlurFilter.cpp
Commit message (Collapse)AuthorAge
* Limit maximum sigma to avoid overflowsGravatar Herb Derby2017-09-26
| | | | | | | | | | | | | | | Limit the maximum sigma to avoid overflowing the blur calculation, and more importantly to limit the size of buffers. I checked that this failed on my linux box, and this CL fixes the problem. BUG=chromium:768294 Change-Id: I7ed14acc47f546db9c00c78c148a898459852a9f Reviewed-on: https://skia-review.googlesource.com/50920 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org>
* Remove legacy code for box blur.Gravatar Herb Derby2017-09-19
| | | | | | | Change-Id: I2a4ca5d623adcf923981dd27be40dcbf81152954 Reviewed-on: https://skia-review.googlesource.com/48583 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Herb Derby <herb@google.com>
* Sk4i version of blur.Gravatar Herb Derby2017-09-14
| | | | | | | | | | | | | | | | | For the blur_1.50_normal_low_quality benchmark, this code goes from about 120us to 85us. The original implementation executes at about 95us. This changed in controlled by the flag: SK_SUPPORT_LEGACY_SLOW_SMALL_BLUR BUG=chromium:759070 CQ_INCLUDE_TRYBOTS=skia.primary:Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD Change-Id: If722cb8ffd8c47a94b7a6b4e6dd26fd1474b6209 Reviewed-on: https://skia-review.googlesource.com/45300 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
* Clean up mask blur code.Gravatar Herb Derby2017-09-06
| | | | | | | | | | | | | | | | | | | | | | This code has interpolation for small radii like the old code. This code is protected by the flag: SK_LEGACY_SUPPORT_INTEGER_SMALL_RADII In addition, I have improved the scale calculation for Gauss to be more accurate, and it is also protected by the flag: SK_LEGACY_SUPPORT_INTEGER_SMALL_RADII When SK_LEGACY_SUPPORT_INTEGER_SMALL_RADII is defined, then there is no difference. Bug: skia: Change-Id: I588299c3768dd009852ce41f33a6a8572d9f4ad3 Reviewed-on: https://skia-review.googlesource.com/41746 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org>
* Use interpolating blur for sigma < 2Gravatar Herb Derby2017-08-31
| | | | | | | | | | | | | Reimplemnet the original interpolating code. Moving from the integer blur code to this code is controled by the flag: SK_LEGACY_SUPPORT_INTEGER_SMALL_RADII BUG=chromium:759273 Change-Id: I17205d704a0cae68a8a027c6bb235f81b5c62e24 Reviewed-on: https://skia-review.googlesource.com/41082 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Herb Derby <herb@google.com>
* Fix poor handling of nullptr for new blur codeGravatar Herb Derby2017-08-22
| | | | | | | | | BUG=chromium:749147 Change-Id: I2d4259805300c3f5ed9d25e142e9f12570c59781 Reviewed-on: https://skia-review.googlesource.com/37121 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
* Use SkSafeMath to calculate memory sizes.Gravatar Herb Derby2017-08-16
| | | | | | | | | BUG=chromium:749147 Change-Id: I07d18e089be1138ad83bfde392c7daf2d01d388c Reviewed-on: https://skia-review.googlesource.com/34747 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
* Add an average mode for sigma < 2Gravatar Herb Derby2017-08-15
| | | | | | | | | | | | | | | | | The original code had an optimization when sigma < 2 that averaged pixels instead of Gaussian bluring them. This CL adds that behavior back to the new implementation. Add the flag SK_LEGACY_USE_GAUSS_FOR_SMALL_RADII to control the new behavior. BUG=chromium:745290 Change-Id: I6e7417ce7f42949f88376b549743a9f047667f09 Reviewed-on: https://skia-review.googlesource.com/34624 Commit-Queue: Herb Derby <herb@google.com> Commit-Queue: Mike Klein <mtklein@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
* Revert "Revert "Revert "Add an average mode for sigma < 2"""Gravatar Herb Derby2017-08-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit f6975ea5fb178c572cf4c1cd255e5fe623418d45. Reason for revert: Did not take into account there are layout test problems too. Adding a legacy flag. Original change's description: > Revert "Revert "Add an average mode for sigma < 2"" > > We are going to have the google3 auto roller build the CL, > and add the fixes to the failing tests to that CL. Because > these are scuba changes, this should be simpler. > > This reverts commit 8e7503195c40492df6a9c072d3303c9df9ec32dc. > > Reason for revert: <INSERT REASONING HERE> > > Original change's description: > > Revert "Add an average mode for sigma < 2" > > > > This reverts commit ba8275148ab8b10393b053e2586b852796c4afc2. > > > > Reason for revert: layout tests, Google3 equivalent failing. > > > > Original change's description: > > > Add an average mode for sigma < 2 > > > > > > The original code had an optimization when sigma < 2 that averaged > > > pixels instead of Gaussian bluring them. This CL adds that > > > behavior back to the new implementat. > > > > > > BUG=chromium:745290 > > > Change-Id: I35b7de2138a859d546439cc2053b4b599a94ebe1 > > > Reviewed-on: https://skia-review.googlesource.com/34180 > > > Commit-Queue: Herb Derby <herb@google.com> > > > Reviewed-by: Mike Klein <mtklein@chromium.org> > > > > TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com > > > > Change-Id: Ie8f38b042acec42260913cb7bed5538a2c957e9b > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: chromium:745290 > > Reviewed-on: https://skia-review.googlesource.com/34640 > > Reviewed-by: Mike Klein <mtklein@google.com> > > Commit-Queue: Mike Klein <mtklein@google.com> > > TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com > > Change-Id: I5f7b706a2f8c8d52b3576c638ecddf12a1652031 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: chromium:745290 > Reviewed-on: https://skia-review.googlesource.com/34641 > Reviewed-by: Herb Derby <herb@google.com> > Commit-Queue: Herb Derby <herb@google.com> TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com Change-Id: I9064f8494e5a1a4a78dd545697e22f52985c0fa1 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:745290 Reviewed-on: https://skia-review.googlesource.com/34623 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Herb Derby <herb@google.com>
* Revert "Revert "Add an average mode for sigma < 2""Gravatar Herb Derby2017-08-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We are going to have the google3 auto roller build the CL, and add the fixes to the failing tests to that CL. Because these are scuba changes, this should be simpler. This reverts commit 8e7503195c40492df6a9c072d3303c9df9ec32dc. Reason for revert: <INSERT REASONING HERE> Original change's description: > Revert "Add an average mode for sigma < 2" > > This reverts commit ba8275148ab8b10393b053e2586b852796c4afc2. > > Reason for revert: layout tests, Google3 equivalent failing. > > Original change's description: > > Add an average mode for sigma < 2 > > > > The original code had an optimization when sigma < 2 that averaged > > pixels instead of Gaussian bluring them. This CL adds that > > behavior back to the new implementat. > > > > BUG=chromium:745290 > > Change-Id: I35b7de2138a859d546439cc2053b4b599a94ebe1 > > Reviewed-on: https://skia-review.googlesource.com/34180 > > Commit-Queue: Herb Derby <herb@google.com> > > Reviewed-by: Mike Klein <mtklein@chromium.org> > > TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com > > Change-Id: Ie8f38b042acec42260913cb7bed5538a2c957e9b > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: chromium:745290 > Reviewed-on: https://skia-review.googlesource.com/34640 > Reviewed-by: Mike Klein <mtklein@google.com> > Commit-Queue: Mike Klein <mtklein@google.com> TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com Change-Id: I5f7b706a2f8c8d52b3576c638ecddf12a1652031 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:745290 Reviewed-on: https://skia-review.googlesource.com/34641 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Herb Derby <herb@google.com>
* Revert "Add an average mode for sigma < 2"Gravatar Mike Klein2017-08-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit ba8275148ab8b10393b053e2586b852796c4afc2. Reason for revert: layout tests, Google3 equivalent failing. Original change's description: > Add an average mode for sigma < 2 > > The original code had an optimization when sigma < 2 that averaged > pixels instead of Gaussian bluring them. This CL adds that > behavior back to the new implementat. > > BUG=chromium:745290 > Change-Id: I35b7de2138a859d546439cc2053b4b599a94ebe1 > Reviewed-on: https://skia-review.googlesource.com/34180 > Commit-Queue: Herb Derby <herb@google.com> > Reviewed-by: Mike Klein <mtklein@chromium.org> TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com Change-Id: Ie8f38b042acec42260913cb7bed5538a2c957e9b No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:745290 Reviewed-on: https://skia-review.googlesource.com/34640 Reviewed-by: Mike Klein <mtklein@google.com> Commit-Queue: Mike Klein <mtklein@google.com>
* Add an average mode for sigma < 2Gravatar Herb Derby2017-08-14
| | | | | | | | | | | | The original code had an optimization when sigma < 2 that averaged pixels instead of Gaussian bluring them. This CL adds that behavior back to the new implementat. BUG=chromium:745290 Change-Id: I35b7de2138a859d546439cc2053b4b599a94ebe1 Reviewed-on: https://skia-review.googlesource.com/34180 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
* Revert "Revert "check for no blur and exit early""Gravatar Mike Reed2017-07-21
| | | | | | | | | | This reverts commit 8825a09fc88f46dcec1d547dfbe7457ea224790b. Bug: skia: Change-Id: I01df7bf9e398012b5320655da3cab306256e31fb Reviewed-on: https://skia-review.googlesource.com/25740 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
* Revert "check for no blur and exit early"Gravatar Cary Clark2017-07-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 35a5e418b96053bbdebef2cceb33db995f960010. Reason for revert: breaks google 3 Original change's description: > check for no blur and exit early > > Bug: skia: > Change-Id: I98c07c5fd77ec67398dd4df12fb6a24aa4ca7731 > Reviewed-on: https://skia-review.googlesource.com/25567 > Commit-Queue: Mike Reed <reed@google.com> > Reviewed-by: Mike Klein <mtklein@chromium.org> > Reviewed-by: Florin Malita <fmalita@chromium.org> TBR=mtklein@chromium.org,mtklein@google.com,fmalita@chromium.org,reed@google.com Change-Id: I9c4b50bb2fda504e5c61ed03c0722abff327ca72 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia: Reviewed-on: https://skia-review.googlesource.com/25568 Reviewed-by: Cary Clark <caryclark@google.com> Commit-Queue: Cary Clark <caryclark@google.com>
* check for no blur and exit earlyGravatar Mike Reed2017-07-21
| | | | | | | | | Bug: skia: Change-Id: I98c07c5fd77ec67398dd4df12fb6a24aa4ca7731 Reviewed-on: https://skia-review.googlesource.com/25567 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org> Reviewed-by: Florin Malita <fmalita@chromium.org>
* Revert "Revert "Experimental blur code with 32 bit fix.""Gravatar Mike Reed2017-07-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 27b3d272a8fcce24813212f5816b177090111ec6. Reason for revert: guard has landed in android Original change's description: > Revert "Experimental blur code with 32 bit fix." > > This reverts commit d4b2c537d058ad4cb890ba116d00aa86c3416c08. > > Reason for revert: speculative fix for android-roll > > java.lang.AssertionError: expected:<0> but was:<255> > at org.junit.Assert.fail(Assert.java:88) > at org.junit.Assert.failNotEquals(Assert.java:834) > at org.junit.Assert.assertEquals(Assert.java:645) > at org.junit.Assert.assertEquals(Assert.java:631) > at android.graphics.cts.BlurMaskFilterTest.verifyColor(BlurMaskFilterTest.java:79) > at android.graphics.cts.BlurMaskFilterTest.verifyQuadrants(BlurMaskFilterTest.java:72) > at android.graphics.cts.BlurMaskFilterTest.testBlurMaskFilter(BlurMaskFilterTest.java:56) > > Original change's description: > > Experimental blur code with 32 bit fix. > > > > This uses a new method of blurring that runs the three > > passes of the box filter in a single pass. This implementation > > currently only does 1x1 pixel at a time, but it should be simple > > to expand to 4x4 pixels at a time. > > > > On the blur_10_normal_high_quality benchmark, the new is 7% faster > > than the old code. For the blur_100.50_normal_high_quality > > benchmark, the new code is 11% slower. > > > > Bug: skia: > > Change-Id: I847270906b0ceac1dfbf43ab5446756689ef660f > > Reviewed-on: https://skia-review.googlesource.com/22700 > > Reviewed-by: Mike Reed <reed@google.com> > > Commit-Queue: Herb Derby <herb@google.com> > > TBR=herb@google.com,reed@google.com > > Change-Id: Ie84f6bf8872cae08c06d679f0c2f2e6c3d8a02a2 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia: > Reviewed-on: https://skia-review.googlesource.com/22880 > Reviewed-by: Mike Reed <reed@google.com> > Commit-Queue: Mike Reed <reed@google.com> TBR=herb@google.com,reed@google.com Change-Id: I393d1c05f83ccf98137201bc7b4e7d8e8b0e8742 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia: Reviewed-on: https://skia-review.googlesource.com/23121 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
* Revert "Experimental blur code with 32 bit fix."Gravatar Mike Reed2017-07-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit d4b2c537d058ad4cb890ba116d00aa86c3416c08. Reason for revert: speculative fix for android-roll java.lang.AssertionError: expected:<0> but was:<255> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:645) at org.junit.Assert.assertEquals(Assert.java:631) at android.graphics.cts.BlurMaskFilterTest.verifyColor(BlurMaskFilterTest.java:79) at android.graphics.cts.BlurMaskFilterTest.verifyQuadrants(BlurMaskFilterTest.java:72) at android.graphics.cts.BlurMaskFilterTest.testBlurMaskFilter(BlurMaskFilterTest.java:56) Original change's description: > Experimental blur code with 32 bit fix. > > This uses a new method of blurring that runs the three > passes of the box filter in a single pass. This implementation > currently only does 1x1 pixel at a time, but it should be simple > to expand to 4x4 pixels at a time. > > On the blur_10_normal_high_quality benchmark, the new is 7% faster > than the old code. For the blur_100.50_normal_high_quality > benchmark, the new code is 11% slower. > > Bug: skia: > Change-Id: I847270906b0ceac1dfbf43ab5446756689ef660f > Reviewed-on: https://skia-review.googlesource.com/22700 > Reviewed-by: Mike Reed <reed@google.com> > Commit-Queue: Herb Derby <herb@google.com> TBR=herb@google.com,reed@google.com Change-Id: Ie84f6bf8872cae08c06d679f0c2f2e6c3d8a02a2 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia: Reviewed-on: https://skia-review.googlesource.com/22880 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
* Experimental blur code with 32 bit fix.Gravatar Herb Derby2017-07-12
| | | | | | | | | | | | | | | | | This uses a new method of blurring that runs the three passes of the box filter in a single pass. This implementation currently only does 1x1 pixel at a time, but it should be simple to expand to 4x4 pixels at a time. On the blur_10_normal_high_quality benchmark, the new is 7% faster than the old code. For the blur_100.50_normal_high_quality benchmark, the new code is 11% slower. Bug: skia: Change-Id: I847270906b0ceac1dfbf43ab5446756689ef660f Reviewed-on: https://skia-review.googlesource.com/22700 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Herb Derby <herb@google.com>
* Revert "Experimental blur code."Gravatar Florin Malita2017-07-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit d96ed9d0def2d660f537e4ab5c79e9e66470ee22. Reason for revert: dm crashing https://luci-milo.appspot.com/swarming/task/374d82c1d1263910/steps/symbolized_dm/0/stdout Likely culprit: unit test BlurDrawing Stack trace: /mnt/pd0/s/w/ir/out/Debug/dm(+0x2440eb) [0x568770eb] linux-gate.so.1(__kernel_sigreturn+0) [0xf7714ca0] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK16SkMaskBlurFilter11blurOneScanENS_10FilterInfoEPKhjS2_PhjS3_+0x236) [0x5766301e] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK16SkMaskBlurFilter4blurERK6SkMaskPS0_+0x285) [0x57663491] /mnt/pd0/s/w/ir/out/Debug/dm(_ZN10SkBlurMask7BoxBlurEP6SkMaskRKS0_f11SkBlurStyle13SkBlurQualityP8SkIPointb+0x5c) [0x5720d48e] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK20SkBlurMaskFilterImpl10filterMaskEP6SkMaskRKS0_RK8SkMatrixP8SkIPoint+0x67) [0x5720e427] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK20SkBlurMaskFilterImpl17filterRectsToNineEPK6SkRectiRK8SkMatrixRK7SkIRectPN12SkMaskFilter9NinePatchE+0x579) [0x5721a247] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK12SkMaskFilter10filterPathERK6SkPathRK8SkMatrixRK12SkRasterClipP9SkBlitterN11SkStrokeRec9InitStyleE+0xf6) [0x5706c2bc] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK6SkDraw11drawDevPathERK6SkPathRK7SkPaintbP9SkBlitterb+0x1bb) [0x57034f1b] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixbbP9SkBlitter+0x47f) [0x57035dd3] /mnt/pd0/s/w/ir/out/Debug/dm(_ZN14SkBitmapDevice8drawPathERK6SkPathRK7SkPaintPK8SkMatrixb+0x6e) [0x56f937fc] /mnt/pd0/s/w/ir/out/Debug/dm(_ZN8SkCanvas10onDrawPathERK6SkPathRK7SkPaint+0x39d) [0x56fb12e5] /mnt/pd0/s/w/ir/out/Debug/dm(_ZN8SkCanvas8drawPathERK6SkPathRK7SkPaint+0x18) [0x56fad926] /mnt/pd0/s/w/ir/out/Debug/dm(+0x3f71b3) [0x56a2a1b3] /mnt/pd0/s/w/ir/out/Debug/dm(+0x2450bd) [0x568780bd] /mnt/pd0/s/w/ir/out/Debug/dm(+0x2450fb) [0x568780fb] /mnt/pd0/s/w/ir/out/Debug/dm(+0xae53e7) [0x571183e7] /mnt/pd0/s/w/ir/out/Debug/dm(_ZNKSt8functionIFvvEEclEv+0x20) [0x569f98de] /mnt/pd0/s/w/ir/out/Debug/dm(_ZN12SkThreadPool4LoopEPv+0x298) [0x57045b2f] /mnt/pd0/s/w/ir/out/Debug/dm(+0xbbd92c) [0x571f092c] /lib/i386-linux-gnu/libpthread.so.0(+0x627a) [0xf76e827a] /lib/i386-linux-gnu/libc.so.6(clone+0x66) [0xf70ecb56] Segmentation fault Original change's description: > Experimental blur code. > > This uses a new method of blurring that runs the three > passes of the box filter in a single pass. This implementation > currently only does 1x1 pixel at a time, but it should be simple > to expand to 4x4 pixels at a time. > > On the blur_10_normal_high_quality benchmark, the new is 7% faster > than the old code. For the blur_100.50_normal_high_quality > benchmark, the new code is 11% slower. > > Change-Id: Iea37294abc7c27de5ad569adf8bc62df77eafd02 > Reviewed-on: https://skia-review.googlesource.com/21739 > Commit-Queue: Herb Derby <herb@google.com> > Reviewed-by: Mike Reed <reed@google.com> TBR=herb@google.com,reed@google.com Change-Id: I9e896c548d0a4cd3308d6a311c8bd16719a08a85 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/22421 Reviewed-by: Florin Malita <fmalita@google.com> Commit-Queue: Florin Malita <fmalita@google.com>
* Experimental blur code.Gravatar Herb Derby2017-07-12
This uses a new method of blurring that runs the three passes of the box filter in a single pass. This implementation currently only does 1x1 pixel at a time, but it should be simple to expand to 4x4 pixels at a time. On the blur_10_normal_high_quality benchmark, the new is 7% faster than the old code. For the blur_100.50_normal_high_quality benchmark, the new code is 11% slower. Change-Id: Iea37294abc7c27de5ad569adf8bc62df77eafd02 Reviewed-on: https://skia-review.googlesource.com/21739 Commit-Queue: Herb Derby <herb@google.com> Reviewed-by: Mike Reed <reed@google.com>