Skip Skrifa lookup for cached outlines #543
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Stacked on #542; the last commit is the new one.
Previously, drawing a glyph performed the following lookups, in order:
skrifa::BitmapStrikeslookupskrifa::ColorGlyphCollectionlookupskrifa::OutlineGlyphCollectionlookupThe Skrifa lookups are somewhat slow. I believe they perform a binary search on the raw font data internally.
We can optimize this by:
To do this, I refactored the
prepare_[kind]_glyphfunctions to return anOption; this allows them to perform the requisite Skrifa "does the glyph exist" lookups themselves. Theprepare_outline_glyphfunction can then check the outline cache itself, before doing a potentially-expensive Skrifa lookup. I also changed the outline cache to storeOption<OutlinePath>, so we can store absent glyphs in the cache too.Combined with the changes from #542, this is a ~10% speedup above current main, at least on my machine.