From 96ac1ee65da31055704e0a14cafacc33914d7e86 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 30 Sep 2026 19:56:48 +0200 Subject: perf(dashboard): draw at 0.1s only while the dashboard is visible Conky gives Lua no way to request one redraw, so a scroll showed up to 2s late. Pointer enter and leave, which Hyprland sends on every toggle of the special workspace, now switch conky_set_update_interval between 0.1s and the config's 2s. At that rate the CPU and network counters would sample over 0.1s windows and the chart would fill 20x faster, so both now sample through data.new_gate on the /proc/uptime clock, about every 2s, and redraw their last values in between. The samplers move to texeci: execi runs in the main loop and a 0.7s nvtable or an Immich download stalled the scroll. Measured: about 12% of one core while visible, 0.5% while hidden. Co-Authored-By: Claude Opus 5.5 --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 59e5797..3de25f7 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ the file. Until it works, and whenever the cache is missing, the card draws its own chrome with `no weather data` and the thing to fix, rather than vanishing. Fetching is scheduled by conky itself: `conky.text` carries a single -`${execi 900 ~/.config/conky/bin/weather-fetch.sh}`, so the cache refreshes +`${texeci 900 ~/.config/conky/bin/weather-fetch.sh}`, so the cache refreshes every 15 minutes while the dashboard runs and never while it does not. The widget only ever reads `~/.cache/udt/weather.json`; it makes no network call and cannot block the draw. @@ -85,16 +85,16 @@ The disks and cache cards read a cache file that a sampler writes; they never call `du` or `statfs` themselves. `statfs` on an unreachable NFS path blocks, and the disks sampler exists so that a dead server costs a stale cache rather than a frozen draw. Sampling is scheduled by conky itself: `conky.text` carries -an `${execi}` per sampler, even though that block renders nothing under Cairo. - - ${execi 900 ~/.config/conky/bin/weather-fetch.sh} - ${execi 60 ~/.config/conky/bin/disks-sample.sh} - ${execi 900 ~/.config/conky/bin/cache-sample.sh} - ${execi 1800 ~/.config/conky/bin/pubip-sample.sh} - ${execi 900 ~/.config/conky/bin/slackware-sample.sh} - ${execi 300 ~/.config/conky/bin/calendar-sample.sh} - ${execi 1800 ~/.config/conky/bin/immich-fetch.sh} - ${execi 600 ~/.config/conky/bin/updates-sample.sh} +a threaded `${texeci}` per sampler, even though that block renders nothing under Cairo. + + ${texeci 900 ~/.config/conky/bin/weather-fetch.sh} + ${texeci 60 ~/.config/conky/bin/disks-sample.sh} + ${texeci 900 ~/.config/conky/bin/cache-sample.sh} + ${texeci 1800 ~/.config/conky/bin/pubip-sample.sh} + ${texeci 900 ~/.config/conky/bin/slackware-sample.sh} + ${texeci 300 ~/.config/conky/bin/calendar-sample.sh} + ${texeci 1800 ~/.config/conky/bin/immich-fetch.sh} + ${texeci 600 ~/.config/conky/bin/updates-sample.sh} The disks sampler runs once a minute; the cache, Slackware and public-IP samplers run every 15, 15 and 30 minutes respectively, because `du -sh -- cgit v1.2.3