You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@xmlgraphics.apache.org by Thangalin <th...@gmail.com> on 2020/09/14 21:13:24 UTC

Batik Performance Optimizations

Hey list,

JFreeSVG uses DecimalFormat to convert double values to strings. Ryū
is a fast double-to-string conversion algorithm that has a simple
drop-in replacement. The performance gains were substantial.

Batik also uses DecimalFormat for the exact same reason and thus would
also benefit significantly from an upgrade. Specifically:

https://github.com/apache/xmlgraphics-batik/blob/trunk/batik-svggen/src/main/java/org/apache/batik/svggen/SVGGeneratorContext.java#L426

Using Java's formatter:

--- 3089912936 ns (10.04%), 309 samples
  [ 0] jdk.internal.math.FloatingDecimal$BinaryToASCIIBuffer.dtoa
  [ 1] jdk.internal.math.FloatingDecimal.getBinaryToASCIIConverter
  [ 2] jdk.internal.math.FloatingDecimal.getBinaryToASCIIConverter
  [ 3] java.text.DigitList.set
  [ 4] java.text.DecimalFormat.doubleSubformat
  [ 5] java.text.DecimalFormat.format
  [ 6] java.text.DecimalFormat.format
  [ 7] java.text.NumberFormat.format
  [ 8] org.jfree.svg.SVGGraphics2D.geomDP

Using Ryū more than doubles throughput:

--- 7429730977 ns (23.92%), 743 samples
  [ 0] org.jfree.svg.util.RyuDouble.doubleToString
  [ 1] org.jfree.svg.SVGGraphics2D.geomDP

A Java implementation is available online:

https://github.com/ulfjack/ryu/blob/master/src/main/java/info/adams/ryu/RyuDouble.java

Attached is a variation that allows control over precision.

Generating these strings is performed everywhere throughout the svggen
code, so tweaking this part of the code base should see significant
gains.

Cheers everybody!

Re: Batik Performance Optimizations

Posted by Chris Bowditch <bo...@hotmail.com>.
Thanks for the suggestion

On 14/09/2020 22:13, Thangalin wrote:
> Hey list,
>
> JFreeSVG uses DecimalFormat to convert double values to strings. Ryū
> is a fast double-to-string conversion algorithm that has a simple
> drop-in replacement. The performance gains were substantial.
>
> Batik also uses DecimalFormat for the exact same reason and thus would
> also benefit significantly from an upgrade. Specifically:
>
> https://github.com/apache/xmlgraphics-batik/blob/trunk/batik-svggen/src/main/java/org/apache/batik/svggen/SVGGeneratorContext.java#L426
>
> Using Java's formatter:
>
> --- 3089912936 ns (10.04%), 309 samples
>    [ 0] jdk.internal.math.FloatingDecimal$BinaryToASCIIBuffer.dtoa
>    [ 1] jdk.internal.math.FloatingDecimal.getBinaryToASCIIConverter
>    [ 2] jdk.internal.math.FloatingDecimal.getBinaryToASCIIConverter
>    [ 3] java.text.DigitList.set
>    [ 4] java.text.DecimalFormat.doubleSubformat
>    [ 5] java.text.DecimalFormat.format
>    [ 6] java.text.DecimalFormat.format
>    [ 7] java.text.NumberFormat.format
>    [ 8] org.jfree.svg.SVGGraphics2D.geomDP
>
> Using Ryū more than doubles throughput:
>
> --- 7429730977 ns (23.92%), 743 samples
>    [ 0] org.jfree.svg.util.RyuDouble.doubleToString
>    [ 1] org.jfree.svg.SVGGraphics2D.geomDP
>
> A Java implementation is available online:
>
> https://github.com/ulfjack/ryu/blob/master/src/main/java/info/adams/ryu/RyuDouble.java
>
> Attached is a variation that allows control over precision.
>
> Generating these strings is performed everywhere throughout the svggen
> code, so tweaking this part of the code base should see significant
> gains.
>
> Cheers everybody!
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: general-unsubscribe@xmlgraphics.apache.org
> For additional commands, e-mail: general-help@xmlgraphics.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: general-help@xmlgraphics.apache.org