Index: src/core/SkPoint.cpp |
diff --git a/src/core/SkPoint.cpp b/src/core/SkPoint.cpp |
index 719ee54b225ae72e57ee6752ab22a107178adc66..8a6d0564af59b96d3e9842c02af373866b11bf02 100644 |
--- a/src/core/SkPoint.cpp |
+++ b/src/core/SkPoint.cpp |
@@ -7,6 +7,7 @@ |
*/ |
+#include "SkMathPriv.h" |
#include "SkPoint.h" |
void SkIPoint::rotateCW(SkIPoint* dst) const { |
@@ -168,7 +169,17 @@ bool SkPoint::setLength(float x, float y, float length) { |
// divide by inf. and return (0,0) vector. |
double xx = x; |
double yy = y; |
+ #ifdef SK_DISCARD_DENORMALIZED_FOR_SPEED |
+ // The iOS ARM processor discards small denormalized numbers to go faster. |
+ // Casting this to a float would cause the scale to go to zero. Keeping it |
+ // as a double for the multiply keeps the scale non-zero. |
+ double dscale = length / sqrt(xx * xx + yy * yy); |
+ fX = x * dscale; |
+ fY = y * dscale; |
+ return true; |
+ #else |
scale = (float)(length / sqrt(xx * xx + yy * yy)); |
+ #endif |
} |
fX = x * scale; |
fY = y * scale; |