Make fuzz::next overloads more consistent

Some oss-fuzz bugs (like the linked one) would not reproduce
in Skia proper due to the fact that there were subtle overloads
of the various Fuzz::next() methods in FuzzCanvas.cpp that
were pulled in in Skia proper, but not oss-fuzz.

This puts all of them in to FuzzCommon.h and makes the
matrix and rrect ones opt-in (fuzz_matrix, fuzz_rrect).

Additionally, this renames fuzz.cpp -> FuzzMain.cpp so we
can properly include Fuzz.cpp in oss-fuzz without
having two mains.

Bug: oss-fuzz:10378
Change-Id: I6cf9afb471781b9fadb689482109a1e5662358b5
Reviewed-on: https://skia-review.googlesource.com/154900
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/fuzz/FuzzCommon.h b/fuzz/FuzzCommon.h
index 98fab25..11b7317 100644
--- a/fuzz/FuzzCommon.h
+++ b/fuzz/FuzzCommon.h
@@ -9,55 +9,21 @@
 #define FuzzCommon_DEFINED
 
 #include "Fuzz.h"
+#include "SkMatrix.h"
 #include "SkPath.h"
+#include "SkRRect.h"
 #include "SkRegion.h"
 
-// We don't always want to test NaNs and infinities.
-static inline void fuzz_nice_float(Fuzz* fuzz, float* f) {
-    float v;
-    fuzz->next(&v);
-    constexpr float kLimit = 1.0e35f;  // FLT_MAX?
-    *f = (v == v && v <= kLimit && v >= -kLimit) ? v : 0.0f;
-}
-
-template <typename... Args>
-inline void fuzz_nice_float(Fuzz* fuzz, float* f, Args... rest) {
-    fuzz_nice_float(fuzz, f);
-    fuzz_nice_float(fuzz, rest...);
-}
-
-template <typename T, typename Min, typename Max>
-inline void fuzz_enum_range(Fuzz* fuzz, T* value, Min rmin, Max rmax) {
-    using U = skstd::underlying_type_t<T>;
-    fuzz->nextRange((U*)value, (U)rmin, (U)rmax);
-}
-
-inline void fuzz_region(Fuzz* fuzz, SkRegion* region, int maxN) {
-    uint8_t N;
-    fuzz->nextRange(&N, 0, maxN);
-    for (uint8_t i = 0; i < N; ++i) {
-        SkIRect r;
-        SkRegion::Op op;
-        // Avoid the sentinal value used by Region.
-        fuzz->nextRange(&r.fLeft,   -2147483646, 2147483646);
-        fuzz->nextRange(&r.fTop,    -2147483646, 2147483646);
-        fuzz->nextRange(&r.fRight,  -2147483646, 2147483646);
-        fuzz->nextRange(&r.fBottom, -2147483646, 2147483646);
-        r.sort();
-        fuzz_enum_range(fuzz, &op, (SkRegion::Op)0, SkRegion::kLastOp);
-        if (!region->op(r, op)) {
-            return;
-        }
-    }
-}
-
-template <>
-inline void Fuzz::next(SkRegion* region) { fuzz_region(this, region, 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);
 
+void FuzzNiceRRect(Fuzz* fuzz, SkRRect* rr);
+
+void FuzzNiceMatrix(Fuzz* fuzz, SkMatrix* m);
+
+void FuzzNiceRegion(Fuzz* fuzz, SkRegion* region, int maxN);
+
 #endif