Skip to content

v1.4.0 - Per-device font resource optimization

Choose a tag to compare

@Rubilmax Rubilmax released this 12 Mar 15:40
· 72 commits to main since this release
v1.4.0
695f2b5

What's changed

Font resources are now split by screen size to reduce per-device binary size.

Rationale

Previously, all 23 fonts were declared in a single shared resources/fonts/fonts.xml and bundled into every device's .prg binary — even though each device only uses 7–11 of them. Small-screen devices (240×240) were shipping with large-screen segment fonts (145px) they never render, and vice versa.

Changes

  • Split font declarations into 6 size-specific resource directories (s240, s260, s280, s360, s390, s454), each declaring only the fonts needed for that screen-size category
  • Shared fonts (icons, moon) remain in the common resources/fonts/ path since all devices use them
  • Font files are symlinked from size-resources/ back to resources/fonts/ to maintain a single source of truth — no file duplication
  • All 96 device entries in monkey.jungle updated with the appropriate size-resource path

Expected gains

If the Garmin compiler does not already perform dead resource elimination (likely), the per-device savings are:

Screen size Devices Fonts before → after Est. savings
240×240 fenix 6s, FR245, FR745... 23 → 7 ~60 KB
260×260 fenix 6/7, FR255, FR955... 23 → 7 ~60 KB
280×280 fenix 6X/7X, enduro... 23 → 7 ~60 KB
360×360 venu 2s, FR265s 23 → 11 ~45 KB
390×390, 416×416 fenix 8 43mm, venu, epix... 23 → 10 ~50 KB
454×454 fenix 8 47mm, FR965... 23 → 10 ~40 KB

The biggest wins are on the smallest, most memory-constrained devices (some with only 96 KB).