diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp
index 5331bb7..b4d12db 100644
--- a/src/core/SkGeometry.cpp
+++ b/src/core/SkGeometry.cpp
@@ -8,61 +8,6 @@
 #include "SkGeometry.h"
 #include "SkMatrix.h"
 
-bool SkXRayCrossesLine(const SkXRay& pt,
-                       const SkPoint pts[2],
-                       bool* ambiguous) {
-    if (ambiguous) {
-        *ambiguous = false;
-    }
-    // Determine quick discards.
-    // Consider query line going exactly through point 0 to not
-    // intersect, for symmetry with SkXRayCrossesMonotonicCubic.
-    if (pt.fY == pts[0].fY) {
-        if (ambiguous) {
-            *ambiguous = true;
-        }
-        return false;
-    }
-    if (pt.fY < pts[0].fY && pt.fY < pts[1].fY)
-        return false;
-    if (pt.fY > pts[0].fY && pt.fY > pts[1].fY)
-        return false;
-    if (pt.fX > pts[0].fX && pt.fX > pts[1].fX)
-        return false;
-    // Determine degenerate cases
-    if (SkScalarNearlyZero(pts[0].fY - pts[1].fY))
-        return false;
-    if (SkScalarNearlyZero(pts[0].fX - pts[1].fX)) {
-        // We've already determined the query point lies within the
-        // vertical range of the line segment.
-        if (pt.fX <= pts[0].fX) {
-            if (ambiguous) {
-                *ambiguous = (pt.fY == pts[1].fY);
-            }
-            return true;
-        }
-        return false;
-    }
-    // Ambiguity check
-    if (pt.fY == pts[1].fY) {
-        if (pt.fX <= pts[1].fX) {
-            if (ambiguous) {
-                *ambiguous = true;
-            }
-            return true;
-        }
-        return false;
-    }
-    // Full line segment evaluation
-    SkScalar delta_y = pts[1].fY - pts[0].fY;
-    SkScalar delta_x = pts[1].fX - pts[0].fX;
-    SkScalar slope = SkScalarDiv(delta_y, delta_x);
-    SkScalar b = pts[0].fY - SkScalarMul(slope, pts[0].fX);
-    // Solve for x coordinate at y = pt.fY
-    SkScalar x = SkScalarDiv(pt.fY - b, slope);
-    return pt.fX <= x;
-}
-
 /** If defined, this makes eval_quad and eval_cubic do more setup (sometimes
     involving integer multiplies by 2 or 3, but fewer calls to SkScalarMul.
     May also introduce overflow of fixed when we compute our setup.
@@ -949,130 +894,6 @@
     return count + 1;
 }
 
-bool SkXRayCrossesMonotonicCubic(const SkXRay& pt, const SkPoint cubic[4],
-                                 bool* ambiguous) {
-    if (ambiguous) {
-        *ambiguous = false;
-    }
-
-    // Find the minimum and maximum y of the extrema, which are the
-    // first and last points since this cubic is monotonic
-    SkScalar min_y = SkMinScalar(cubic[0].fY, cubic[3].fY);
-    SkScalar max_y = SkMaxScalar(cubic[0].fY, cubic[3].fY);
-
-    if (pt.fY == cubic[0].fY
-        || pt.fY < min_y
-        || pt.fY > max_y) {
-        // The query line definitely does not cross the curve
-        if (ambiguous) {
-            *ambiguous = (pt.fY == cubic[0].fY);
-        }
-        return false;
-    }
-
-    bool pt_at_extremum = (pt.fY == cubic[3].fY);
-
-    SkScalar min_x =
-        SkMinScalar(
-            SkMinScalar(
-                SkMinScalar(cubic[0].fX, cubic[1].fX),
-                cubic[2].fX),
-            cubic[3].fX);
-    if (pt.fX < min_x) {
-        // The query line definitely crosses the curve
-        if (ambiguous) {
-            *ambiguous = pt_at_extremum;
-        }
-        return true;
-    }
-
-    SkScalar max_x =
-        SkMaxScalar(
-            SkMaxScalar(
-                SkMaxScalar(cubic[0].fX, cubic[1].fX),
-                cubic[2].fX),
-            cubic[3].fX);
-    if (pt.fX > max_x) {
-        // The query line definitely does not cross the curve
-        return false;
-    }
-
-    // Do a binary search to find the parameter value which makes y as
-    // close as possible to the query point. See whether the query
-    // line's origin is to the left of the associated x coordinate.
-
-    // kMaxIter is chosen as the number of mantissa bits for a float,
-    // since there's no way we are going to get more precision by
-    // iterating more times than that.
-    const int kMaxIter = 23;
-    SkPoint eval;
-    int iter = 0;
-    SkScalar upper_t;
-    SkScalar lower_t;
-    // Need to invert direction of t parameter if cubic goes up
-    // instead of down
-    if (cubic[3].fY > cubic[0].fY) {
-        upper_t = SK_Scalar1;
-        lower_t = 0;
-    } else {
-        upper_t = 0;
-        lower_t = SK_Scalar1;
-    }
-    do {
-        SkScalar t = SkScalarAve(upper_t, lower_t);
-        SkEvalCubicAt(cubic, t, &eval, NULL, NULL);
-        if (pt.fY > eval.fY) {
-            lower_t = t;
-        } else {
-            upper_t = t;
-        }
-    } while (++iter < kMaxIter
-             && !SkScalarNearlyZero(eval.fY - pt.fY));
-    if (pt.fX <= eval.fX) {
-        if (ambiguous) {
-            *ambiguous = pt_at_extremum;
-        }
-        return true;
-    }
-    return false;
-}
-
-int SkNumXRayCrossingsForCubic(const SkXRay& pt,
-                               const SkPoint cubic[4],
-                               bool* ambiguous) {
-    int num_crossings = 0;
-    SkPoint monotonic_cubics[10];
-    int num_monotonic_cubics = SkChopCubicAtYExtrema(cubic, monotonic_cubics);
-    if (ambiguous) {
-        *ambiguous = false;
-    }
-    bool locally_ambiguous;
-    if (SkXRayCrossesMonotonicCubic(pt,
-                                    &monotonic_cubics[0],
-                                    &locally_ambiguous))
-        ++num_crossings;
-    if (ambiguous) {
-        *ambiguous |= locally_ambiguous;
-    }
-    if (num_monotonic_cubics > 0)
-        if (SkXRayCrossesMonotonicCubic(pt,
-                                        &monotonic_cubics[3],
-                                        &locally_ambiguous))
-            ++num_crossings;
-    if (ambiguous) {
-        *ambiguous |= locally_ambiguous;
-    }
-    if (num_monotonic_cubics > 1)
-        if (SkXRayCrossesMonotonicCubic(pt,
-                                        &monotonic_cubics[6],
-                                        &locally_ambiguous))
-            ++num_crossings;
-    if (ambiguous) {
-        *ambiguous |= locally_ambiguous;
-    }
-    return num_crossings;
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 
 /*  Find t value for quadratic [a, b, c] = d.
diff --git a/src/core/SkGeometry.h b/src/core/SkGeometry.h
index 0b23685..4da74f2 100644
--- a/src/core/SkGeometry.h
+++ b/src/core/SkGeometry.h
@@ -10,21 +10,6 @@
 
 #include "SkMatrix.h"
 
-/** An XRay is a half-line that runs from the specific point/origin to
-    +infinity in the X direction. e.g. XRay(3,5) is the half-line
-    (3,5)....(infinity, 5)
- */
-typedef SkPoint SkXRay;
-
-/** Given a line segment from pts[0] to pts[1], and an xray, return true if
-    they intersect. Optional outgoing "ambiguous" argument indicates
-    whether the answer is ambiguous because the query occurred exactly at
-    one of the endpoints' y coordinates, indicating that another query y
-    coordinate is preferred for robustness.
-*/
-bool SkXRayCrossesLine(const SkXRay& pt, const SkPoint pts[2],
-                       bool* ambiguous = NULL);
-
 /** Given a quadratic equation Ax^2 + Bx + C = 0, return 0, 1, 2 roots for the
     equation.
 */
@@ -159,36 +144,6 @@
 int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13],
                               SkScalar tValues[3] = NULL);
 
-/** Given a monotonic cubic bezier, determine whether an xray intersects the
-    cubic.
-    By definition the cubic is open at the starting point; in other
-    words, if pt.fY is equivalent to cubic[0].fY, and pt.fX is to the
-    left of the curve, the line is not considered to cross the curve,
-    but if it is equal to cubic[3].fY then it is considered to
-    cross.
-    Optional outgoing "ambiguous" argument indicates whether the answer is
-    ambiguous because the query occurred exactly at one of the endpoints' y
-    coordinates, indicating that another query y coordinate is preferred
-    for robustness.
- */
-bool SkXRayCrossesMonotonicCubic(const SkXRay& pt, const SkPoint cubic[4],
-                                 bool* ambiguous = NULL);
-
-/** Given an arbitrary cubic bezier, return the number of times an xray crosses
-    the cubic. Valid return values are [0..3]
-    By definition the cubic is open at the starting point; in other
-    words, if pt.fY is equivalent to cubic[0].fY, and pt.fX is to the
-    left of the curve, the line is not considered to cross the curve,
-    but if it is equal to cubic[3].fY then it is considered to
-    cross.
-    Optional outgoing "ambiguous" argument indicates whether the answer is
-    ambiguous because the query occurred exactly at one of the endpoints' y
-    coordinates or at a tangent point, indicating that another query y
-    coordinate is preferred for robustness.
- */
-int SkNumXRayCrossingsForCubic(const SkXRay& pt, const SkPoint cubic[4],
-                               bool* ambiguous = NULL);
-
 enum SkCubicType {
     kSerpentine_SkCubicType,
     kCusp_SkCubicType,
