mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-05 07:15:30 -04:00
config: convert tweak.render_timer to an enum
This commit is contained in:
parent
69ec74a605
commit
891fce6236
4 changed files with 42 additions and 22 deletions
22
config.c
22
config.c
|
|
@ -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,
|
||||||
|
|
|
||||||
8
config.h
8
config.h
|
|
@ -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;
|
||||||
|
|
|
||||||
24
render.c
24
render.c
|
|
@ -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);
|
||||||
|
|
|
||||||
10
wayland.c
10
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);
|
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:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue