idrawbar: Don't expend effort drawing bar if it is occluded - dwm - dynamic window manager Err parazyd.org 70 hgit clone https://git.parazyd.org/dwm URL:https://git.parazyd.org/dwm parazyd.org 70 1Log /git/dwm/log.gph parazyd.org 70 1Files /git/dwm/files.gph parazyd.org 70 1Refs /git/dwm/refs.gph parazyd.org 70 1README /git/dwm/file/README.gph parazyd.org 70 1LICENSE /git/dwm/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 8657affa2a61e85ca8df76b62e43cb02897d1d80 /git/dwm/commit/8657affa2a61e85ca8df76b62e43cb02897d1d80.gph parazyd.org 70 1parent a786211d6cb794fba0ea406d86002c7618998afc /git/dwm/commit/a786211d6cb794fba0ea406d86002c7618998afc.gph parazyd.org 70 hAuthor: Chris Down URL:mailto:chris@chrisdown.name parazyd.org 70 iDate: Sat, 18 Dec 2021 16:58:23 +0000 Err parazyd.org 70 i Err parazyd.org 70 idrawbar: Don't expend effort drawing bar if it is occluded Err parazyd.org 70 i Err parazyd.org 70 iI noticed that a non-trivial amount of dwm's work on my machine was from Err parazyd.org 70 idrw_text, which seemed weird, because I have the bar disabled and we Err parazyd.org 70 ionly use drw_text as part of bar drawing. Err parazyd.org 70 i Err parazyd.org 70 iLooking more closely, I realised that while we use m->showbar when Err parazyd.org 70 iupdating the monitor bar margins, but don't skip actually drawing the Err parazyd.org 70 ibar if it is hidden. This patch skips drawing it entirely if that is the Err parazyd.org 70 icase. Err parazyd.org 70 i Err parazyd.org 70 iOn my machine, this takes 10% of dwm's on-CPU time, primarily from Err parazyd.org 70 irestack() and focus(). Err parazyd.org 70 i Err parazyd.org 70 iWhen the bar is toggled on again, the X server will generate an Expose Err parazyd.org 70 ievent, and we'll redraw the bar as normal as part of expose(). Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M dwm.c | 3 +++ Err parazyd.org 70 i Err parazyd.org 70 i1 file changed, 3 insertions(+), 0 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/dwm.c b/dwm.c /git/dwm/file/dwm.c.gph parazyd.org 70 i@@ -702,6 +702,9 @@ drawbar(Monitor *m) Err parazyd.org 70 i unsigned int i, occ = 0, urg = 0; Err parazyd.org 70 i Client *c; Err parazyd.org 70 i Err parazyd.org 70 i+ if (!m->showbar) Err parazyd.org 70 i+ return; Err parazyd.org 70 i+ Err parazyd.org 70 i /* draw status first so it can be overdrawn by tags later */ Err parazyd.org 70 i if (m == selmon) { /* status is only drawn on selected monitor */ Err parazyd.org 70 i drw_setscheme(drw, scheme[SchemeNorm]); Err parazyd.org 70 .