Repository navigation
FrameMover v1.1.0: smaller and lighter
A performance release. Behavior and controls are unchanged.
Optimizations
- Binary is about 3x smaller. The
frame-moverexecutable goes from 406 KB to 135 KB, and the installer AppImage from 1.08 MB to 0.99 MB. Builds now default toMinSizeRelwith 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::functionclosures, thestd::regexbinding 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.inifall 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.