Improve integer aligned coordinate detection

65.9998 should be detected as integer aligned. Before this CL
only 65.0001 was detected as an integer.

Test: Pass TextureViewTest#testSamplingWithTransform
Bug: 137682518
Change-Id: I65e650f50040ab56d2237c14d5d8ee191349b93e
diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp
index 96b17e1..b017384 100644
--- a/libs/hwui/pipeline/skia/LayerDrawable.cpp
+++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp
@@ -33,6 +33,10 @@
     }
 }
 
+static inline SkScalar isIntegerAligned(SkScalar x) {
+    return fabsf(roundf(x) - x) <= NON_ZERO_EPSILON;
+}
+
 // Disable filtering when there is no scaling in screen coordinates and the corners have the same
 // fraction (for translate) or zero fraction (for any other rect-to-rect transform).
 static bool shouldFilterRect(const SkMatrix& matrix, const SkRect& srcRect, const SkRect& dstRect) {
@@ -62,10 +66,10 @@
     if (requiresIntegerTranslate) {
         // Device rect and source rect should be integer aligned to ensure there's no difference
         // in how nearest-neighbor sampling is resolved.
-        return !(MathUtils::isZero(SkScalarFraction(srcRect.x())) &&
-                 MathUtils::isZero(SkScalarFraction(srcRect.y())) &&
-                 MathUtils::isZero(SkScalarFraction(dstDevRect.x())) &&
-                 MathUtils::isZero(SkScalarFraction(dstDevRect.y())));
+        return !(isIntegerAligned(srcRect.x()) &&
+                 isIntegerAligned(srcRect.y()) &&
+                 isIntegerAligned(dstDevRect.x()) &&
+                 isIntegerAligned(dstDevRect.y()));
     } else {
         // As long as src and device rects are translated by the same fractional amount,
         // filtering won't be needed