summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2023-05-04 14:42:56 +0300
committerMarius Vlad <marius.vlad@collabora.com>2023-05-04 18:01:35 +0300
commitcea026b06a9073916b0c21d61cda0965e0bf3d82 (patch)
treeb9632ec983405b74f1557ca7171e5fdc63c813ee
parent0fef26d32431e7bea6413f886e79cd2c1d88eb7c (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.c33
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);