Question/discussion about JDK-8129582

Itai itaisha at
Wed Jan 4 17:48:36 UTC 2017

Thanks for replying.
I think I understand what you're saying about the cache. As for complexity
- I'm mostly working with text which is only in Hebrew, which isn't complex
as far as I understand the definition (no glyph "fusing" as in Arabic or
Farsi). I can work with minor performance drops, but when the same window
takes more than 10 times to show if it has Hebrew labels is a lot more than
minor - and this is exclusive to JavaFX, so it's not like this problem is

Perhaps the caching is indeed not the correct solution, but maybe there can
be a way to simplify the layout in non-complex BiDi cases? Or optimize

Thank you again for replying, I really hope this issue can see some

On Wed, Jan 4, 2017 at 7:26 PM, Philip Race <philip.race at> wrote:

> The cache is a heuristic optimisation and whether it helps depends on how
> well that cache is used.
> It is a time-space trade-off and I'd expect it to show up as helping more
> in micro-benchmarks or
> text-intensive benchmarks which use the same text broken in the same way.
> Complex text layout is inherently slower and if you are doing a lot of it
> .. it will be slow .. and
> unless it is repeated a cache won't help.
> During start-up I'd *expect* that there isn't a lot of re-use going on.
> You would need to profile how often  the same text (and attributes) are
> passed through this code.
> If you could provide us a test case we could examine it too.
> If it were a real use case, then we'd move on to examine the feasibility
> of caching ...
> -phil.
> On 1/4/17, 9:19 AM, Itai wrote:
>> Recently JDK-8129582 [1] started really affecting me, with startup speed
>> and overall responsiveness becoming really bad.
>> Digging into it, I have found most time is wasted in
>> com.sun.javafx.text.GlyphLayout.layout (as represented by
>> PangoGlyphLayout
>> on my Linux machine), which in turn is called
>> by com.sun.javafx.text.PrismTextLayout.shape, which has:
>>      if (run.isComplex()) {
>>              /* Use GlyphLayout to shape complex text */
>>              layout.layout(run, font, strike, chars);
>>      } else {
>>              ...
>>              if (layoutCache == null) {
>>               ...
>>               } else {
>>                ...
>>               }
>>      }
>> which to my very naive reading seems as if while non-complex (with all
>> BiDi
>> text considered complex) glyph runs are cached, complex runs are never
>> cached, which forces re-calculation every time.
>> I'm trying to read and understand this part better, but could it be
>> possible that this is the issue? How feasible would it be to have a layout
>> cache for complex runs, or at least non-complex BiDi runs?
>> Thanks,
>> Itai.
>> [1]:

More information about the openjfx-dev mailing list