aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-07 13:51:05 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-07 13:51:05 +0000
commite3987da2d293c4a6d0ccaac1c4066c20fb652ee6 (patch)
tree7879a857c96348757e5d02182ceec453ca8a826d
parentc56a83ca9c1011fadd25475188fc2ea08930ec41 (diff)
make CanNormalize inline for the float build (big speedup for PathIter)
git-svn-id: http://skia.googlecode.com/svn/trunk@3845 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--include/core/SkPoint.h8
-rw-r--r--src/core/SkPoint.cpp5
2 files changed, 7 insertions, 6 deletions
diff --git a/include/core/SkPoint.h b/include/core/SkPoint.h
index 4570e25613..cc483a62ac 100644
--- a/include/core/SkPoint.h
+++ b/include/core/SkPoint.h
@@ -213,7 +213,13 @@ struct SK_API SkPoint {
* Return true if the computed length of the vector is >= the internal
* tolerance (used to avoid dividing by tiny values).
*/
- static bool CanNormalize(SkScalar dx, SkScalar dy);
+ static bool CanNormalize(SkScalar dx, SkScalar dy)
+#ifdef SK_SCALAR_IS_FLOAT
+ // Simple enough (and performance critical sometimes) so we inline it.
+ { return (dx*dx + dy*dy) > (SK_ScalarNearlyZero * SK_ScalarNearlyZero); }
+#else
+ ;
+#endif
bool canNormalize() const {
return CanNormalize(fX, fY);
diff --git a/src/core/SkPoint.cpp b/src/core/SkPoint.cpp
index a347b86a7d..c51b7cabe1 100644
--- a/src/core/SkPoint.cpp
+++ b/src/core/SkPoint.cpp
@@ -118,11 +118,6 @@ SkScalar SkPoint::Normalize(SkPoint* pt) {
return 0;
}
-bool SkPoint::CanNormalize(SkScalar dx, SkScalar dy) {
- float mag2_unused;
- return !isLengthNearlyZero(dx, dy, &mag2_unused);
-}
-
SkScalar SkPoint::Length(SkScalar dx, SkScalar dy) {
return sk_float_sqrt(getLengthSquared(dx, dy));
}