JDK-8131760 : JEP 265: Marlin Graphics Renderer
  • Type: JEP
  • Component: client-libs
  • Sub-Component: 2d
  • Priority: P2
  • Status: Closed
  • Resolution: Delivered
  • Fix Versions: 9
  • Submitted: 2015-07-17
  • Updated: 2017-02-27
  • Resolved: 2016-02-12
Related Reports
Blocks :  
Relates :  
Relates :  
Relates :  
Sub Tasks
JDK-8138959 :  
Description
Summary
-------

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.


Motivation
----------

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.


Description
-----------

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](http://openjdk.java.net/projects/graphics-rasterizer/)
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.


Testing
-------

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](http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/a7f731125b7f/src/demo/share/java2d/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.

Comments
Completed from SQE perspective [GREEN]
15-12-2015

As of the integration of the Marlin Renderer in JDK9 b96, Marlin is performing on par with or better than Ductus in single threaded benchmarks and much better than Ductus in multi-threaded benchmarks. It also outperforms Pisces in all cases. The quality is also on par or better than Ductus in some quality tests. As a result, the Marlin renderer was enabled as the default AA renderer for both the open source and Oracle specific builds as of b96.
10-12-2015

See JDK-8143849 - Integrate Marlin renderer per JEP 265 (client-libs) http://hg.openjdk.java.net/jdk9/client/jdk/rev/314ce60cae98
24-11-2015