Hi Laurent,

Thanks for sending this out! One helpful suggestion for generating the webrev would be to generate diffs against the previous renderer (for those files that are largely carried over). To do that, you need to supply a filename full of "filenames to diff", where there is a notation for "this file, which appears to be new, is actually moved from (or based on) this other file over there", as in:

% cat webrev.files
blah/blah/difffile1
blah/blah/difffile2
blah/blah/diffnewfile3 oldblah/oldblah/oldfile3
blah/blah/diffnewfile4 oldblah/oldblah/oldfile4
% webrev.ksh <options> webrev.files

This will generate a similar webrev as before, but when it comes to diffnewfile3 and diffnewfile4 it will use the indicated "oldfile" paths as the previous version to diff against. For example:

src/java.desktop/share/classes/sun/java2d/marlin/Stroker.java src/java.desktop/share/classes/sun/java2d/pisces/Stroker.java

And, while I'm suggesting creating a new webrev I might also point out that all of your copyrights are still 2014. You should probably add/substitute 2015 (depending on the history of the file)...

                        ...jim

On 3/12/15 3:19 PM, Laurent Bourgès wrote:
Dear Andrea, Clemens, Dalibor, Jim & Phil,


As discussed recently, I am glad to contribute the Marlin renderer to
the OpenJDK project as a new standalone Java2D rasterizer.


This work is derived from OpenJDK's pisces rasterizer started since
march 2013 (OpenJDK 8) and evolved a lot to become more and more
efficient into my github repository:
https://github.com/bourgesl/marlin-renderer


I am the principal author of the code (OpenJDK's license = GPL2+CP) and
got help from Andréa Aimée.

Andrea Aimé contributed to on some marlin parts (CollinearSimpifier,
optional) and provided the initial MapBench tool, a generic java2d
benchmark based on serialized java2d command batches:
https://github.com/bourgesl/mapbench

This tool helped me a lot to run tons of benchmarks comparing
rasterizers on several GIS Map workloads, but also to test rendering
regressions...

Andréa, could you confirm you want to contribute your marlin code to the
the OpenJDK project too and have signed an OCA ?


I made some code cleanup (line length ~ 80) but tried to keep it as
close as the latest and fastest Marlin release 0.5.6 (yesterday) using
sun.misc.Unsafe.


I tested it with a full jdk9 build using the MapBench tool: it is
working well except a bit slower than jdk8 (few percents). Maybe hotspot
/ JIT changed a lot !

openjdk version "1.9.0-internal"
OpenJDK Runtime Environment (build
1.9.0-internal-bourgesl_2015_02_24_22_39-b00)
OpenJDK 64-Bit Server VM (build
1.9.0-internal-bourgesl_2015_02_24_22_39-b00, mixed mode)


To use it, just add the following argument:
java -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine ...


If marlin is working, your should see the following lines in the
standard output:
INFO:
===============================================================================
INFO: Marlin software rasterizer           = ENABLED
INFO: Version                              = [marlin-0.5.6-Unsafe-OpenJDK]
INFO: sun.java2d.renderer                  =
sun.java2d.marlin.MarlinRenderingEngine
INFO: sun.java2d.renderer.useThreadLocal   = true
INFO: sun.java2d.renderer.useRef           = soft
INFO: sun.java2d.renderer.pixelsize        = 2048
INFO: sun.java2d.renderer.subPixel_log2_X  = 3
INFO: sun.java2d.renderer.subPixel_log2_Y  = 3
INFO: sun.java2d.renderer.tileSize_log2    = 5
INFO: sun.java2d.renderer.useFastMath      = true
INFO: sun.java2d.renderer.useSimplifier    = false
INFO: sun.java2d.renderer.doStats          = false
INFO: sun.java2d.renderer.doMonitors       = false
INFO: sun.java2d.renderer.doChecks         = false
INFO: sun.java2d.renderer.useJul           = false
INFO: sun.java2d.renderer.logCreateContext = false
INFO: sun.java2d.renderer.logUnsafeMalloc  = false
INFO:
===============================================================================
INFO: AAShapePipe: overriding JDK implementation: marlin-renderer TILE
patch enabled.

As you can see, Marlin has many tuning parameters but also debugging
flags: see https://github.com/bourgesl/marlin-renderer/wiki/Tuning-options


Here is the initial webrev:
http://cr.openjdk.java.net/~lbourges/marlin/marlin.0/

note: I included the AAShapePipe tile patch but it can be another one.


Thanks for your review & testing this patch,


PS: I plan to publish soon an up-to-date complete benchmark report
comparing ductus, pisces & marlin (JDK8) and also several marlin
settings (ThreadLocal vs ConcurrentLinkedQueue storage, with / without
AAShapePipe tile patch ...)


Laurent

--
Laurent Bourgès

Reply via email to