Hi Jim, Would you have time to look at this 2nd webrev ?
Laurent Le 26 avr. 2017 11:32 PM, "Laurent Bourgès" <bourges.laur...@gmail.com> a écrit : > Hi Jim, > > Here is an updated webrev: > http://cr.openjdk.java.net/~lbourges/marlin/Marlin-075.1/ > > My comments below explaining changes: > > 2017-04-26 1:47 GMT+02:00 Jim Graham <james.gra...@oracle.com>: > >> Hi Laurent, >> >> - I found some fp constants with no "d" or "f" modifier. I sent a grep >> output in a separate email... >> > > I fixed all true matches except in comments. > > >> >> - Why does FloatMath.java copy the constants from sun.misc rather than >> refer to them? >> (An alternative is a static import or having local copies that copy by >> source-based reference (foo_bar = Foo.bar) rather than copying by >> human-cut-and-paste) >> > > This is needed by MarlinFX as sun.misc.FloatConsts is a class > inaccessible from javafx.graphics module. > I prefer copying these constants (source code) to make Marlin2D / > MarlinFX consistent and avoid exposing the FloatConsts class to modules. > > >> >> - Should FloatMath be renamed to FPMath or IEEEMath since it now also >> handles doubles? >> > > Agreed and I would prefer FPMath, but it can be done later (52 matches) > > >> >> - MarlinCache - What was the reason to eliminate the mean crossings >> calculations from the decision on whether or not to use RLE? >> > > I changed my mind as this calculation only disables 'RLE' and block > flag optimization early: it is just a shortcut to avoid testing the real > number of crossing per pixel row i.e. it only save few tests per row. To > compute the mean crossings, I had to accumulate the edge height so it costs > 1 add per edge that represents an overhead for lots of edges. Finally I > prefer having simplified a bit the code. > > >> >> - MarlinCache line 548 - why the simpler logic here? >> > > This is related to modified Renderer calls to copyAARow() to better > handle half-open intervals: > before: [maxX + 2] => now: [maxX + 1] > // +1 because alpha [pix_minX; pix_maxX[ > copyAARow(_alpha, lastY, minX, maxX + 1, useBlkFlags); > > >> >> - MarlinProperties, getLog2_XY - 0 to 4 is 1 to 16 subpixel locations in >> X or Y but you list the subpixel limits as 1 to 256. Also, it looks like >> the real limits are 0 to 8 which really does work out to 1 to 256. So, I >> think the "4" in the comment is incorrect and should be "8"? >> > > Fixed getSubPixel_Log2_X() > > >> >> - MarlinProperties - TileSize vs TileWidth. Is there a reason you >> haven't created a TileHeight property? I could see a couple of ways of >> going here: >> - TileSize means height and TileWidth is new which is just odd naming >> In this case, I'd make the default for TileWidth be the value for >> TileSize >> otherwise setting tilesize used to set both W&H, but now it only >> sets H? >> - TileSize is legacy and new values are TileWidth and TileHeight >> Both default to TileSize if not specified >> In either case, I would think that TileWidth should default to TileSize? >> > > Fixed, I adopted the first solution and getTileWidth_Log2() uses > getTileSize_Log2() to get the default value (W=H) > > >> >> - MarlinProperties - Inc/Dec - constants don't end with d or f. >> > > Fixed. > > >> >> - MarlinProperties - getFloat() takes doubles for def/min/max? >> > > Fixed. > > >> >> - MarlinTileGenerator - lines 67,69 - null is the default value for fields >> > > I prefer to be explicit (netbeans reports a warning): left unchanged. > > >> >> - MarlinTileGenerator,MarlinRenderer - all of the methods called on rdrF >> and rdrD have the same signature. Why not have MarlinRenderer include >> those methods and then you just need to store a single MarlinRenderer field >> and be able to manipulate either type...? >> > > I agree. I tried but benchamrks proved that interface calls method > were slower than monomorphic calls so I adopted this bimorphic call > optimization where only 1 type is really used at runtime. > > >> >> - MarlinTileGenerator.TH_AA_ALPHA_00/FF - seem misnamed, really they are >> low and high thresholds for filling. Maybe LO and HI? >> > > Renamed as TH_AA_ALPHA_FILL_EMPTY & TH_AA_ALPHA_FILL_FULL > > >> >> - MarlinTileGenerator, line 416,443,508 - Isn't that "skip" instead of >> "fill"? >> > > Fixed. > > >> >> - MarlinTileGenerator, line 420,554,687 - Isn't cx >= aax0? And isn't x1 >> >= aax0? ??? >> > > Fixed comment: > // now: cx >= x0 and cx >= aax0 > > >> >> - MarlinTileGenerator, line 491 - spacing on byte cast >> > > Fixed. > > >> >> - MarlinTilegenerator, line 655 - "Clear" or "Fill"? >> > > Fixed. > > >> >> - Renderer, line 85,114 - maybe add a line saying that is the result of >> <name> test? Did we put that test into the repo anywhere? >> > > Added comment: 'TestNonAARasterization: cubics/quads' (not in repo, > only in JBS) > > >> >> - Renderer, line 1318,1365 - that was fallout from the half-open stuff at >> 1391, right? >> > > Exactly, I fixed handling half-open intervals in MarlinFX so it is a > backport. > > >> >> - Stroker, line 112 - "* 8"? Or perhaps "* 6 + 2" since the endpoints >> are shared? >> > > Yes endpoints are shared so I fixed the capacity > > >> >> - Stroker, line 347,376 - it appears to still use m[off],m[off+1] instead >> of 0,1...? >> > > Fixed comments. > > >> >> - Stroker, line 377 - safecomputeMiter -> safeComputeMiter? Also, this >> looks to be some sort of "compute something for an offset for quads" >> method, at least in the way it is used, even if it does look similar to the >> computeMiter method. >> > > Renamed the method; it was backported from openpisces (so I did not > really study the approach) > > >> >> - Stroker, line 841 - "winden" => "widen" >> > > Fixed. > > >> >> - Stroker, lines 839,847,856,866 - there is no p4 >> > > Already mentioned: see https://bugs.openjdk.java.net/ > browse/JDK-8170029 > To be fixed later > > >> >> I'm assuming that the D*.java files were all generated from the regular >> files using a sed script? I skipped those (for now)... >> > > I also fixed D* files. > > Laurent > > >> On 4/22/17 4:28 AM, Laurent Bourgès wrote: >> >>> Hi, >>> >>> I am pleased to have successfully upgraded my machine with OpenJDK10 and >>> merged my Marlin 0.7.5 release (dec 2016) with >>> its Java2d variant. >>> >>> Please review this Marlin2D upgrade to Marlin 0.7.5: >>> >>> JBS: no bug yet for OpenJDK 10 >>> webrev: http://cr.openjdk.java.net/~lbourges/marlin/Marlin-075.0/ >>> >>> Changes: >>> - Improved MarlinTileGenerator to efficiently handle asymetric tiles (W >>> x H) with almost full / empty fills >>> - Added Marlin Double-precision pipeline >>> - MarlinFX backports (Dasher, Stroker changes from OpenPisces) >>> - dead code & few comment removals in Strokers >>> - fixed all floating-point number literals to be x.0f or x.0d to >>> simplify the conversion between float & double variants >>> >>> As this patch is huge, do you want me to provide webrevs against Float >>> vs Double pipelines or against OpenJFX10 ? >>> >>> PS: I forgot to upgrade the copyright headers to 2017, but will do later >>> >>> Cheers, >>> Laurent >>> >> > > > -- > -- > Laurent Bourgès >