Re: [HarfBuzz] Using FreeType load flags

2015-08-28 Thread Nikolay Sivov

On 28.08.2015 14:41, Jamie Dale wrote:




We don't handle any load_flags.  That definitely has API implications. :(

FreeType works in 26.6 mode.  Clients can decide to use that mode, and 
everything
would work fine.  However, we also abuse this API for performing in font-space,
but don't pass the correct flags to FreeType.  We just abuse the no-hinting
mode for that, such that no rounding etc happens.  As such, we don't set ppem, 
and
pass NO_HINTING around.  This seems to work best, until we go ahead and add a 
full load_flags API.



I was wondering what, if any, issues you might expect to see if I
change the load flags to include hinting methods, and also whether you
had any suggestions for how to work around those issues (ideally
without having to change HarfBuzz itself - we like to keep our third
party dependencies vanilla where possible as it makes them easier to
upgrade in the future).


That's a good question and I'm interested in answer too. My other 
concern is bold/oblique simulations. Now in our project we force 
NO_BITMAP every time we have simulations, so we can apply oblique 
transform or make outline heavier (or both). In that case bitmap metrics 
are obviously ignored and we also have to fix up advances and extents a 
little to account for increased glyph weight. I don't see an obvious way 
to fix that, maybe such faces are considered worthless from shaping 
point of view, I don't know.


The fact that harfbuzz doesn't call anything to set font ppem I can see 
as a feature, because (if I got it right from FT docs) when FT_Face is 
created using FT cache system you're not supposed to apply any scaling 
to it.


Now looking at hb-ft.cc, I'm a bit concerned about FT_Load_Glyph called 
over and over again. Does it cache intermediate results per glyph? E.g. 
are methods using FT_Load_Glyph called for same glyph sequentially or is 
it possible it wants advances for every glyph, then extents, then 
origins without caching anything in between?




Thanks,
Jamie.
___
HarfBuzz mailing list
HarfBuzz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz



___
HarfBuzz mailing list
HarfBuzz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz


Re: [HarfBuzz] Using FreeType load flags

2015-08-28 Thread Jamie Dale
I went ahead and created and implementation using our existing font
cache and load flags.

Font rendering now looks much closer to what it was pre-HarfBuzz (I
still need to do some more tests to make sure that nothing is broken,
but visually, things seem to be pretty okay), however I did notice
that using the correct flags has seemingly caused FT_Get_Advance to be
significantly slower than it was previously. I solved this with
judicious use of caching, which got my performance back to where it
was when using the vanilla HarfBuzz FreeType implementation - a little
disappointing, as I was hoping the caching would improve the overall
performance rather than just bring it up-to-par with what we got out
of the box.

One other side effect of using the correct flags for FT_Get_Advance is
that the transform we set on our font is now (seemingly) being
respected correctly. I forgot to mention it before, but along with the
load flags, we do need FT_Set_Transform (we only allow a scale) to be
respected by the text shaping. Both of these things can be set by our
end users for their products, and we can't really break their existing
set-ups.

On the topic of performance and caching. The slowest thing on my
profile now is the call to hb_shape_plan_create_cached... as far as I
can tell, it's never actually caching anything. Within the call to
hb_shape_plan_create, there's also a lot of time being spent in
hb_blob_set_user_data (although I couldn't quite see how from looking
at the code, perhaps my symbols are wrong - I'll try and get some full
debug symbols when I'm back at work).

I'm also guessing that there's no way to control the allocator used by
HarfBuzz? From looking at the code, it seems to just call the standard
malloc/free/etc rather than allowing a custom allocator.

-Jamie.

On 28 August 2015 at 12:38, Jamie Dale jamiedale88+harfb...@gmail.com wrote:
 Hey all,

 I'm currently working on integrating HarfBuzz into an existing
 FreeType based text rendering system, however I notice that the
 default FreeType wrapper doesn't allow you to control the load flags
 used by FT_Load_Glyph, and we need these as we use them to control the
 hinting method used by some of our fonts.

 I was going to create my own HarfBuzz font wrapper that used our
 existing font cache with the correct load flags (this has the added
 benefit of avoiding repeated calls to FT_Load_Glyph, as we cache off
 some glyph data), however I noticed some comments in hb-ft.cc that
 makes me think that it won't quite be that simple.


 We don't handle any load_flags.  That definitely has API implications. :(

 FreeType works in 26.6 mode.  Clients can decide to use that mode, and 
 everything
 would work fine.  However, we also abuse this API for performing in 
 font-space,
 but don't pass the correct flags to FreeType.  We just abuse the no-hinting
 mode for that, such that no rounding etc happens.  As such, we don't set 
 ppem, and
 pass NO_HINTING around.  This seems to work best, until we go ahead and add 
 a full load_flags API.


 I was wondering what, if any, issues you might expect to see if I
 change the load flags to include hinting methods, and also whether you
 had any suggestions for how to work around those issues (ideally
 without having to change HarfBuzz itself - we like to keep our third
 party dependencies vanilla where possible as it makes them easier to
 upgrade in the future).

 Thanks,
 Jamie.
___
HarfBuzz mailing list
HarfBuzz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz