Commit Graph

7015 Commits

Author SHA1 Message Date
Behdad Esfahbod
c66f7f8c5d [kerx] Implement Format2 apply()
Still, not hooked.
2018-10-09 22:49:33 -04:00
Behdad Esfahbod
4b461785bd Fix check 2018-10-09 22:46:30 -04:00
Behdad Esfahbod
4df8eb200d [kern] Use kern subtable length for sanitizing in the accelerator 2018-10-09 22:46:12 -04:00
Behdad Esfahbod
8bff1d2994 [kern] Minor 2018-10-09 22:39:31 -04:00
Behdad Esfahbod
53e5594500 [kerx] Implement Format0 apply()
Not hooked up to be called yet.
2018-10-09 22:35:22 -04:00
Behdad Esfahbod
60318f8715 Minor 2018-10-09 22:25:53 -04:00
Behdad Esfahbod
210f899aca [kern] Sanitize 4 bytes, not 2 2018-10-09 21:58:04 -04:00
Behdad Esfahbod
be2f148da4 [ft] Use mutex to lock access to FT_Face
Makes our FT-backed hb_font_t safe to use from multiple threads.  Still,
the underlying FT_Face should NOT be used from other threads by client
or other libraries.

Maybe I add a lock()/unlock() public API ala PangoFT2 and cairo-ft.
Maybe not.
2018-10-09 16:24:50 -04:00
Behdad Esfahbod
d18c3c5861 [ft] Remove (probably) stale comment 2018-10-09 16:09:53 -04:00
Behdad Esfahbod
7003b601af Minor 2018-10-09 15:55:26 -04:00
Behdad Esfahbod
07899435b8 Install ot-funcs on newly created funcs
**Finally**!  Casual users can stop caring about font-funcs completely now,
like they haven't been needing to care re unicode-funcs for a few years.
2018-10-09 15:39:51 -04:00
Behdad Esfahbod
5515355367 [ot-font] Don't pre-load cmap table
Now that we have get_h_advances() and get_nominal_glyphs() implemented, the
overhead of doing a proper atomic load would be once per run, NOT once per
glyph.  So, no need to pre-load the tables to avoid that overhead.

As such, hb_ot_font_set_funcs() has become really cheap.  Can *finally* make
it be default font functions on all newly created fonts!
2018-10-09 15:12:09 -04:00
Behdad Esfahbod
ec84460e46 [ot/ft] Implement get_nominal_glyphs() callback
Some more measurable speedup.  The recent commits' speedups are as follows:

Testing with Roboto, ****when disabling kern and liga****:

Before:

FT --features=-kern,-liga
user↦   0m0.521s

OT --features=-liga,-kern
user↦   0m0.568s

After:

FT --features=-liga,-kern
user↦   0m0.428s

OT --features=-liga,-kern
user↦   0m0.470s

So, 17% speedup.

Note that FT callbacks are faster than OT these days since we added an advance
cache to FT.  I don't think the difference is enough to justify adding a cache
to OT.

When not disabling kern, the thing is three times slower, so the speedups
are three times less impressive...  Still, 5% not bad for a codebase that I
otherwise thought is optimized out.

Note that, because of this and other optimiztions in our main shaper,
disabling kern and liga, the OT shaper is now *faster* than the fallback
shaper.  So, that's my recommendation to clients that need the absolute
fastest...
2018-10-09 15:07:04 -04:00
Behdad Esfahbod
e883f52732 Call get_nominal_glyphs() for runs of simple clusters at a time
Even without FT or OT font funcs implementing get_nominal_glyphs(), there's measurable
speedup.
2018-10-09 14:50:57 -04:00
Behdad Esfahbod
8008bca83b Whitespace 2018-10-09 14:43:03 -04:00
Behdad Esfahbod
30c114ffec Avoid sort and recompose stages if all clusters simple
Even has measurable speedup...
2018-10-09 14:37:08 -04:00
Behdad Esfahbod
9f79365c3b Fix warning
How come this one is not generated by clang everything bot?!

../../../test/api/test-multithread.c:37:26: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
 static char *font_path = "fonts/Inconsolata-Regular.abc.ttf";
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../test/api/test-multithread.c:38:21: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
2018-10-09 14:36:25 -04:00
Behdad Esfahbod
24382debe8 Rewrite main normalizer loop to isolate runs of simple clusters 2018-10-09 14:33:24 -04:00
Behdad Esfahbod
b5371f18ef Inline decompose_cluster
Towards separating the common case into its own loop.
2018-10-09 14:12:59 -04:00
Behdad Esfahbod
b314c4e9ab [font] Add get_nominal_glyphs() callback (note the plural)
Unused as of now.  To be wired up to normalizer, which would remove
overhead and allow hb-ot-font initialization to become a no-op, so
we can enable it by default.
2018-10-09 09:43:44 -04:00
Behdad Esfahbod
ca6a317012 Minor 2018-10-09 09:43:44 -04:00
Chun-wei Fan
4035158de4 test/api/test-subset-*.c: Fix build on pre-C99
Ensure that we have the variables at the beginning of the block.  These
are the only fixes that we need for building HarfBuzz on older
compilers.
2018-10-09 09:43:36 -04:00
Chun-wei Fan
8e4ad1d7a0 builds: Fix and clean up MSVC DLL builds
Instead of passing a CFLAG/CXXFLAG to define HB_EXTERN, define it
directly in src/hb.hh as __declspec(dllexport) extern when we are
building HarfBuzz as DLLs on Visual Studio.  Define HB_INTERNAL
as nothing without defining HB_NO_VISIBILITY when building HarfBuzz as
DLLs to avoid linker errors on Visual Studio builds.

Also "install" harfbuzz-subset.dll into $(PREFIX)\bin as the
hb-subset utility will depend on that DLL at runtime, when HarfBuzz is
built as DLLs.  Since it consists of private APIs that are subject to
change, we do not install its headers nor .lib file.
2018-10-09 09:43:36 -04:00
Behdad Esfahbod
e640f3a6b1 Another old bot fix 2018-10-09 08:28:07 -04:00
Behdad Esfahbod
e4f27f368f Try fixing older bots 2018-10-09 08:20:10 -04:00
Behdad Esfahbod
bee93e2697 Add const to get_*_advances API
Ouch!
2018-10-09 08:02:25 -04:00
Behdad Esfahbod
eb2be97f86 Port test off deprecated API 2018-10-09 07:48:52 -04:00
Behdad Esfahbod
cc126f2817 Minor 2018-10-09 01:10:15 -04:00
Behdad Esfahbod
b2fbe55b82 [icu] Unbreak 2018-10-09 01:07:36 -04:00
Behdad Esfahbod
a353c1768d Remove test for deprecated hb_set_invert() 2018-10-09 01:05:28 -04:00
Behdad Esfahbod
a52bc039c3 Properly remove deprecated stuff 2018-10-09 00:56:33 -04:00
Behdad Esfahbod
fc50916589 Remove deprecated decompose_compatibility stuff 2018-10-09 00:39:42 -04:00
Behdad Esfahbod
eed737f672 Remove deprecated eastasian_width 2018-10-09 00:37:10 -04:00
Behdad Esfahbod
47030b1855 [ft/ot] Remove implementation of deprecated kerning funcs 2018-10-09 00:30:45 -04:00
Behdad Esfahbod
977c8a8e5c [kern] Minor 2018-10-09 00:22:08 -04:00
Behdad Esfahbod
ed5cfa42c7 [kern] Minor 2018-10-09 00:20:35 -04:00
Behdad Esfahbod
d219f899f4 Deprecate font kern API 2018-10-09 00:01:09 -04:00
Behdad Esfahbod
a51958819f Apply TrueType/OpenType kern table when GPOS kern feature is not available
Fixes https://github.com/harfbuzz/harfbuzz/issues/250
2018-10-08 23:57:45 -04:00
Behdad Esfahbod
09ad2613c8 Separate fallback kern vs mark positioning 2018-10-08 23:30:24 -04:00
Behdad Esfahbod
3c23ff9b7c [kern] Add kerning driver to TT kern table 2018-10-08 23:26:26 -04:00
Behdad Esfahbod
683c3a9533 [kern] Abstract away kerning machine 2018-10-08 23:09:48 -04:00
Behdad Esfahbod
fb4f438381 Add HB_DEPRECATED
Fixes https://github.com/harfbuzz/harfbuzz/issues/1232
2018-10-08 22:44:16 -04:00
Behdad Esfahbod
80e3102b8a [kerx] Process coverage flags 2018-10-08 22:41:08 -04:00
Behdad Esfahbod
26d7305da7 Deprecate decompose_compatibility stuff 2018-10-08 22:31:35 -04:00
Behdad Esfahbod
42b51eee54 Deprecate eastasian_width stuff 2018-10-08 22:26:39 -04:00
Behdad Esfahbod
286a45641f Minor 2018-10-08 16:41:08 -04:00
Behdad Esfahbod
c0d3bf1baf Minor 2018-10-08 16:32:44 -04:00
Behdad Esfahbod
9c1bb81f5c [test/text-rendering-tests] Update from upstream 2018-10-08 16:11:14 -04:00
Behdad Esfahbod
1a5a3325a2 [kerx] Minor 2018-10-07 23:08:39 -04:00
Behdad Esfahbod
d62b4011cc [kern] Shout less 2018-10-07 22:58:06 -04:00