summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Down <chris@chrisdown.name>2021-12-18 16:58:23 +0000
committerrafa_99 <raroma09@gmail.com>2022-01-07 17:16:17 +0000
commitc02b5cf047e529fcd1969f1bda7a0a5b057fdfe7 (patch)
tree71a65893705bfbab415065300674aa2595555065
parent6ac17a5ead5c7b2bf7ff5a974efba17eda0a0135 (diff)
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().
-rw-r--r--dwm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/dwm.c b/dwm.c
index cc95b37..3c319a5 100644
--- a/dwm.c
+++ b/dwm.c
@@ -792,6 +792,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]);