| commit | 1df888bc3a502279eb46e6a71fbf257e1de940ed | [log] [tgz] |
|---|---|---|
| author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | Tue Apr 24 22:47:21 2012 +0000 |
| committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | Tue Apr 24 22:47:21 2012 +0000 |
| tree | a034ce93cc99b74c15ced9f2d8247cd7151d0d12 | |
| parent | 566c837844ba211391448ba59f1dc7ec19a61d0c [diff] [blame] |
check for numerical imprecision on phase fixes http://code.google.com/p/chromium/issues/detail?id=124652 git-svn-id: http://skia.googlecode.com/svn/trunk@3761 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkDashPathEffect.cpp b/src/effects/SkDashPathEffect.cpp index 88f003b..d511ca6 100644 --- a/src/effects/SkDashPathEffect.cpp +++ b/src/effects/SkDashPathEffect.cpp
@@ -50,7 +50,14 @@ phase = SkScalarMod(phase, len); } phase = len - phase; - } else if (phase >= len) { + // Due to finite precision, its possible that phase == len, even after the + // subtract (if len >>> phase), so we need to detect that here. + SkASSERT(phase <= len); + if (phase == len) { + phase = 0; + } + } + if (phase >= len) { phase = SkScalarMod(phase, len); }