Hi Werner, Any chance the one-line patch below can be applied?
Thanks, behdad http://behdad.org/ On Fri, May 20, 2022 at 11:05 AM Behdad Esfahbod <[email protected]> wrote: > Hi, > > I'm debugging an issue where FT_Get_Advance(), even in its fast path > (NO_HINTING), seems to be much slower than the equivalent HarfBuzz code. > Much of it seems to be overhead because we have to call FT_Get_Advance() > one glyph at a time and it does multiple indirections before getting the > advance and returning. > > But I also found that it tries to apply variations unconditionally. The > following patch fixes that to only try applying variations if the font has > blends set. For me this seems to help a bit (~20% of my numbers): > > diff --git a/src/sfnt/ttmtx.c b/src/sfnt/ttmtx.c > index 7aece36fb..5bca8560d 100644 > --- a/src/sfnt/ttmtx.c > +++ b/src/sfnt/ttmtx.c > @@ -306,7 +306,7 @@ > } > > #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT > - if ( var ) > + if ( var && face->blend ) > { > FT_Face f = FT_FACE( face ); > FT_Int a = (FT_Int)*aadvance; > > For the curious, I'm using perf/benchmark-font in the harfbuzz repo. > Here's the numbers of interest: > > $ ninja -Cbuild && LD_PRELOAD=~/freetype/objs/.libs/libfreetype.so > build/perf/benchmark-font --benchmark_filter=advance --benchmark_out=after > ninja: Entering directory `build' > ninja: no work to do. > 2022-05-20T11:01:01-06:00 > Running build/perf/benchmark-font > Run on (24 X 3665.32 MHz CPU s) > CPU Caches: > L1 Data 32 KiB (x12) > L1 Instruction 32 KiB (x12) > L2 Unified 512 KiB (x12) > L3 Unified 32768 KiB (x2) > Load Average: 0.28, 0.80, 1.02 > > -------------------------------------------------------------------------------------------------------- > Benchmark > Time CPU Iterations > > -------------------------------------------------------------------------------------------------------- > BM_Font/glyph_h_advances/Roboto-Regular.ttf/hb 3.08 > us 3.08 us 227980 > BM_Font/glyph_h_advances/Roboto-Regular.ttf/ft 18.5 > us 18.5 us 37889 > BM_Font/glyph_h_advances/Roboto-Regular.ttf/var/hb 3.09 > us 3.08 us 226996 > BM_Font/glyph_h_advances/Roboto-Regular.ttf/var/ft 18.3 > us 18.2 us 38431 > BM_Font/glyph_h_advances/SourceSansPro-Regular.otf/hb 4.62 > us 4.61 us 150940 > BM_Font/glyph_h_advances/SourceSansPro-Regular.otf/ft 27.4 > us 27.3 us 25622 > BM_Font/glyph_h_advances/AdobeVFPrototype.otf/hb 0.752 > us 0.751 us 932022 > BM_Font/glyph_h_advances/AdobeVFPrototype.otf/ft 1.83 > us 1.83 us 380586 > BM_Font/glyph_h_advances/AdobeVFPrototype.otf/var/hb 6.22 > us 6.21 us 112788 > BM_Font/glyph_h_advances/AdobeVFPrototype.otf/var/ft 3.53 > us 3.52 us 199363 > BM_Font/glyph_h_advances/SourceSerifVariable-Roman.ttf/hb 3.41 > us 3.40 us 205771 > BM_Font/glyph_h_advances/SourceSerifVariable-Roman.ttf/ft 20.2 > us 20.2 us 34728 > BM_Font/glyph_h_advances/SourceSerifVariable-Roman.ttf/var/hb 28.3 > us 28.2 us 24723 > BM_Font/glyph_h_advances/SourceSerifVariable-Roman.ttf/var/ft 37.0 > us 36.9 us 18952 > BM_Font/glyph_h_advances/Comfortaa-Regular-new.ttf/hb 2.08 > us 2.08 us 336868 > BM_Font/glyph_h_advances/Comfortaa-Regular-new.ttf/ft 12.2 > us 12.2 us 56816 > BM_Font/glyph_h_advances/NotoNastaliqUrdu-Regular.ttf/hb 3.24 > us 3.24 us 216425 > BM_Font/glyph_h_advances/NotoNastaliqUrdu-Regular.ttf/ft 19.2 > us 19.2 us 36445 > BM_Font/glyph_h_advances/NotoSerifMyanmar-Regular.otf/hb 1.67 > us 1.67 us 418787 > BM_Font/glyph_h_advances/NotoSerifMyanmar-Regular.otf/ft 9.92 > us 9.90 us 70415 > > I truly cannot explain the order-of-magnitude difference so far. > > Regards, > behdad > http://behdad.org/ >
