mirror of
https://github.com/swaywm/sway.git
synced 2026-04-21 06:46:22 -04:00
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.
30 lines
868 B
C
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;
|
|
}
|