From 2765aed2b8ed6b7c5f898eeeddac5330e37f722d Mon Sep 17 00:00:00 2001 From: Jente Hidskes Date: Fri, 25 Jan 2019 15:36:04 +0100 Subject: [PATCH] Put damage tracking debugging behind a flag --- cage.c | 42 +++++++++++++++++++++++++++++++++++++++--- output.c | 9 ++++++--- server.h | 4 ++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/cage.c b/cage.c index 7214bb5..e2c4709 100644 --- a/cage.c +++ b/cage.c @@ -10,6 +10,7 @@ #include "config.h" +#include #include #include #include @@ -97,6 +98,42 @@ handle_signal(int signal, void *data) } } +static void +usage(FILE *file, const char *cage) +{ + fprintf(file, "Usage: %s APPLICATION\n" + "\n" + " -D\t Turn on damage tracking debugging\n" + " -h\t Display this help message\n", + cage); +} + +static bool +parse_args(struct cg_server *server, int argc, char *argv[]) +{ + int c; + while ((c = getopt(argc, argv, "hD")) != -1) { + switch (c) { + case 'D': + server->debug_damage_tracking = true; + break; + case 'h': + usage(stdout, argv[0]); + return false; + default: + usage(stderr, argv[0]); + return false; + } + } + + if (optind == 0) { + usage(stderr, argv[0]); + return false; + } + + return true; +} + int main(int argc, char *argv[]) { @@ -112,8 +149,7 @@ main(int argc, char *argv[]) #endif int ret = 0; - if (argc < 2) { - printf("Usage: %s APPLICATION\n", argv[0]); + if (!parse_args(&server, argc, argv)) { return 1; } @@ -259,7 +295,7 @@ main(int argc, char *argv[]) #endif pid_t pid; - if (!spawn_primary_client(argv + 1, &pid)) { + if (!spawn_primary_client(argv + optind, &pid)) { ret = 1; goto end; } diff --git a/output.c b/output.c index eba43d2..82f024b 100644 --- a/output.c +++ b/output.c @@ -219,8 +219,9 @@ handle_output_damage_frame(struct wl_listener *listener, void *data) } #ifdef DEBUG - // TODO: guard this behind a flag. - wlr_renderer_clear(renderer, (float[]){1, 0, 0, 1}); + if (output->server->debug_damage_tracking) { + wlr_renderer_clear(renderer, (float[]){1, 0, 0, 1}); + } #endif float color[4] = {0.3, 0.3, 0.3, 1.0}; @@ -255,7 +256,9 @@ handle_output_damage_frame(struct wl_listener *listener, void *data) wlr_renderer_end(renderer); #ifdef DEBUG - pixman_region32_union_rect(&damage, &damage, 0, 0, output_width, output_height); + if (output->server->debug_damage_tracking) { + pixman_region32_union_rect(&damage, &damage, 0, 0, output_width, output_height); + } #endif enum wl_output_transform transform = wlr_output_transform_invert(output->wlr_output->transform); diff --git a/server.h b/server.h index f554294..6975f92 100644 --- a/server.h +++ b/server.h @@ -36,6 +36,10 @@ struct cg_server { #if CAGE_HAS_XWAYLAND struct wl_listener new_xwayland_surface; #endif + +#ifdef DEBUG + bool debug_damage_tracking; +#endif }; void set_window_title(struct cg_server *server, struct cg_view *view);