Skip to content

FrameMover v1.1.0: smaller and lighter

Choose a tag to compare

@NotZoeyDev NotZoeyDev released this 17 Oct 00:22
· 4 commits to main since this release
0f88e98

A performance release. Behavior and controls are unchanged.

Optimizations

  • Binary is about 3x smaller. The frame-mover executable goes from 406 KB to 135 KB, and the installer AppImage from 1.08 MB to 0.99 MB. Builds now default to MinSizeRel with link-time optimization, unused-section removal and stripped symbols.
  • Less work per frame while idle. Tracking poses are only read when a grab or snap turn actually needs them, so holding height keys or sitting idle no longer makes tracking IPC calls.
  • The dashboard panel redraws only when something changed, instead of on a fixed timer. It refreshes on controller connect, disconnect and role changes, and retries on its own if a redraw is skipped.
  • Faster panel upload. The pixel conversion to the overlay texture skips per-channel divisions for opaque pixels, which is nearly all of them.
  • Leaner Vulkan setup. The texture upload reuses a single command buffer and fence rather than one per image slot, and extension names are parsed in place without extra allocations.
  • Less code under the hood. Shared file helpers, table-driven settings and bindings, and a plain action enum replace many std::function closures, the std::regex binding parser and duplicated code. This is where much of the size reduction comes from.

Fixes along the way

  • Chaperone backups can no longer overwrite each other when two are made within the same second, and old backups are only pruned after the new one is written successfully.
  • Shortened binding names in the panel no longer cut a UTF-8 character in half.
  • Non-finite values in config.ini fall back to their defaults.

Upgrading

Run the new FrameMover-installer-aarch64.AppImage and pick Install; it replaces the installed copy. If SteamVR is running when FrameMover is replaced, restart FrameMover (or SteamVR) to load the new version.

Thanks

Thank you to @cinnacappu (cappu) for the optimization pull request (#1) behind this release.