summaryrefslogtreecommitdiffstats
path: root/src/vulkan
diff options
context:
space:
mode:
authorRafael Antognolli <[email protected]>2019-12-06 14:38:07 -0800
committerRafael Antognolli <[email protected]>2019-12-13 20:53:44 +0000
commite87d7fea8a5554b29f3f5a6d57af5ce0136073e1 (patch)
tree5917df0b481ffdac35e10a2a2a2a9bb7d7ac797b /src/vulkan
parentef5266ebd50e7fa65c56bdb623e12ca8c233b470 (diff)
vulkan/overlay: Add a control socket.
v2: Use a socket instead of named pipe. Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/vulkan')
-rw-r--r--src/vulkan/overlay-layer/overlay.cpp3
-rw-r--r--src/vulkan/overlay-layer/overlay_params.c20
-rw-r--r--src/vulkan/overlay-layer/overlay_params.h2
3 files changed, 25 insertions, 0 deletions
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 <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
#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;