| /* | |
| * Copyright 2021 Google, LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "fuzz/Fuzz.h" | |
| #include "fuzz/FuzzCommon.h" | |
| #include "include/core/SkPath.h" | |
| #include "src/gpu/ganesh/GrEagerVertexAllocator.h" | |
| #include "src/gpu/ganesh/geometry/GrPathUtils.h" | |
| #include "src/gpu/ganesh/geometry/GrTriangulator.h" | |
| DEF_FUZZ(Triangulation, fuzz) { | |
| #if !defined(SK_ENABLE_OPTIMIZE_SIZE) | |
| SkPath path = FuzzEvilPath(fuzz, SkPath::Verb::kDone_Verb); | |
| SkScalar tol = GrPathUtils::scaleToleranceToSrc(GrPathUtils::kDefaultTolerance, | |
| SkMatrix::I(), path.getBounds()); | |
| // TODO(robertphillips): messing w/ the clipBounds might be another axis to fuzz. | |
| // afaict it only affects inverse filled paths. | |
| SkRect clipBounds = path.getBounds(); | |
| GrCpuVertexAllocator allocator; | |
| bool isLinear; | |
| int count = GrTriangulator::PathToTriangles(path, tol, clipBounds, &allocator, &isLinear); | |
| if (count > 0) { | |
| allocator.detachVertexData(); // normally handled by the triangulating path renderer. | |
| } | |
| #endif // SK_ENABLE_OPTIMIZE_SIZE | |
| } |