Commit graph

17962 commits

Author SHA1 Message Date
Behdad Esfahbod
4335e49a02 [VARC] Port to hb-decycler-t
5% faster on varc-hanzi test case.
2025-02-18 20:02:56 -07:00
Behdad Esfahbod
a0f83e783f [decycler] Reduce stack use
48bytes -> 40bytes per node.
2025-02-18 20:02:56 -07:00
Behdad Esfahbod
d5faabe7ea [decycler] Add test 2025-02-18 20:02:56 -07:00
Behdad Esfahbod
0aa400b1d8 [decycler] Implement an efficient graph cycle detector
This is an algorithm I came up with, based on the Floyd's
Tortoise-Hare constant-memory linear-time linked-list cycle-detection
algorithm.

https://en.wikipedia.org/wiki/Cycle_detection#Floyd's_tortoise_and_hare

It is linear-time and malloc-free. It *eventually* detects cycles,
not immediately.

The main different with Floyd's algorithm is that this algorithm
detects cycles when one is traversing down a graph, not just a
linked list.

Our existing cycle-detection algorithms use a set-of-integers,
either hb_set_t, or more efficient in this case, hb_map_t. Those
include at least one malloc, and as such show up on profiles.

Port hb-ot-font COLRv1 to use the decycler instead of previous
hb_map_t usage for cycle detection.

benchmark-font paint_glyph on NotoColorEmoji-Regular.ttf:
Before: 8ms; After: 5.5ms. No cycle detection: 5.5ms.

FT COLRv1 API is so slow (174ms) it's not worth porting to this.
Other graphs (VARC, etc) to be ported.

Test and documentation to be added.
2025-02-18 20:02:56 -07:00
Behdad Esfahbod
ed76c8559e [COLR] Optimize palette access 2025-02-18 20:01:36 -07:00
Behdad Esfahbod
016e78b683 [COLR] Micro-optimize 2025-02-18 19:49:48 -07:00
Behdad Esfahbod
e6eec3cc14 [test] Silence compiler warning 2025-02-18 00:48:49 -07:00
Jim-Wang
b97ef6c702 add dep 2025-02-16 09:29:28 +02:00
Behdad Esfahbod
215c8de3cd [ft-colr] Fix cycle-detection accounting
Fixes https://github.com/harfbuzz/harfbuzz/issues/5073
2025-02-15 21:08:14 -07:00
Khaled Hosny
ff3aaece6d [test/shape-plan] Add another test and some comments 2025-02-14 21:54:30 +02:00
Khaled Hosny
cf336f17b2 [shape-plan] Rename hb_ot_shape_plan_get_features to get_feature_tags
Simplify the API by returning only feature tags. The users of this API
would be interested only in feature enabled by default and whether the
feature is globally or partially enabled wouldn’t be of much interest in
that case. For user features, the user of the API already have full
access to them.
2025-02-14 21:54:30 +02:00
Khaled Hosny
a7d7715f10 [shape-plan] Add hb_ot_shape_plan_get_features
This should get the features on a shape plan after executing it.

Initially I wanted to return an array of tags, but then there can be
user features that are not enabled globally, so I thought returning
hb_feature_t with value and range would be better. There is a TODO since
I couldn’t figure out how to get the value and range from the feature
mask. But also it may be overkill and a simple boolean indicating wither
it is a global feature or not would be enough.

I wounder also what should happen to non-user features that are applied
selectively, like init or medi, does ot make sense to indicate whether
they are global or not?

This is inspired by the discussion in:
https://github.com/fontforge/fontforge/pull/5522#pullrequestreview-2574321449,
but it might be useful to other HarfBuzz users.
2025-02-14 21:54:30 +02:00
Khaled Hosny
bcd5aa368d [docs/coretext] Fix hb_coretext_font_set_funcs() documentation
Remove the note that fonts created with hb_coretext_font_create() have
these font functions configured for them, which is not true.

hb_coretext_font_create() documents this correctly.
2025-02-13 17:39:50 -07:00
Behdad Esfahbod
d2a88fbd7b [vector] Add alloc_exact() 2025-02-12 21:52:01 -05:00
Khaled Hosny
94584d14d3 [coretext] Use vector instead of malloc/free a C-array 2025-02-12 14:21:09 +02:00
Khaled Hosny
1bc87dfed2 [coretext] Handle allocation failures 2025-02-12 14:21:09 +02:00
Khaled Hosny
8c561733b6 [test/coretext] Add a test for copying variations 2025-02-12 14:21:09 +02:00
Khaled Hosny
c07b22335f [coretext] Fix copying of variations when creating hb-font 2025-02-12 14:21:09 +02:00
Behdad Esfahbod
778acfc606 [coretext] Don't assume that a normalized-coord 0 mins design-coords at default 2025-02-12 14:21:09 +02:00
Behdad Esfahbod
27a25f2d3d [coretext] Copy variations when creating hb-font
https://github.com/harfbuzz/harfbuzz/issues/3159#issuecomment-2652262262
2025-02-12 14:21:09 +02:00
Khaled Hosny
33b3177157 [ci] Stop generating test coverage data
It is failing on Linux CI after upgrading to Ubuntu 24.04, and macOS
upload to codecov was also silently failing for a while now. We don’t do
much with the coverage data anyway.
2025-02-12 13:52:39 +02:00
Khaled Hosny
d46c0ca223 [ci] Don’t use system Python on Linux
We are already installing one using actions/setup-python.
2025-02-12 13:52:39 +02:00
Khaled Hosny
467b08ba36 [ci] Update Ubuntu 20.04 images to 24.04
GitHub actions will start failing jobs using Ubuntu 20.04 images, so
switch to 24.04. Switch also on CircleCI while at it.
2025-02-12 13:52:39 +02:00
Behdad Esfahbod
a69842a839 [shape-plan] Minor check for invalid direction 2025-02-12 11:23:28 +00:00
Behdad Esfahbod
e9c2d78dae [buffer] Clean up some small mess 2025-02-12 11:12:51 +00:00
Behdad Esfahbod
6d95c12871 [buffer] Remove unused includes 2025-02-12 11:12:40 +00:00
Behdad Esfahbod
3446465750 [set] Tweak allocation
Allocation 2-page sets as exact count as well.
Don't do the same for the page_map.
2025-02-10 18:52:23 +00:00
dependabot[bot]
8f1c31c09c Bump hendrikmuhs/ccache-action from 1.2.16 to 1.2.17
Bumps [hendrikmuhs/ccache-action](https://github.com/hendrikmuhs/ccache-action) from 1.2.16 to 1.2.17.
- [Release notes](https://github.com/hendrikmuhs/ccache-action/releases)
- [Commits](5391144220...a1209f81af)

---
updated-dependencies:
- dependency-name: hendrikmuhs/ccache-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 11:17:25 +00:00
dependabot[bot]
11b714187b Bump github/codeql-action from 3.28.8 to 3.28.9
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.8 to 3.28.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](dd746615b3...9e8d0789d4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 11:16:21 +00:00
dependabot[bot]
63cee529c2 Bump fonttools from 4.55.8 to 4.56.0 in /.ci
Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.55.8 to 4.56.0.
- [Release notes](https://github.com/fonttools/fonttools/releases)
- [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst)
- [Commits](https://github.com/fonttools/fonttools/compare/4.55.8...4.56.0)

---
updated-dependencies:
- dependency-name: fonttools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 10:29:02 +00:00
Behdad Esfahbod
39fec7b11d
Merge pull request #5062 from harfbuzz/test-fuzzer-one-go
[test/fuzzing] Run each fuzzer on all fonts in one process
2025-02-09 17:54:46 +00:00
Behdad Esfahbod
abdd60acef
Merge pull request #5063 from harfbuzz/disable-google-benchmark-tests
[test] Exclude google-benchmark tests by default if meson "recent" an…
2025-02-09 17:54:07 +00:00
Behdad Esfahbod
b540c37c89
Update meson.build
Co-authored-by: خالد حسني (Khaled Hosny) <khaled@aliftype.com>
2025-02-09 09:47:18 -07:00
Khaled Hosny
7ba3efa5c6 [tests/fuzzing] Use the correct dirs for subset and repacker fuzzers 2025-02-09 18:42:45 +02:00
Behdad Esfahbod
57c9bdd0bd [test] Exclude google-benchmark tests by default if meson "recent" and...
...glib not built internally.

Second try.

See https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646347531
2025-02-09 16:29:13 +00:00
Khaled Hosny
c404d8fc70 [test/fuzzing] Merge hb_fuzzer_tools.py back and simplify 2025-02-09 18:11:38 +02:00
Khaled Hosny
4c43fdcd07 [test/fuzzing] Simplify Python scripts further
We always path the fuzzer path in meson, so we don’t need to search for
fuzzer path in the scripts, and then we can use one script for all the
fuzzers.
2025-02-09 18:11:34 +02:00
Behdad Esfahbod
c29b1de39f [test/fuzzing] Remove old cruft 2025-02-09 15:38:18 +00:00
Behdad Esfahbod
1e3f59a79f [ci] Give sanitizers more time 2025-02-09 15:21:18 +00:00
Behdad Esfahbod
86329643fd [test/fuzzing] Call binaries with 64 fonts at a time
Second try... Previous attempt caused a too-many-command-line-args
on Windows.

https://github.com/harfbuzz/harfbuzz/issues/5061
2025-02-09 15:12:03 +00:00
Behdad Esfahbod
be22e43d7d [test/fuzzing] Run each fuzzer on all fonts in one process
Much much faster, specially under valgrind, than spawning one process per font.

Fixes https://github.com/harfbuzz/harfbuzz/issues/5061
2025-02-09 14:55:44 +00:00
Behdad Esfahbod
b5e07e7546
Merge pull request #5060 from harfbuzz/glyf-contour-start-match-ft-ct
[glyf] Change drawing algorithm to match FreeType / CoreText
2025-02-09 14:04:20 +00:00
Behdad Esfahbod
6738ee3d1b [ci/fedora-valgrind] Add time multiplier of 10 and run slow tests 2025-02-09 13:50:27 +00:00
Behdad Esfahbod
fc4d507770 [hb-draw-fuzzer] Increase test time
I'm getting timeouts. Might be an infinite loop. But let's see.
2025-02-09 13:28:45 +00:00
Behdad Esfahbod
4b54ee1148 [glyf] Change drawing algorithm to match FreeType / CoreText 2025-02-09 13:07:57 +00:00
Behdad Esfahbod
f858def14b Revert "[test] Exclude google-benchmark tests by default if meson "recent""
This reverts commit 3c975a857f.

See https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646149763
2025-02-09 13:07:20 +00:00
Behdad Esfahbod
f68193a00a [glyf] Use direct access to points array
Not necessary faster. Prep'ing for next change.
2025-02-09 12:38:38 +00:00
Behdad Esfahbod
19a152b47e [perf] Don't depend on libharfbuzz-subset for most benchmarks 2025-02-09 12:37:28 +00:00
Behdad Esfahbod
3c975a857f [test] Exclude google-benchmark tests by default if meson "recent"
https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646131694
2025-02-09 08:58:55 +00:00
Behdad Esfahbod
cb6779f9e5 [test] Try running slow tests early
Probably already happens, but this wouldn't hurt.

https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646125367
2025-02-09 08:39:03 +00:00