DescriptionEnabling clip stack flattening exercises path ops.
Iterating through the 903K skps that represent the
imagable 1M top web pages triggers a number of
bugs, some of which are addressed here.
Some web pages trigger intersecting cubic
representations of arc with their conic
counterparts. This exposed a flaw in coincident
detection that caused an infinite loop. The loop
alternatively extended the coincident section and,
determining the that the bounds of the curve pairs
did not overlap, deleted the extension.
Track the number of times the coincident detection
is called, and if it exceeds an empirically found
limit, assume that the curves are coincident and
force it to be so.
The loop count limit can be determined by enabling
DEBUG_T_SECT_LOOP_COUNT and running all tests. The
largest count is reported on completion.
Another class of bugs was caused by concident
detection duplicating nearly identical points that
had been merged earlier. To track these bugs, the
'handle coincidence' code was duplicated as a
const debug variety that reported if one of a
dozen or so irregularities are present; then it is
easier to see when a block of code that fixes one
irregularity regresses another.
Creating the debug const code version exposed some
non-debug code that could be const, and some that
was experimental and could be removed. Set
DEBUG_COINCIDENCE to track coincidence health and
handling.
For running on Chrome, DEBUG_VERIFY checks the
result of pathops against the same operation
using SkRegion to verify that the results are
nearly the same.
When visualizing the pathops work using
tools/pathops_visualizer.htm, set
DEBUG_DUMP_ALIGNMENT to see the curves after
they've been aligned for coincidence.
Other bugs fixed include detecting when a
section of a pair of curves have devolved into
lines and are coincident.
TBR=reed@google.com
Committed: https://skia.googlesource.com/skia/+/26ad22ab61539e3d3b6bc5e0da8dcebbd52a53de
Patch Set 1 #Patch Set 2 : wip; coin debug report #Patch Set 3 : wip; add more coincident health validation / debugging #Patch Set 4 : wip; validation works on op tests #Patch Set 5 : wip; remove allowcoinnear #Patch Set 6 : wip; skp mybuilder bug isolation #Patch Set 7 : wip; coin skp fixed #Patch Set 8 : wip; partial coin fix #Patch Set 9 : wip; adding worst loop stats #Patch Set 10 : wip; adding worst loop stats part 2 #Patch Set 11 : wip; coincident force #Patch Set 12 : fix various skp-found bugs #Patch Set 13 : fix skia_test verbose finalize code #Patch Set 14 : add new test file #Patch Set 15 : cast array size to int #Patch Set 16 : init to avoid warning #
Messages
Total messages: 16 (8 generated)
|