compositor: Let the user know about the debug scopes available
[src/agl-compositor.git] / src / compositor.c
index 250c90c..ef06314 100644 (file)
@@ -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,10 +1786,12 @@ 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;
        int debug = 0;
+       bool list_debug_scopes = false;
        char *config_file = NULL;
        struct weston_log_context *log_ctx = NULL;
        struct weston_log_subscriber *logger;
@@ -1778,6 +1809,8 @@ 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 },
+               { WESTON_OPTION_STRING, "list-debug-scopes", 'L', &list_debug_scopes },
        };
 
        wl_list_init(&ivi.outputs);
@@ -1820,7 +1853,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);
@@ -1906,6 +1939,22 @@ int wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_da
        if (ivi_shell_init(&ivi) < 0)
                goto error_compositor;
 
+       if (list_debug_scopes) {
+               struct weston_log_scope *nscope = NULL;
+
+               weston_log("Printing available debug scopes:\n");
+
+               while ((nscope = weston_log_scopes_iterate(ivi.compositor, nscope))) {
+                       weston_log("\tscope name: %s, desc: %s",
+                                       weston_log_scope_get_name(nscope),
+                                       weston_log_scope_get_description(nscope));
+               }
+
+               weston_log("\n");
+
+               goto error_compositor;
+       }
+
        add_bindings(ivi.compositor);
 
        weston_compositor_flush_heads_changed(ivi.compositor);