<div dir="ltr"><div><div><div><div><div><div>Hello,<br><br></div>I was going to propose a related change a bit later, but thought it makes sense to let you know now, as you're working on a similar thing.<br><br></div>In our OpenJDK-based runtime, we've optimized HarfBuzz invocations, by creating hb_face_t object only once per Font2D instance. <br>This can make layout 2-3 times faster (more prominent for fonts with a lot of layout rules, e.g. Fira Code).<br></div>We have this working in production for about a year now, without issues.<br><br></div>I've created a corresponding webrev here <br>  <a href="http://cr.openjdk.java.net/~dbatrak/hb-optimization/webrev.00/">http://cr.openjdk.java.net/~dbatrak/hb-optimization/webrev.00/</a><br></div>It's generated 'as is', it should probably be reworked, if it's going to be included in OpenJDK. In particular, caching of hb_face_t objects<br></div>should probably be encapsulated in SunLayoutEngine, and not done in Font2D object directly.<br><br><div><div><div><div><div><div><div>I'm ready to work on the change further, following the formal procedure (raising the ticket, submitting RFRs, etc). So, please let me know<br></div><div>if you're interested, and whether you have any comments or suggestions. In any case, I'll require someone sponsoring this change,<br></div><div>as I don't have a Committer status.<br><br></div><div>Best regards,<br></div><div>Dmitry Batrak<br></div><div><br></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 17, 2017 at 12:07 AM, Phil Race <span dir="ltr"><<a href="mailto:philip.race@oracle.com" target="_blank">philip.race@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Bug: <a href="https://bugs.openjdk.java.net/browse/JDK-8186317" rel="noreferrer" target="_blank">https://bugs.openjdk.java.net/<wbr>browse/JDK-8186317</a><br>
Webrev: <a href="http://cr.openjdk.java.net/~prr/8186317/" rel="noreferrer" target="_blank">http://cr.openjdk.java.net/~pr<wbr>r/8186317/</a><br>
<br>
In the ICU code path, we cache the layout tables in native memory so that<br>
when requested by ICU we can just hand the pointer, saving the overhead<br>
of copying the Java array for every call to layout.<br>
<br>
We weren't doing this for harfbuzz and this webrev fixes that.<br>
<br>
I noticed harfbuzz always retrieves the 'head' table so I decided to add that to the list of<br>
cached tables.<br>
<br>
The overall result is something like 25-30% performance gain.<span class="HOEnZb"><font color="#888888"><br>
<br>
-phil.<br>
</font></span></blockquote></div><br></div></div>