From 891fce62364704b7fc05bfe723a3619297b5b9e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 13 Jan 2022 12:08:20 +0100 Subject: [PATCH] config: convert tweak.render_timer to an enum --- config.c | 22 +++++++--------------- config.h | 8 ++++++-- render.c | 24 ++++++++++++++++++++---- wayland.c | 10 +++++++++- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/config.c b/config.c index ae215334..94ac58d0 100644 --- a/config.c +++ b/config.c @@ -2257,20 +2257,13 @@ parse_section_tweak(struct context *ctx) } else if (strcmp(key, "render-timer") == 0) { - int mode; + _Static_assert(sizeof(conf->tweak.render_timer) == sizeof(int), + "enum is not 32-bit"); - if (!value_to_enum( - ctx, - (const char *[]){"none", "osd", "log", "both", NULL}, - &mode)) - { - return false; - } - - xassert(0 <= mode && mode <= 3); - conf->tweak.render_timer_osd = mode == 1 || mode == 3; - conf->tweak.render_timer_log = mode == 2 || mode == 3; - return true; + return value_to_enum( + ctx, + (const char *[]){"none", "osd", "log", "both", NULL}, + (int *)&conf->tweak.render_timer); } else if (strcmp(key, "delayed-render-lower") == 0) { @@ -2820,8 +2813,7 @@ config_load(struct config *conf, const char *conf_path, .delayed_render_lower_ns = 500000, /* 0.5ms */ .delayed_render_upper_ns = 16666666 / 2, /* half a frame period (60Hz) */ .max_shm_pool_size = 512 * 1024 * 1024, - .render_timer_osd = false, - .render_timer_log = false, + .render_timer = RENDER_TIMER_NONE, .damage_whole_window = false, .box_drawing_base_thickness = 0.04, .box_drawing_solid_shades = true, diff --git a/config.h b/config.h index 84aee3ae..12e95e58 100644 --- a/config.h +++ b/config.h @@ -274,8 +274,12 @@ struct config { GRAPHEME_WIDTH_DOUBLE, GRAPHEME_WIDTH_MAX, } grapheme_width_method; - bool render_timer_osd; - bool render_timer_log; + enum { + RENDER_TIMER_NONE, + RENDER_TIMER_OSD, + RENDER_TIMER_LOG, + RENDER_TIMER_BOTH + } render_timer; bool damage_whole_window; uint32_t delayed_render_lower_ns; uint32_t delayed_render_upper_ns; diff --git a/render.c b/render.c index 23cb4dab..4288f395 100644 --- a/render.c +++ b/render.c @@ -2469,7 +2469,8 @@ grid_render(struct terminal *term) return; struct timeval start_time, start_double_buffering = {0}, stop_double_buffering = {0}; - if (term->conf->tweak.render_timer_osd || term->conf->tweak.render_timer_log) + + if (term->conf->tweak.render_timer != RENDER_TIMER_NONE) gettimeofday(&start_time, NULL); xassert(term->width > 0); @@ -2731,7 +2732,7 @@ grid_render(struct terminal *term) render_scrollback_position(term); - if (term->conf->tweak.render_timer_osd || term->conf->tweak.render_timer_log) { + if (term->conf->tweak.render_timer != RENDER_TIMER_NONE) { struct timeval end_time; gettimeofday(&end_time, NULL); @@ -2741,17 +2742,32 @@ grid_render(struct terminal *term) struct timeval double_buffering_time; timersub(&stop_double_buffering, &start_double_buffering, &double_buffering_time); - if (term->conf->tweak.render_timer_log) { + switch (term->conf->tweak.render_timer) { + case RENDER_TIMER_LOG: + case RENDER_TIMER_BOTH: LOG_INFO("frame rendered in %llds %lld µs " "(%llds %lld µs double buffering)", (long long)render_time.tv_sec, (long long)render_time.tv_usec, (long long)double_buffering_time.tv_sec, (long long)double_buffering_time.tv_usec); + break; + + case RENDER_TIMER_OSD: + case RENDER_TIMER_NONE: + break; } - if (term->conf->tweak.render_timer_osd) + switch (term->conf->tweak.render_timer) { + case RENDER_TIMER_OSD: + case RENDER_TIMER_BOTH: render_render_timer(term, render_time); + break; + + case RENDER_TIMER_LOG: + case RENDER_TIMER_NONE: + break; + } } xassert(term->grid->offset >= 0 && term->grid->offset < term->grid->num_rows); diff --git a/wayland.c b/wayland.c index d58fdc40..12e3f5b3 100644 --- a/wayland.c +++ b/wayland.c @@ -1495,12 +1495,20 @@ wayl_win_init(struct terminal *term, const char *token) xdg_activation_v1_activate(wayl->xdg_activation, token, win->surface); #endif - if (conf->tweak.render_timer_osd) { + switch (conf->tweak.render_timer) { + case RENDER_TIMER_OSD: + case RENDER_TIMER_BOTH: if (!wayl_win_subsurface_new(win, &win->render_timer)) { LOG_ERR("failed to create render timer surface"); goto out; } + break; + + case RENDER_TIMER_NONE: + case RENDER_TIMER_LOG: + break; } + return win; out: