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) { 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( return value_to_enum(
ctx, ctx,
(const char *[]){"none", "osd", "log", "both", NULL}, (const char *[]){"none", "osd", "log", "both", NULL},
&mode)) (int *)&conf->tweak.render_timer);
{
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;
} }
else if (strcmp(key, "delayed-render-lower") == 0) { 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_lower_ns = 500000, /* 0.5ms */
.delayed_render_upper_ns = 16666666 / 2, /* half a frame period (60Hz) */ .delayed_render_upper_ns = 16666666 / 2, /* half a frame period (60Hz) */
.max_shm_pool_size = 512 * 1024 * 1024, .max_shm_pool_size = 512 * 1024 * 1024,
.render_timer_osd = false, .render_timer = RENDER_TIMER_NONE,
.render_timer_log = false,
.damage_whole_window = false, .damage_whole_window = false,
.box_drawing_base_thickness = 0.04, .box_drawing_base_thickness = 0.04,
.box_drawing_solid_shades = true, .box_drawing_solid_shades = true,

View file

@ -274,8 +274,12 @@ struct config {
GRAPHEME_WIDTH_DOUBLE, GRAPHEME_WIDTH_DOUBLE,
GRAPHEME_WIDTH_MAX, GRAPHEME_WIDTH_MAX,
} grapheme_width_method; } grapheme_width_method;
bool render_timer_osd; enum {
bool render_timer_log; RENDER_TIMER_NONE,
RENDER_TIMER_OSD,
RENDER_TIMER_LOG,
RENDER_TIMER_BOTH
} render_timer;
bool damage_whole_window; bool damage_whole_window;
uint32_t delayed_render_lower_ns; uint32_t delayed_render_lower_ns;
uint32_t delayed_render_upper_ns; uint32_t delayed_render_upper_ns;

View file

@ -2469,7 +2469,8 @@ grid_render(struct terminal *term)
return; return;
struct timeval start_time, start_double_buffering = {0}, stop_double_buffering = {0}; 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); gettimeofday(&start_time, NULL);
xassert(term->width > 0); xassert(term->width > 0);
@ -2731,7 +2732,7 @@ grid_render(struct terminal *term)
render_scrollback_position(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; struct timeval end_time;
gettimeofday(&end_time, NULL); gettimeofday(&end_time, NULL);
@ -2741,17 +2742,32 @@ grid_render(struct terminal *term)
struct timeval double_buffering_time; struct timeval double_buffering_time;
timersub(&stop_double_buffering, &start_double_buffering, &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 " LOG_INFO("frame rendered in %llds %lld µs "
"(%llds %lld µs double buffering)", "(%llds %lld µs double buffering)",
(long long)render_time.tv_sec, (long long)render_time.tv_sec,
(long long)render_time.tv_usec, (long long)render_time.tv_usec,
(long long)double_buffering_time.tv_sec, (long long)double_buffering_time.tv_sec,
(long long)double_buffering_time.tv_usec); (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); 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); 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); xdg_activation_v1_activate(wayl->xdg_activation, token, win->surface);
#endif #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)) { if (!wayl_win_subsurface_new(win, &win->render_timer)) {
LOG_ERR("failed to create render timer surface"); LOG_ERR("failed to create render timer surface");
goto out; goto out;
} }
break;
case RENDER_TIMER_NONE:
case RENDER_TIMER_LOG:
break;
} }
return win; return win;
out: out: