aboutsummaryrefslogtreecommitdiffstats
path: root/dashboard.lua
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-30 19:56:48 +0200
committerDanilo M. <danix@danix.xyz>2026-09-30 19:56:48 +0200
commit96ac1ee65da31055704e0a14cafacc33914d7e86 (patch)
tree8a8fa33ec27607f40d6d23661a89681ffbaa4456 /dashboard.lua
parente55896ce41d6165105671da5b6f33813106ef1b8 (diff)
downloadconky-theme-udt-96ac1ee65da31055704e0a14cafacc33914d7e86.tar.gz
conky-theme-udt-96ac1ee65da31055704e0a14cafacc33914d7e86.zip
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 <noreply@anthropic.com>
Diffstat (limited to 'dashboard.lua')
-rw-r--r--dashboard.lua17
1 files changed, 17 insertions, 0 deletions
diff --git a/dashboard.lua b/dashboard.lua
index 18ddf80..1db0b6e 100644
--- a/dashboard.lua
+++ b/dashboard.lua
@@ -168,6 +168,17 @@ local function draw(cr, sw, sh, colors)
end
end
+-- Draw rate follows visibility. The dashboard lives on a special workspace
+-- and is hidden most of the time, so it idles at the config's update_interval
+-- (2s) and draws at VISIBLE_INTERVAL while shown, which is what makes the wheel
+-- scroll live: conky has no way for Lua to request a single redraw.
+--
+-- Shown and hidden are the pointer entering and leaving the window, which
+-- Hyprland sends on every toggle of the workspace. The pointer is on the
+-- focused monitor, where the special workspace opens, so enter follows show.
+local VISIBLE_INTERVAL = 0.1
+local hidden_interval = nil
+
-- Pointer events, handed to the widget whose cell is under the pointer, if it
-- defines mouse(event, rect). Coordinates are window-relative, and the window
-- is the whole surface, so they index the same grid the draw uses.
@@ -175,6 +186,12 @@ end
-- Wrapped like the draw: a fault here must not take conky down. Returning true
-- tells conky the event was consumed.
function conky_mouse(event)
+ if event.type == 'mouse_enter' or event.type == 'mouse_leave' then
+ hidden_interval = hidden_interval or conky_info.update_interval
+ conky_set_update_interval(event.type == 'mouse_enter'
+ and VISIBLE_INTERVAL or hidden_interval)
+ return false
+ end
if conky_window == nil then return false end
local sw, sh = conky_window.width, conky_window.height
for _, entry in ipairs(layout) do