Fixing compiler warnings and removing control

pull/208/head
FlightlessMango 4 years ago
parent 59268a34b3
commit 135f3a5009

@ -11,7 +11,7 @@ using namespace std;
string os, cpu, gpu, ram, kernel, driver;
bool sysInfoFetched = false;
int gpuLoadLog = 0, cpuLoadLog = 0;
int64_t elapsedLog;
uint64_t elapsedLog;
struct logData{
double fps;

@ -520,204 +520,6 @@ struct overlay_draw *get_overlay_draw(struct swapchain_data *data)
return draw;
}
static void parse_command(struct instance_data *instance_data,
const char *cmd, unsigned cmdlen,
const char *param, unsigned paramlen)
{
if (!strncmp(cmd, "capture", cmdlen)) {
int value = atoi(param);
bool enabled = value > 0;
if (enabled) {
instance_data->capture_enabled = true;
} else {
instance_data->capture_enabled = false;
instance_data->capture_started = false;
}
}
}
#define BUFSIZE 4096
/**
* This function will process commands through the control file.
*
* A command starts with a colon, followed by the command, and followed by an
* option '=' and a parameter. It has to end with a semi-colon. A full command
* + parameter looks like:
*
* :cmd=param;
*/
static void process_char(struct instance_data *instance_data, char c)
{
static char cmd[BUFSIZE];
static char param[BUFSIZE];
static unsigned cmdpos = 0;
static unsigned parampos = 0;
static bool reading_cmd = false;
static bool reading_param = false;
switch (c) {
case ':':
cmdpos = 0;
parampos = 0;
reading_cmd = true;
reading_param = false;
break;
case ';':
if (!reading_cmd)
break;
cmd[cmdpos++] = '\0';
param[parampos++] = '\0';
parse_command(instance_data, cmd, cmdpos, param, parampos);
reading_cmd = false;
reading_param = false;
break;
case '=':
if (!reading_cmd)
break;
reading_param = true;
break;
default:
if (!reading_cmd)
break;
if (reading_param) {
/* overflow means an invalid parameter */
if (parampos >= BUFSIZE - 1) {
reading_cmd = false;
reading_param = false;
break;
}
param[parampos++] = c;
} else {
/* overflow means an invalid command */
if (cmdpos >= BUFSIZE - 1) {
reading_cmd = false;
break;
}
cmd[cmdpos++] = c;
}
}
}
static void control_send(struct instance_data *instance_data,
const char *cmd, unsigned cmdlen,
const char *param, unsigned paramlen)
{
unsigned msglen = 0;
char buffer[BUFSIZE];
assert(cmdlen + paramlen + 3 < BUFSIZE);
buffer[msglen++] = ':';
memcpy(&buffer[msglen], cmd, cmdlen);
msglen += cmdlen;
if (paramlen > 0) {
buffer[msglen++] = '=';
memcpy(&buffer[msglen], param, paramlen);
msglen += paramlen;
buffer[msglen++] = ';';
}
os_socket_send(instance_data->control_client, buffer, msglen, 0);
}
static void control_send_connection_string(struct device_data *device_data)
{
struct instance_data *instance_data = device_data->instance;
const char *controlVersionCmd = "MesaOverlayControlVersion";
const char *controlVersionString = "1";
control_send(instance_data, controlVersionCmd, strlen(controlVersionCmd),
controlVersionString, strlen(controlVersionString));
const char *deviceCmd = "DeviceName";
const char *deviceName = device_data->properties.deviceName;
control_send(instance_data, deviceCmd, strlen(deviceCmd),
deviceName, strlen(deviceName));
const char *mesaVersionCmd = "MesaVersion";
const char *mesaVersionString = "Mesa " PACKAGE_VERSION;
control_send(instance_data, mesaVersionCmd, strlen(mesaVersionCmd),
mesaVersionString, strlen(mesaVersionString));
}
static void control_client_check(struct device_data *device_data)
{
struct instance_data *instance_data = device_data->instance;
/* Already connected, just return. */
if (instance_data->control_client >= 0)
return;
int socket = os_socket_accept(instance_data->params.control);
if (socket == -1) {
if (errno != EAGAIN && errno != EWOULDBLOCK && errno != ECONNABORTED)
fprintf(stderr, "ERROR on socket: %s\n", strerror(errno));
return;
}
if (socket >= 0) {
os_socket_block(socket, false);
instance_data->control_client = socket;
control_send_connection_string(device_data);
}
}
static void control_client_disconnected(struct instance_data *instance_data)
{
os_socket_close(instance_data->control_client);
instance_data->control_client = -1;
}
static void process_control_socket(struct instance_data *instance_data)
{
const int client = instance_data->control_client;
if (client >= 0) {
char buf[BUFSIZE];
while (true) {
ssize_t n = os_socket_recv(client, buf, BUFSIZE, 0);
if (n == -1) {
if (errno == EAGAIN || errno == EWOULDBLOCK) {
/* nothing to read, try again later */
break;
}
if (errno != ECONNRESET)
fprintf(stderr, "ERROR on connection: %s\n", strerror(errno));
control_client_disconnected(instance_data);
} else if (n == 0) {
/* recv() returns 0 when the client disconnects */
control_client_disconnected(instance_data);
}
for (ssize_t i = 0; i < n; i++) {
process_char(instance_data, buf[i]);
}
/* If we try to read BUFSIZE and receive BUFSIZE bytes from the
* socket, there's a good chance that there's still more data to be
* read, so we will try again. Otherwise, simply be done for this
* iteration and try again on the next frame.
*/
if (n < BUFSIZE)
break;
}
}
}
string exec(string command) {
char buffer[128];
string result = "";
@ -1255,7 +1057,6 @@ void render_benchmark(swapchain_stats& data, struct overlay_params& params, ImVe
ImGui::TextColored(ImVec4(1.0, 1.0, 1.0, alpha / params.background_alpha), "%s %.1f", data_.first.c_str(), data_.second);
}
float max = *max_element(benchmark.fps_data.begin(), benchmark.fps_data.end());
ImGuiStyle& style = ImGui::GetStyle();
ImVec4 plotColor = ImGui::ColorConvertU32ToFloat4(params.frametime_color);
plotColor.w = alpha;
ImGui::PushStyleColor(ImGuiCol_PlotLines, plotColor);
@ -1275,7 +1076,6 @@ void render_imgui(swapchain_stats& data, struct overlay_params& params, ImVec2&
uint64_t frame_timing = data.frames_stats[f_idx].stats[OVERLAY_PLOTS_frame_timing];
static float char_width = ImGui::CalcTextSize("A").x;
window_size = ImVec2(params.width, params.height);
unsigned width = ImGui::GetIO().DisplaySize.x;
unsigned height = ImGui::GetIO().DisplaySize.y;
uint64_t now = os_time_get();

@ -126,7 +126,7 @@ struct overlay_params {
int offset_x, offset_y;
unsigned vsync;
int gl_vsync;
int log_duration;
uint64_t log_duration;
unsigned cpu_color, gpu_color, vram_color, ram_color, engine_color, io_color, frametime_color, background_color, text_color;
unsigned media_player_color;
unsigned tableCols;

Loading…
Cancel
Save