diff options
author | Marius Vlad <marius.vlad@collabora.com> | 2023-05-04 14:42:56 +0300 |
---|---|---|
committer | Marius Vlad <marius.vlad@collabora.com> | 2023-05-04 18:01:35 +0300 |
commit | cea026b06a9073916b0c21d61cda0965e0bf3d82 (patch) | |
tree | b9632ec983405b74f1557ca7171e5fdc63c813ee | |
parent | 0fef26d32431e7bea6413f886e79cd2c1d88eb7c (diff) |
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 <marius.vlad@collabora.com>
Change-Id: I7a182ffe0b2b9bfdeced184514283265bb17c607
-rw-r--r-- | src/compositor.c | 33 |
1 files changed, 32 insertions, 1 deletions
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); |