config: convert tweak.render_timer to an enum

This commit is contained in:
Daniel Eklöf 2022-01-13 12:08:20 +01:00
parent 69ec74a605
commit 891fce6236
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 42 additions and 22 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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);

View file

@ -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: