Hi Jim, Here is the new webrev: http://cr.openjdk.java.net/~lbourges/marlin/marlin-s4.2/
I added the OffHeapArray class used by Renderer and now by MarlinCache to store rowAAChunk data. Moreover I performed other small optimizations (heuristics, Renderer.addLine() split in 2 methods) and many benchmarks to tune the new approach. Could you review that patch, please ? Here are my last results: Test Threads Ops Med Pct95 Avg StdDev Min Max TotalOps *CircleTests.ser * *1* *172* *61.064* *61.311* *61.079* *0.131* *60.823* *61.67* *172* *EllipseTests-fill-false.ser * *1* *37* *278.548* *278.757* *278.557* *0.112* *278.362* *278.868* *37* *EllipseTests-fill-true.ser * *1* *25* *436.323* *436.866* *436.403* *0.27* *436.026* *437.318* *25* dc_boulder_2013-13-30-06-13-17.ser 1 114 91.316 91.75 91.355 0.279 90.803 92.505 114 dc_boulder_2013-13-30-06-13-20.ser 1 219 47.84 48.182 47.854 0.175 47.498 48.783 219 dc_shp_alllayers_2013-00-30-07-00-43.ser 1 265 39.432 39.61 39.433 0.108 39.21 40.052 265 dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 769.704 771.488 769.849 1.096 767.903 772.967 25 dc_spearfish_2013-11-30-06-11-15.ser 1 820 12.766 13.028 12.798 0.128 12.583 13.232 820 dc_spearfish_2013-11-30-06-11-19.ser 1 1637 6.413 6.613 6.438 0.067 6.375 6.777 1637 dc_topp:states_2013-11-30-06-11-06.ser 1 869 12.059 12.13 12.063 0.038 11.983 12.26 869 dc_topp:states_2013-11-30-06-11-07.ser 1 1421 7.391 7.453 7.392 0.023 7.329 7.52 1421 test_z_625k.ser 1 68 152.821 153.589 152.862 0.358 152.135 153.775 68 These are great results! And they are much easier to read with the tables > (which seem to get lost in my reply, oops!). > Thanks. > If it is just the dashing results I can believe that as Ductus does a > pretty good job of minimizing the number of segments in its stroked output > paths. The losses are pretty small in that case so we are getting pretty > close to being able to deprecate Ductus at some point which would be > awesome (still a bit of reliability testing "in the wild" before we can > actually switch full time, though)... > As I mentioned few month ago, the Stroker can be improved to reduce the number of generated segments related to caps & miter joins ie ignore collinear edges. Moreover, it can be notably worth for dashed polygons (many caps) or very complex polylines (many joins). Thanks for your time, Laurent