aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ops
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2018-04-03 14:53:45 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-03 19:38:01 +0000
commit8b09b96266d053715c278c07756be819f25d025a (patch)
tree48ce4bdfd14f8e0c858ef77be6a99d9ee9231f67 /src/gpu/ops
parent63bd23a8b143ecafc8b43e89f79fc497871cf135 (diff)
Drop draw in GrAAConvextPathRenderer if calculation of center of mass ends up in NaN
Bug: skia:7770 Change-Id: If27494f5df0b5d5ba037e1d21c06bff98019d2b0 Reviewed-on: https://skia-review.googlesource.com/118300 Commit-Queue: Greg Daniel <egdaniel@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/ops')
-rw-r--r--src/gpu/ops/GrAAConvexPathRenderer.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index c238d102e4..8ca022263b 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -64,7 +64,7 @@ struct Segment {
typedef SkTArray<Segment, true> SegmentArray;
-static void center_of_mass(const SegmentArray& segments, SkPoint* c) {
+static bool center_of_mass(const SegmentArray& segments, SkPoint* c) {
SkScalar area = 0;
SkPoint center = {0, 0};
int count = segments.count();
@@ -111,15 +111,17 @@ static void center_of_mass(const SegmentArray& segments, SkPoint* c) {
// undo the translate of p0 to the origin.
*c = center + p0;
}
- SkASSERT(!SkScalarIsNaN(c->fX) && !SkScalarIsNaN(c->fY));
+ return !SkScalarIsNaN(c->fX) && !SkScalarIsNaN(c->fY);
}
-static void compute_vectors(SegmentArray* segments,
+static bool compute_vectors(SegmentArray* segments,
SkPoint* fanPt,
SkPathPriv::FirstDirection dir,
int* vCount,
int* iCount) {
- center_of_mass(*segments, fanPt);
+ if (!center_of_mass(*segments, fanPt)) {
+ return false;
+ }
int count = segments->count();
// Make the normals point towards the outside
@@ -167,6 +169,7 @@ static void compute_vectors(SegmentArray* segments,
*vCount += 4;
*iCount += 6;
}
+ return true;
}
struct DegenerateTestData {
@@ -325,8 +328,7 @@ static bool get_segments(const SkPath& path,
if (degenerateData.isDegenerate()) {
return false;
} else {
- compute_vectors(segments, fanPt, dir, vCount, iCount);
- return true;
+ return compute_vectors(segments, fanPt, dir, vCount, iCount);
}
default:
break;