Skip to content

Optimisation: face selection for fallbacks #60

@dhardy

Description

@dhardy

Related: #53
Importance: probably low since harfbuzz/ttf-parser#68

Run-splitting must discover the font face to be used for each character. For this we use FontLibrary::face_for_char which iterates through all applicable faces, using Face::glyph_index on each, returning the FaceId of the first matching face (but discarding the GlyphId which is rediscovered during shaping).

There are a few possible optimisations here (but 2 and 3 conflict):

  1. Batch look-ups. prepare_runs calls face_for_char_or_first for each char; it may be faster to iterate through chars for each subtable (see 0.12 to 0.13 performance regressions harfbuzz/ttf-parser#76). The same could be done in shape_simple.
  2. Add a Face::contains_glyph method to ttf-parser (using the glyph_index method as a starting point, this should not be hard, but requires additional testing).
  3. Cache both FaceId and GlyphId for use when shaping. This should be usable for shape_simple though probably not for Rustybuzz or Harfbuzz backends, so not particularly useful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions