From cea026b06a9073916b0c21d61cda0965e0bf3d82 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Thu, 4 May 2023 14:42:56 +0300 Subject: [PATCH] compositor: Add support for subscribing to libweston scopes This brings in support to pass, over the command line, debug scopes that can help out debug issues with HW with other components or with libweston itself. One particular importance is the drm-backend debug scope. Bug-AGL: SPEC-4593 Signed-off-by: Marius Vlad Change-Id: I7a182ffe0b2b9bfdeced184514283265bb17c607 --- src/compositor.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/compositor.c b/src/compositor.c index 250c90c..8df333d 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1742,6 +1742,35 @@ copy_command_line(int argc, char * const argv[]) return str; } +static void +weston_log_setup_scopes(struct weston_log_context *log_ctx, + struct weston_log_subscriber *subscriber, + const char *names) +{ + assert(log_ctx); + assert(subscriber); + + char *tokenize = strdup(names); + char *token = strtok(tokenize, ","); + while (token) { + weston_log_subscribe(log_ctx, subscriber, token); + token = strtok(NULL, ","); + } + free(tokenize); +} + +static void +weston_log_subscribe_to_scopes(struct weston_log_context *log_ctx, + struct weston_log_subscriber *logger, + const char *debug_scopes) +{ + if (logger && debug_scopes) + weston_log_setup_scopes(log_ctx, logger, debug_scopes); + else + weston_log_subscribe(log_ctx, logger, "log"); +} + + WL_EXPORT int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_data) { @@ -1757,6 +1786,7 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da char *log = NULL; char *modules = NULL; char *option_modules = NULL; + char *debug_scopes = NULL; int help = 0; int version = 0; int no_config = 0; @@ -1778,6 +1808,7 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da { WESTON_OPTION_BOOLEAN, "debug", 0, &debug }, { WESTON_OPTION_STRING, "config", 'c', &config_file }, { WESTON_OPTION_STRING, "modules", 0, &option_modules }, + { WESTON_OPTION_STRING, "debug-scopes", 'l', &debug_scopes }, }; wl_list_init(&ivi.outputs); @@ -1820,7 +1851,7 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da weston_log_set_handler(vlog, vlog_continue); logger = weston_log_subscriber_create_log(logfile); - weston_log_subscribe(log_ctx, logger, "log"); + weston_log_subscribe_to_scopes(log_ctx, logger, debug_scopes); weston_log("Command line: %s\n", cmdline); free(cmdline); -- 2.16.6