sway/sway/commands/output/max_render_time.c
Kenny Levinsen fda1a81cf0 Add support for max_render_time auto
Output max_render_time allows configuring how many milliseconds before
the next pageflip that composition should start, which differs from the
normal strategy of just rendering right after the previous pageflip.

max_render_time auto tracks render timings per output and adjusts
max_render_time at runtime, balancing latency and headroom based on the
currently observed performance.

The algorithm and numbers chosen in this commit are mostly arbitrary,
intended to later be optimized and tuned.
2026-03-07 14:00:06 +01:00

30 lines
868 B
C

#include <strings.h>
#include "sway/commands.h"
#include "sway/config.h"
struct cmd_results *output_cmd_max_render_time(int argc, char **argv) {
if (!config->handler_context.output_config) {
return cmd_results_new(CMD_FAILURE, "Missing output config");
}
if (!argc) {
return cmd_results_new(CMD_INVALID, "Missing max render time argument.");
}
int max_render_time;
if (!strcmp(*argv, "off")) {
max_render_time = 0;
} else if (!strcmp(*argv, "auto")) {
max_render_time = -2;
} else {
char *end;
max_render_time = strtol(*argv, &end, 10);
if (*end || max_render_time <= 0) {
return cmd_results_new(CMD_INVALID, "Invalid max render time.");
}
}
config->handler_context.output_config->max_render_time = max_render_time;
config->handler_context.leftovers.argc = argc - 1;
config->handler_context.leftovers.argv = argv + 1;
return NULL;
}