Log

Author Commit Date CI Message
Behdad Esfahbod 2032da01 2025-02-18T20:54:56 [ot-font] Centralize painting an outline glyph
Behdad Esfahbod 01f02f55 2025-02-18T20:28:48 [COLR] Optimize NoVariation codepath
Behdad Esfahbod 4c263ecd 2025-02-18T20:08:19 Merge pull request #5074 from harfbuzz/tortoise-hare [decycler] Implement an efficient graph cycle detector
Behdad Esfahbod f26d9514 2025-02-18T20:07:25 [COLR] Fix HB_LEAN build
Behdad Esfahbod fb0e181a 2025-02-17T14:57:20 [decycler] Reduce stack use further Down to three pointers. Exercise for the reader to prove this is optimal.
Behdad Esfahbod 4335e49a 2025-02-16T10:33:49 [VARC] Port to hb-decycler-t 5% faster on varc-hanzi test case.
Behdad Esfahbod a0f83e78 2025-02-16T09:55:12 [decycler] Reduce stack use 48bytes -> 40bytes per node.
Behdad Esfahbod 646da80c 2025-02-17T14:49:06 [decycler] Reduce stack use Down from 5 pointers to 4.
Behdad Esfahbod d5faabe7 2025-02-16T09:47:58 [decycler] Add test
Behdad Esfahbod 0aa400b1 2025-02-15T23:19:44 [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.
Behdad Esfahbod 0bb72eee 2025-02-18T00:44:29 [decycler] Turn off compiler warning ../src/OT/Var/VARC/../../../hb-decycler.hh:108:25: warning: storing the address of local variable ‘node’ in ‘*&c_15(D)->layers_decycler.hb_decycler_t::tortoise’ [-Wdangling-pointer=]
Behdad Esfahbod 5aea89b5 2025-02-17T14:32:23 [decycler] Don't leave a dangling pointer around Even if it was never accessed.
Behdad Esfahbod c7fc03a3 2025-02-16T14:43:09 [ft-colr] Use hb_decycler_t
Behdad Esfahbod c84e9b95 2025-02-17T15:08:03 [decycler] Change value type from unsigned to uintptr_t Since the node struct is gonna be 3*sizeof(void*) bytes anyway, change value type to use the full space available.
Behdad Esfahbod bedc8d93 2025-02-16T12:30:18 [decycler] Document algorithm
Behdad Esfahbod 2bdf9850 2025-02-16T12:14:42 [decycler] Add alternative way of using it to tests
Behdad Esfahbod 1c18646d 2025-02-17T15:06:27 [decycler] Reduce stack use, kinda Move the bool to the decycler from the node. The value can now become a full pointer size (next commit).
Behdad Esfahbod 3cb49717 2025-02-16T10:54:11 [decycler] Add some documentation
Behdad Esfahbod 0667ceae 2025-02-16T10:37:21 [VARC] Reduce stack use
Behdad Esfahbod ed76c855 2025-02-18T20:01:36 [COLR] Optimize palette access
Behdad Esfahbod 016e78b6 2025-02-18T19:49:48 [COLR] Micro-optimize
Behdad Esfahbod e6eec3cc 2025-02-18T00:48:37 [test] Silence compiler warning
Jim-Wang b97ef6c7 2025-02-13T07:19:04 add dep
Behdad Esfahbod 215c8de3 2025-02-15T21:07:47 [ft-colr] Fix cycle-detection accounting Fixes https://github.com/harfbuzz/harfbuzz/issues/5073
Khaled Hosny ff3aaece 2025-02-10T14:25:58 [test/shape-plan] Add another test and some comments
Khaled Hosny cf336f17 2025-02-10T14:15:25 [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.
Khaled Hosny a7d7715f 2025-02-02T23:06:11 [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.
Khaled Hosny bcd5aa36 2025-02-13T14:00:31 [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.
Behdad Esfahbod d2a88fbd 2025-02-12T21:48:22 [vector] Add alloc_exact()
Khaled Hosny 8c561733 2025-02-12T12:37:10 [test/coretext] Add a test for copying variations
Khaled Hosny c07b2233 2025-02-12T12:36:21 [coretext] Fix copying of variations when creating hb-font
Behdad Esfahbod 778acfc6 2025-02-11T23:12:23 [coretext] Don't assume that a normalized-coord 0 mins design-coords at default
Behdad Esfahbod 27a25f2d 2025-02-11T23:10:43 [coretext] Copy variations when creating hb-font https://github.com/harfbuzz/harfbuzz/issues/3159#issuecomment-2652262262
Khaled Hosny 94584d14 2025-02-12T13:33:57 [coretext] Use vector instead of malloc/free a C-array
Khaled Hosny 1bc87dfe 2025-02-12T13:09:02 [coretext] Handle allocation failures
Khaled Hosny 33b31771 2025-02-12T00:18:48 [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.
Khaled Hosny d46c0ca2 2025-02-11T23:55:11 [ci] Don’t use system Python on Linux We are already installing one using actions/setup-python.
Khaled Hosny 467b08ba 2025-02-11T23:41:34 [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.
Behdad Esfahbod a69842a8 2025-02-12T11:23:28 [shape-plan] Minor check for invalid direction
Behdad Esfahbod e9c2d78d 2025-02-12T10:44:34 [buffer] Clean up some small mess
Behdad Esfahbod 6d95c128 2025-02-12T10:36:49 [buffer] Remove unused includes
Behdad Esfahbod 34464657 2025-02-06T12:03:18 [set] Tweak allocation Allocation 2-page sets as exact count as well. Don't do the same for the page_map.
dependabot[bot] 8f1c31c0 2025-02-10T11:00:28 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](https://github.com/hendrikmuhs/ccache-action/compare/53911442209d5c18de8a31615e0923161e435875...a1209f81afb8c005c13b4296c32e363431bffea5) --- 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>
dependabot[bot] 11b71418 2025-02-10T11:00:25 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](https://github.com/github/codeql-action/compare/dd746615b3b9d728a6a37ca2045b68ca76d4841a...9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0) --- 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>
dependabot[bot] 63cee529 2025-02-10T10:16:27 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>
Behdad Esfahbod 39fec7b1 2025-02-09T17:54:46 Merge pull request #5062 from harfbuzz/test-fuzzer-one-go [test/fuzzing] Run each fuzzer on all fonts in one process
Behdad Esfahbod abdd60ac 2025-02-09T17:54:07 Merge pull request #5063 from harfbuzz/disable-google-benchmark-tests [test] Exclude google-benchmark tests by default if meson "recent" an…
Behdad Esfahbod b540c37c 2025-02-09T09:47:18 Update meson.build Co-authored-by: خالد حسني (Khaled Hosny) <khaled@aliftype.com>
Khaled Hosny 7ba3efa5 2025-02-09T18:42:45 [tests/fuzzing] Use the correct dirs for subset and repacker fuzzers
Behdad Esfahbod 57c9bdd0 2025-02-09T16:27:16 [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
Khaled Hosny c404d8fc 2025-02-09T18:08:50 [test/fuzzing] Merge hb_fuzzer_tools.py back and simplify
Khaled Hosny 4c43fdcd 2025-02-09T17:52:13 [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.
Behdad Esfahbod c29b1de3 2025-02-09T15:38:18 [test/fuzzing] Remove old cruft
Behdad Esfahbod 1e3f59a7 2025-02-09T15:21:18 [ci] Give sanitizers more time
Behdad Esfahbod 86329643 2025-02-09T15:12:03 [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
Behdad Esfahbod be22e43d 2025-02-09T14:55:44 [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
Behdad Esfahbod b5e07e75 2025-02-09T14:04:20 Merge pull request #5060 from harfbuzz/glyf-contour-start-match-ft-ct [glyf] Change drawing algorithm to match FreeType / CoreText
Behdad Esfahbod 6738ee3d 2025-02-09T13:30:19 [ci/fedora-valgrind] Add time multiplier of 10 and run slow tests
Behdad Esfahbod fc4d5077 2025-02-09T13:28:45 [hb-draw-fuzzer] Increase test time I'm getting timeouts. Might be an infinite loop. But let's see.
Behdad Esfahbod 4b54ee11 2025-02-09T12:38:58 [glyf] Change drawing algorithm to match FreeType / CoreText
Behdad Esfahbod f858def1 2025-02-09T13:07:20 Revert "[test] Exclude google-benchmark tests by default if meson "recent"" This reverts commit 3c975a857f76c421793d62aaed1ba3382d06994d. See https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646149763
Behdad Esfahbod f68193a0 2025-02-09T11:43:07 [glyf] Use direct access to points array Not necessary faster. Prep'ing for next change.
Behdad Esfahbod 19a152b4 2025-02-09T12:37:03 [perf] Don't depend on libharfbuzz-subset for most benchmarks
Behdad Esfahbod 3c975a85 2025-02-09T08:58:55 [test] Exclude google-benchmark tests by default if meson "recent" https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646131694
Behdad Esfahbod cb6779f9 2025-02-09T08:39:03 [test] Try running slow tests early Probably already happens, but this wouldn't hurt. https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646125367
Behdad Esfahbod 134eef55 2025-02-09T08:22:38 [test] Reorder test suites Makes it a bit faster. https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646120679
Behdad Esfahbod c55738fa 2025-02-09T08:08:52 [test] Set MALLOC_CHECK_ to 1 instead of 2; kill G_SLICE=always-malloc MALLOC_CHECK_=2 makes running tests twice slower on macOS. Value 1 is as fast as not checking at all. It's not like this ever caught a bug for us or anything. We have so many sanitizers and fuzzers funning on CI, which catch all kinds of memory problems. G_SLICE is long gone in glib. The slowest part of running the test suite now is the google-benchmark tests, that get run by us... I'll see if I can disable. I had reported it before at https://github.com/harfbuzz/harfbuzz/issues/4153
Behdad Esfahbod b13017e6 2025-02-09T08:00:18 Use HB_ALWAYS_INLINE instead of bare __attribute__ The former works on MSVC too.
Behdad Esfahbod ee19666c 2025-02-09T05:14:36 [hb-shape/view] Allow --unicodes and --text if at least one is empty Useful for scripting.
Behdad Esfahbod 5cab7419 2025-02-09T04:56:12 Merge pull request #5058 from harfbuzz/ot-font-trak [ot-font/trak] Move trak application to ot-font instead of ot-shape
Behdad Esfahbod 922a56f4 2025-02-09T04:50:17 [trak] Fix configs build
Behdad Esfahbod 17c11ec5 2025-02-09T04:46:29 [ft/trak] Apply trak in ft-font-funcs as well Part of https://github.com/harfbuzz/harfbuzz/issues/5049
Behdad Esfahbod ffae5b04 2025-02-09T04:39:32 [ot-font/trak] Move trak application to ot-font instead of ot-shape This is what CoreText does. Fixes https://github.com/harfbuzz/harfbuzz/issues/5049
Behdad Esfahbod f840480f 2025-02-09T04:27:20 [trak] Remove leftover
Behdad Esfahbod be287eab 2025-02-09T04:18:31 [trak] Don't shift glyphs That's what CoreText does and fonts are designed for. Who are we to improve on...
Behdad Esfahbod 1150d4bf 2025-02-09T04:16:57 [trak] Remove support for disabling using pseudo-font-feature Fixes https://github.com/harfbuzz/harfbuzz/issues/5052
Behdad Esfahbod 4c06c3d6 2025-02-09T04:01:59 Merge pull request #5057 from harfbuzz/coretext-font-nonbmp [coretext-font] Support non-BMP characters
Behdad Esfahbod fb222953 2025-02-09T03:56:46 [coretext-font] Support non-BMP in variation-selector callback Fixes https://github.com/harfbuzz/harfbuzz/issues/5056
Behdad Esfahbod f6bf9f69 2025-02-09T03:52:13 [coretext-font] Do early-return in get_nominal_glyphs() Related to https://github.com/harfbuzz/harfbuzz/issues/5056
Behdad Esfahbod c5e6c885 2025-02-09T03:49:01 [coretext-font] Support non-BMP chars in get_nominal_glyph(s) Part of https://github.com/harfbuzz/harfbuzz/issues/5056
Behdad Esfahbod b9675d6d 2025-02-09T03:01:21 Merge pull request #5055 from harfbuzz/trak-interpolate [trak] Interpolate between tracks
Behdad Esfahbod a70a30dd 2025-02-09T02:55:48 [trak] Interpolate between tracks Fixes https://github.com/harfbuzz/harfbuzz/issues/5054 According to Ned, this is what CoreText does. Should add tests some time...
Behdad Esfahbod 1bf0a5bc 2025-02-09T02:43:09 [trak] Streamline a bit Also use float math.
Behdad Esfahbod b1677e76 2025-02-09T01:56:03 [trak] Handle "out-of-range" values better If requested size < min-size, use the value for min-size. If requested size > max-size, use the value for max-size. This is the only way that makes sense. Extrapolating as we were doing, is just wrong... This also seems to match what CoreText does. Adjacent to fixing https://github.com/harfbuzz/harfbuzz/issues/5054
Behdad Esfahbod 691cc939 2025-02-06T20:08:16 [trak] Fix build without STAT
Behdad Esfahbod b8327fe6 2025-02-06T20:01:12 Fix compiler errors
Behdad Esfahbod f394206b 2025-02-06T19:48:56 [ot-shape] Only apply trak'ing if STAT table present
Behdad Esfahbod 6e0dd811 2025-02-06T17:26:27 [trak] Default ptem to 12 That's what CoreText does. https://developer.apple.com/documentation/coretext/ctfontcreatewithgraphicsfont(_:_:_:_:) Fixes https://github.com/harfbuzz/harfbuzz/issues/5048
Behdad Esfahbod ef00ac8c 2025-02-06T17:44:55 Merge pull request #5051 from harfbuzz/trak-choose [trak] Choose closest trak track to 0.0
Behdad Esfahbod 6a37a652 2025-02-06T17:40:10 [trak] Choose closest trak track to 0.0 Seems to be what CT does. Needs more testing to adjust better, but for now it's better than before.
Behdad Esfahbod 8efd2d85 2025-02-06T14:38:09 [coretext] Fix CGFont leak
Behdad Esfahbod b5327faf 2025-02-06T14:26:37 Fix leak From recent work.
Behdad Esfahbod 24fe2be9 2025-02-06T11:55:23 [subset] Fix undefined-behavior
Behdad Esfahbod 97db7bb2 2025-02-06T11:01:59 [set-digest] Cosmetic
Behdad Esfahbod f0d6a366 2025-02-06T02:51:50 [face] Use a macro
Behdad Esfahbod 7bdc6c9a 2025-02-06T02:47:13 Whitespace
Behdad Esfahbod 6091abcc 2025-02-06T02:40:24 [buffer] Avoid a copy in collect_codepoints()
Behdad Esfahbod e5e3bc40 2025-02-06T02:36:26 [buffer] Merge two functions into a template
Behdad Esfahbod 403f12f7 2025-02-06T02:33:41 [buffer] A few always-inline's
Behdad Esfahbod 4818ba9e 2025-02-06T01:50:12 [set-digest] Yet another tuning Saves 5% on SF Pro while regressing 2% on Roboto.