From 052bf22dc6bebb84b3a3b0216ff8827146668a62 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sat, 16 Mar 2024 21:55:37 +0100 Subject: Reduce the number of redraw calls --- src/comet.c | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'src/comet.c') diff --git a/src/comet.c b/src/comet.c index 4341a14..b8cce7d 100644 --- a/src/comet.c +++ b/src/comet.c @@ -71,11 +71,15 @@ static gboolean cpu_update(Button *btn) char *perc = cpu_percentage(); // Don't update on error - if (perc != NULL) { - ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, perc, sbtn->text_color); + if (perc == NULL) + return G_SOURCE_CONTINUE; + + ButtonSimple *sbtn = CAST(btn, ButtonSimple); + bool update = g_strcmp0(perc, sbtn->text) != 0; + button_simple_set_text(btn, perc, sbtn->text_color); + + if (update) state_request_redraw(sbtn->data, false); - } return G_SOURCE_CONTINUE; } @@ -97,26 +101,35 @@ static gboolean ram_update(Button *btn) int usage = 100 * (total - unused - buffers - cached) / total; fclose(meminfo); + ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, g_strdup_printf(" %d%%", usage), sbtn->text_color); + char *ram = g_strdup_printf(" %d%%", usage); + bool update = g_strcmp0(ram, sbtn->text) != 0; + button_simple_set_text(btn, ram, sbtn->text_color); + + if (update) + state_request_redraw(sbtn->data, false); - state_request_redraw(sbtn->data, false); return G_SOURCE_CONTINUE; } static gboolean temp_update(Button *btn) { - FILE *temp = fopen("/sys/class/thermal/thermal_zone2/temp", "rb"); - g_assert_nonnull(temp); + FILE *thermal = fopen("/sys/class/thermal/thermal_zone2/temp", "rb"); + g_assert_nonnull(thermal); uintmax_t value; - g_assert(1 == fscanf(temp, "%ju\n", &value)); - fclose(temp); + g_assert(1 == fscanf(thermal, "%ju\n", &value)); + fclose(thermal); ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, g_strdup_printf(" %d °C", (int)(value / 1000)), sbtn->text_color); + char *temp = g_strdup_printf(" %d °C", (int)(value / 1000)); + bool update = g_strcmp0(temp, sbtn->text) != 0; + button_simple_set_text(btn, temp, sbtn->text_color); + + if (update) + state_request_redraw(sbtn->data, false); - state_request_redraw(sbtn->data, false); return G_SOURCE_CONTINUE; } @@ -127,9 +140,13 @@ static gboolean disk_update(Button *btn) const double used = 1.0 - ((double)buffer.f_bavail / (double)buffer.f_blocks); ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, g_strdup_printf(" %d%%", (int)round(used * 100.0)), sbtn->text_color); + char *disk = g_strdup_printf(" %d%%", (int)round(used * 100.0)); + bool update = g_strcmp0(disk, sbtn->text) != 0; + button_simple_set_text(btn, disk, sbtn->text_color); + + if (update) + state_request_redraw(sbtn->data, false); - state_request_redraw(sbtn->data, false); return G_SOURCE_CONTINUE; } -- cgit v1.2.3