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/
>

Reply via email to