}
#endif
-#ifdef SK_DEBUG
-// This is an example of why we need to pin the result computed in
-// sect_with_horizontal. If we didn't explicitly pin, is_between_unsorted would
-// fail.
-//
-static void sect_with_horizontal_test_for_pin_results() {
- const SkPoint pts[] = {
- { -540000, -720000 },
- { -9.10000017e-05f, 9.99999996e-13f }
- };
- float x = sect_with_horizontal(pts, 0);
- SkASSERT(is_between_unsorted(x, pts[0].fX, pts[1].fX));
-}
-#endif
-
int SkLineClipper::ClipLine(const SkPoint pts[], const SkRect& clip, SkPoint lines[],
bool canCullToTheRight) {
-
-#ifdef SK_DEBUG
- {
- static bool gOnce;
- if (!gOnce) {
- sect_with_horizontal_test_for_pin_results();
- gOnce = true;
- }
- }
-#endif
-
int index0, index1;
if (pts[0].fY < pts[1].fY) {
path->close();
}
+static void test_sect_with_horizontal_needs_pinning() {
+ // Test that sect_with_horizontal in SkLineClipper.cpp needs to pin after computing the
+ // intersection.
+ SkPath path;
+ path.reset();
+ path.moveTo(-540000, -720000);
+ path.lineTo(-9.10000017e-05f, 9.99999996e-13f);
+ path.lineTo(1, 1);
+
+ // Without the pinning code in sect_with_horizontal(), this would assert in the lineclipper
+ SkPaint paint;
+ SkSurface::MakeRasterN32Premul(10, 10)->getCanvas()->drawPath(path, paint);
+}
+
static void test_path_crbug364224() {
SkPath path;
SkPaint paint;
}
DEF_TEST(Paths, reporter) {
+ test_sect_with_horizontal_needs_pinning();
test_crbug_629455(reporter);
test_fuzz_crbug_627414(reporter);
test_path_crbug364224();