Skip to content

v0.4.0 — memoized path reconstruction

Choose a tag to compare

@javimosch javimosch released this 11 Aug 15:32
· 9 commits to main since this release

Collection matches are siblings that share ancestors, so reconstructing each match's reference re-walked the same chain once per match — which ate the entire benefit of the server-side query. v0.4 memoizes that climb, and a collection query becomes the default for every read.

Measured across six applications

app default method --walk
gnome-text-editor 12 ms collection 71 ms
gnome-calculator 23 ms collection 97 ms
gnome-disks 5 ms collection 15 ms
seahorse 15 ms collection 29 ms
Nautilus 560 ms collection 625 ms
gnome-control-center 76 ms collection+walk 69 ms
gnome-control-center --role "push button" 4 ms collection 47 ms

Five of six are 1.1–5.9x faster with identical refs and zero wrong refs. The sixth cannot prove a path for every match, so the read is automatically re-run as a walk (method: "collection+walk") at ~10% more than walking directly — the price of never returning an incomplete set by default.

--collection keeps the fast result including ref_ok:false entries; --walk skips the query. method always reports what ran.

Also in this release

  • The path cache is per-query and never survives a UI change — a cached path outliving the tree it described would resurrect exactly the wrong-ref bug this tool exists to prevent.
  • watch runs uncached: one climb per event gains nothing from a cache, and its maps would live outside the arena.

Correction to the v0.2/v0.3 notes

The README previously claimed the arena fix reduced watch memory growth to zero. That was wrong — it was read off two samples that happened to coincide over a short run. Measured across ~1000 events, the arena fix cut growth from ~17 kB/event to ~0.17 kB/event (~100x), but not to zero. v0.3 and v0.4 grow at the same rate (~190 kB per 1000 events). Bound long-lived listeners with --duration/--max-events; closing the remainder is the top item for v0.5.

Install

curl -L -o linux-use https://github.com/javimosch/linux-use/releases/download/v0.4.0/linux-use-v0.4.0-x86_64-linux
chmod +x linux-use && sudo mv linux-use /usr/local/bin/
sudo apt install libatspi2.0-0 libxtst6 libx11-6 libglib2.0-0
gsettings set org.gnome.desktop.interface toolkit-accessibility true
linux-use doctor && linux-use guide

sha256: c54cbf11acc1cf3f935ad9fddae3eb6861ad4f35e956a442f1425599bb1c603f

Docs and changelog: https://javimosch.github.io/linux-use/

Full Changelog: v0.3.0...v0.4.0