[OpenJDK 2D-Dev] RFR: 8143177: Integrate harfbuzz opentype layout engine per JEP 258

Philip Race philip.race at oracle.com
Sun Nov 22 16:58:21 UTC 2015

On 11/22/15, 4:33 AM, Sergey Bylokhov wrote:
> On 18.11.15 18:09, Sergey Bylokhov wrote:
>> Hi, Phil.
>> Not an expert here, just a few notes:
>>   - Copyright is missing: hb-jdk-font.cc, hb-jdk.h

hmm. how did I miss that ? Fixed.
>>   - HBShaper.c: Do we need a code at 268? probably we can add some todo
>> or remove it?

I deleted the commented out code.
Uploaded http://cr.openjdk.java.net/~prr/8143177.3/
It is unchanged code-wise from the v2.


> same comments about 8143177.2, or it is intended?
>> On 18.11.15 3:05, Philip Race wrote:
>>> Webrev : http://cr.openjdk.java.net/~prr/8143177/
>>> Bug : https://bugs.openjdk.java.net/browse/JDK-8143177
>>> This webrev contains the changes accumulated in the harfbuzz project
>>> forest
>>> that migrate JDK from using ICU for opentype font layout to harfbuzz 
>>> for
>>> the same.
>>> The change does not introduce API. It is mostly adding the harfbuzz
>>> library.
>>> The ICU library remains there but is no longer the default.
>>> Eventually (not necessarily in 9) it may be removed once we are
>>> comfortable
>>> with harfbuzz.
>>> You may select ICU by using -Dsun.font.layoutengine=icu
>>> You may see which layout engine is in use by using
>>> -Dsun.font.layoutengine.verbose=true
>>> it will print either "Using harfbuzz", or "Using ICU".
>>> The change has no impact on typical Latin script rendering but is a big
>>> advance
>>> for complex scripts and also applies if you select kerning or ligatures
>>> for Latin.
>>> However the latter is only detectable if the font implements support 
>>> for
>>> these.
>>> By "big advance" I mean that ICU has not been updated to recognise
>>> recent opentype features.
>>> So harfbuzz should fix a number of things but unexpected changes that
>>> look wrong
>>> should be reported so we can investigate.
>>> To use harfbuzz we invoke its shaper and we provide a way to get jdk
>>> font information.
>>> This means that we do not need a different layer depending on whether
>>> freetype or t2k
>>> is used. It also enables some caching in the JDK font layer.
>>> On macosx harfbuzz does not natively read the AAT tables but will 
>>> invoke
>>> CoreText.
>>> This does mean that an AAT font installed on Linux would not be
>>> processed but
>>> this is not a significant issue since AAT fonts are not found other 
>>> than
>>> on macosx.
>>> The majority of the files in the webrev are harfbuzz itself, changed
>>> only to comply
>>> with JDK whitespace rules. Reviewers should probably concentrate on all
>>> of the rest.
>>> I've listed it so that all those files are at the beginning and you can
>>> ignore all those
>>> that follow that are in the "harfbuzz" directory.
>>> The harfbuzz version used here is 1.0.6 which is the latest source
>>> release (at the time of writing).
>>> We expect to update this to keep reasonably current.
>>> I would like to push this in on Friday, but at the very latest Monday
>>> because of the
>>> upcoming Feature Complete date so there are a couple of days to make
>>> small
>>> tweaks for serious problems but there will be plenty of time after
>>> integration to fix
>>> remaining problems.
>>> -phil.

More information about the 2d-dev mailing list