drawbar: Don't expend effort drawing bar if it is occluded - dwm - dynamic wind… | |
git clone git://git.suckless.org/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 8657affa2a61e85ca8df76b62e43cb02897d1d80 | |
parent a786211d6cb794fba0ea406d86002c7618998afc | |
Author: Chris Down <[email protected]> | |
Date: Sat, 18 Dec 2021 16:58:23 +0000 | |
drawbar: Don't expend effort drawing bar if it is occluded | |
I noticed that a non-trivial amount of dwm's work on my machine was from | |
drw_text, which seemed weird, because I have the bar disabled and we | |
only use drw_text as part of bar drawing. | |
Looking more closely, I realised that while we use m->showbar when | |
updating the monitor bar margins, but don't skip actually drawing the | |
bar if it is hidden. This patch skips drawing it entirely if that is the | |
case. | |
On my machine, this takes 10% of dwm's on-CPU time, primarily from | |
restack() and focus(). | |
When the bar is toggled on again, the X server will generate an Expose | |
event, and we'll redraw the bar as normal as part of expose(). | |
Diffstat: | |
M dwm.c | 3 +++ | |
1 file changed, 3 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
@@ -702,6 +702,9 @@ drawbar(Monitor *m) | |
unsigned int i, occ = 0, urg = 0; | |
Client *c; | |
+ if (!m->showbar) | |
+ return; | |
+ | |
/* draw status first so it can be overdrawn by tags later */ | |
if (m == selmon) { /* status is only drawn on selected monitor */ | |
drw_setscheme(drw, scheme[SchemeNorm]); |