Skip to content

[Compile perf] Preserve font-map order while accelerating dvipdfmx lookup and insertion #131

Description

@akcorca

Follow-up to #119 and the merged #130 measurements. The 2026 mirror font map contains 46,659 lines; dvipdfmx spends about 78% of non-idle repeated-conversion samples under map loading, including 41% under hash-table insertion.

Experiment: add a font-map-only auxiliary lookup index and bucket tails, retaining the upstream 503-bucket linked lists as the authoritative record/iteration order. Other dvipdfmx tables are unchanged. No font/PDF object survives heap reset; the index lives and dies with one font-map table.

Before promotion:

  • Differential-test insertion, replacement, deletion, lookup, collision-heavy and binary keys, iteration, destructor order, clear/reinitialize, and allocation-failure fallback against the exact pinned upstream implementation, with sanitizers.
  • Compare PDF/diagnostic/aux/SyncTeX and resolver behavior using unchanged baseline formats/mirrors on 2025 and 2026. Include local maps, mapline overrides, subfonts, missing/corrupt fonts, repeated and changed documents.
  • Paired unprofiled browser measurements, including preparation and first/repeat/body/preamble scenarios. Predeclared success target: >=10% median dvipdfmx-stage improvement and >=5% median warm end-to-end XeLaTeX improvement, no >5% cold regression without investigation, and <2 MiB additional retained index memory for the measured mirror map.
  • No engine release or CorTeX adoption until standalone source/artifact/compatibility gates pass. WasmTex has no dependency on CorTeX code or checkout.

Work starts from origin/main 69b8b62 in branch perf/dvipdfmx-fontmap-index; failed experiments remain documented rather than being silently adopted.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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