From: Rafael Antognolli Date: Fri, 6 Dec 2019 22:38:07 +0000 (-0800) Subject: vulkan/overlay: Add a control socket. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e87d7fea8a5554b29f3f5a6d57af5ce0136073e1;p=mesa.git vulkan/overlay: Add a control socket. v2: Use a socket instead of named pipe. Reviewed-by: Lionel Landwerlin --- diff --git a/src/vulkan/overlay-layer/overlay.cpp b/src/vulkan/overlay-layer/overlay.cpp index 652478407e7..f1cfb172b19 100644 --- a/src/vulkan/overlay-layer/overlay.cpp +++ b/src/vulkan/overlay-layer/overlay.cpp @@ -37,6 +37,7 @@ #include "util/list.h" #include "util/ralloc.h" #include "util/os_time.h" +#include "util/os_socket.h" #include "util/simple_mtx.h" #include "vk_enum_to_str.h" @@ -320,6 +321,8 @@ static void destroy_instance_data(struct instance_data *data) { if (data->params.output_file) fclose(data->params.output_file); + if (data->params.control >= 0) + os_socket_close(data->params.control); unmap_object(HKEY(data->instance)); ralloc_free(data); } diff --git a/src/vulkan/overlay-layer/overlay_params.c b/src/vulkan/overlay-layer/overlay_params.c index 2a09b6cf081..afc17ec07a9 100644 --- a/src/vulkan/overlay-layer/overlay_params.c +++ b/src/vulkan/overlay-layer/overlay_params.c @@ -24,9 +24,13 @@ #include #include #include +#include +#include #include "overlay_params.h" +#include "util/os_socket.h" + static enum overlay_param_position parse_position(const char *str) { @@ -47,6 +51,21 @@ parse_output_file(const char *str) return fopen(str, "w+"); } +static int +parse_control(const char *str) +{ + int ret = os_socket_listen_abstract(str, 1); + if (ret < 0) { + fprintf(stderr, "ERROR: Couldn't create socket pipe at '%s'\n", str); + fprintf(stderr, "ERROR: '%s'\n", strerror(errno)); + return ret; + } + + os_socket_block(ret, false); + + return ret; +} + static uint32_t parse_fps_sampling_period(const char *str) { @@ -148,6 +167,7 @@ parse_overlay_env(struct overlay_params *params, params->enabled[OVERLAY_PARAM_ENABLED_frame_timing] = true; params->fps_sampling_period = 500000; /* 500ms */ params->width = params->height = 300; + params->control = -1; if (!env) return; diff --git a/src/vulkan/overlay-layer/overlay_params.h b/src/vulkan/overlay-layer/overlay_params.h index a145dd42934..7ff092daeff 100644 --- a/src/vulkan/overlay-layer/overlay_params.h +++ b/src/vulkan/overlay-layer/overlay_params.h @@ -69,6 +69,7 @@ extern "C" { OVERLAY_PARAM_CUSTOM(width) \ OVERLAY_PARAM_CUSTOM(height) \ OVERLAY_PARAM_CUSTOM(no_display) \ + OVERLAY_PARAM_CUSTOM(control) \ OVERLAY_PARAM_CUSTOM(help) enum overlay_param_position { @@ -91,6 +92,7 @@ struct overlay_params { bool enabled[OVERLAY_PARAM_ENABLED_MAX]; enum overlay_param_position position; FILE *output_file; + int control; uint32_t fps_sampling_period; /* us */ bool help; bool no_display;