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>
This commit is contained in:
Greg Daniel 2018-04-03 14:53:45 -04:00 committed by Skia Commit-Bot
parent 63bd23a8b1
commit 8b09b96266

View File

@ -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;