JEP 265: Marlin Graphics Renderer

OwnerLaurent Bourgès
StatusClosed / Delivered
Componentclient-libs / 2d
Discussiongraphics dash rasterizer dash dev at openjdk dot java dot net
Reviewed byJim Graham, Philip Race, Victor Dyakov
Endorsed byKevin Rushforth
Created2015/07/17 12:30
Updated2017/02/27 20:29


Update Java 2D to use the Marlin Renderer as the default graphics rasterizer.

Success Metrics

The Marlin Renderer must consistently perform at least as well as Pisces, the current graphics rasterizer, with equal or better quality and accuracy. It must significantly outperform Pisces on most benchmarks. It should demonstrate multi-threaded scalability that outperforms Pisces. The development version is already meeting these goals. Additional goals are to equal or outperform the closed-source Ductus rasterizer on single-threaded performance, and match it in quality and accuracy. Marlin already has demonstrated better scalability for the MT case than Ductus.


The JDK currently uses a graphics rasterizer called Pisces. It is used for anti-aliased rendering (other than fonts), and so its performance is crucial for many graphics intensive applications, yet its performance is much poorer than that of the closed-source Ductus rasterizer shipped by Oracle. As a result, Marlin is already being used by some applications as a replacement for Pisces, by placing it on the bootstrap class path. A higher-performing rasterizer is therefore important for adoption.


The graphics rasterizer is an implementation library used by Java 2D. It implements an internal interface for communicating with the AWT and Java 2D subsystems, but does not have any externally visible API for Java developers. Marlin is all Java code (thus far) and is a fork of the Pisces rasterizer. Although it was separately hosted for a long time it is now being developed through the continuation of the OpenJDK graphics-rasterizer project which was originally focused on Pisces. Marlin is already largely complete and has been field tested as well as having passed Oracle's internal testing. It will be incrementally further developed and then integrated into the JDK as a replacement for Pisces and, at Oracle's option, perhaps Ductus as well.


This does not require any new test development, since there is no API. However we anticipate developing additional test scenarios for the existing J2DBench or other test suites to examine MT performance if we identify gaps there. Test execution will be the existing functional and compliance tests as well as existing performance tests such as J2DBench The current version of Marlin has already passed all functional, regression, and compliance (JCK) tests in JDK 9, run by courtesy of the Oracle SQE group.