[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: Re: [OpenJDK 2D-Dev] RFR: 8189809: Large performance regression in Swing text layout.
From: Prahalad Kumar Narayanan <prahalad.kumar.narayanan () oracle ! com>
Date: 2017-12-11 13:10:48
Message-ID: 332230c2-15b6-4101-b078-74c1ea906e3f () default
[Download RAW message or body]
Hello Phil
The change looks good to me.
I found two interesting changes in your webrev.
. The move to use FontDesignMetrics to compute width should be better than generating \
GlyphVector for the same.
. Besides, the double conversion from chars[] to String and vice versa has been \
avoided as well.
Thank you
Have a good day
Prahalad
-----Original Message-----
From: Phil Race
Sent: Friday, December 08, 2017 2:24 AM
To: 2d-dev; swing-dev@openjdk.java.net
Subject: [OpenJDK 2D-Dev] RFR: 8189809: Large performance regression in Swing text \
layout.
Bug: https://bugs.openjdk.java.net/browse/JDK-8189809
webrev: http://cr.openjdk.java.net/~prr/8189809/
This partially addresses a slow-down in Swing.
Swing now usually calls Font.getStringBounds() instead of FontMetrics().stringWidth \
for text measurement.
The latter has a fast-path for latin-only simple text.
The former does not .. and at a minimum uses GlyphVector.
This fix provides a similar fast path and for direct calls to these methods (micro \
benchmarks) that is latin text they are now very similar .. at least for typical \
strings.
In this fix as well as making this change in the font code, I updated Swing to more \
be a little more efficient.
Before this fix I always saw Swing coming in with a char[] .. then constructing a \
String from it. Then it passes it to the font measurement code, which then decomposes \
the string back into a char[] If Swing directly uses the API that takes a char[] then \
we save some overhead.
It does not get back all of the loss by Swing since
1) Swing has other overhead elsewhere - it seems
2) Swing is making 90% of these calls for a single char.
This could be from where Swing naively tries to add up char advances itself to get a \
string advance.
We may have to come back to that later. Perhaps with new public API.
-phil.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic