| Index: src/effects/gradients/SkLinearGradient.cpp
|
| diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
|
| index 298466c8a6500bdda29905a93dbbd7b24b4d5939..4f90c27c8c45980ca05ca545c8af9592abbdb8ba 100644
|
| --- a/src/effects/gradients/SkLinearGradient.cpp
|
| +++ b/src/effects/gradients/SkLinearGradient.cpp
|
| @@ -668,12 +668,12 @@ void SkLinearGradient::LinearGradientContext::shade4_dx_clamp(SkPMColor dstC[],
|
| }
|
|
|
| fx += n * dx;
|
| - count -= n;
|
| - SkASSERT(count >= 0);
|
| + // fx should now outside of the p0..p1 interval. However, due to float precision loss,
|
| + // its possible that fx is slightly too small/large, so we clamp it.
|
| if (dx_is_pos) {
|
| - SkASSERT(0 == count || fx >= p1);
|
| + fx = SkTMax(fx, p1);
|
| } else {
|
| - SkASSERT(0 == count || fx <= p0);
|
| + fx = SkTMin(fx, p0);
|
| }
|
|
|
| ramp<apply_alpha>(dstC, n, c, dc, dither0, dither1);
|
| @@ -683,6 +683,9 @@ void SkLinearGradient::LinearGradientContext::shade4_dx_clamp(SkPMColor dstC[],
|
| if (n & 1) {
|
| SkTSwap(dither0, dither1);
|
| }
|
| +
|
| + count -= n;
|
| + SkASSERT(count >= 0);
|
| }
|
| }
|
|
|
|
|