pathmeasure fuzzer

R=kjlubick@google.com, reed@google.com
Bug: skia:
Change-Id: I16a8b09312e5d1d1783bd6a4b791636ad8f63889
Reviewed-on: https://skia-review.googlesource.com/113165
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Cary Clark <caryclark@skia.org>
diff --git a/fuzz/FuzzCommon.h b/fuzz/FuzzCommon.h
index c908606..bea5a30 100644
--- a/fuzz/FuzzCommon.h
+++ b/fuzz/FuzzCommon.h
@@ -5,12 +5,15 @@
  * found in the LICENSE file.
  */
 
+#ifndef FuzzCommon_DEFINED
+#define FuzzCommon_DEFINED
+
 #include "Fuzz.h"
 #include "SkPath.h"
 #include "SkRegion.h"
 
 // We don't always want to test NaNs and infinities.
-static void fuzz_nice_float(Fuzz* fuzz, float* f) {
+static inline void fuzz_nice_float(Fuzz* fuzz, float* f) {
     float v;
     fuzz->next(&v);
     constexpr float kLimit = 1.0e35f;  // FLT_MAX?
@@ -23,54 +26,6 @@
     fuzz_nice_float(fuzz, rest...);
 }
 
-static void fuzz_path(Fuzz* fuzz, SkPath* path, int maxOps) {
-    if (maxOps < 2) {
-        maxOps = 2;
-    }
-    uint8_t fillType;
-    fuzz->nextRange(&fillType, 0, (uint8_t)SkPath::kInverseEvenOdd_FillType);
-    path->setFillType((SkPath::FillType)fillType);
-    uint8_t numOps;
-    fuzz->nextRange(&numOps, 2, maxOps);
-    for (uint8_t i = 0; i < numOps; ++i) {
-        uint8_t op;
-        fuzz->nextRange(&op, 0, 6);
-        SkScalar a, b, c, d, e, f;
-        switch (op) {
-            case 0:
-                fuzz_nice_float(fuzz, &a, &b);
-                path->moveTo(a, b);
-                break;
-            case 1:
-                fuzz_nice_float(fuzz, &a, &b);
-                path->lineTo(a, b);
-                break;
-            case 2:
-                fuzz_nice_float(fuzz, &a, &b, &c, &d);
-                path->quadTo(a, b, c, d);
-                break;
-            case 3:
-                fuzz_nice_float(fuzz, &a, &b, &c, &d, &e);
-                path->conicTo(a, b, c, d, e);
-                break;
-            case 4:
-                fuzz_nice_float(fuzz, &a, &b, &c, &d, &e, &f);
-                path->cubicTo(a, b, c, d, e, f);
-                break;
-            case 5:
-                fuzz_nice_float(fuzz, &a, &b, &c, &d, &e);
-                path->arcTo(a, b, c, d, e);
-                break;
-            case 6:
-                path->close();
-                break;
-            default:
-                SkASSERT(false);
-                break;
-        }
-    }
-}
-
 template <>
 inline void Fuzz::next(SkRegion* region) {
     uint8_t N;
@@ -86,3 +41,10 @@
         }
     }
 }
+
+// allows some float values for path points
+void FuzzPath(Fuzz* fuzz, SkPath* path, int maxOps);
+// allows all float values for path points
+void BuildPath(Fuzz* fuzz, SkPath* path, int last_verb);
+
+#endif