[OpenJDK Rasterizer] Marlin renderer contribution for review

Jim Graham james.graham at oracle.com
Thu Mar 12 22:37:26 UTC 2015


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


More information about the graphics-rasterizer-dev mailing list