[PATCH weston v5 05/14] clients: add weston-debug

Pekka Paalanen ppaalanen at gmail.com
Mon Aug 6 10:50:40 UTC 2018


On Fri, 20 Jul 2018 20:03:26 +0100
Daniel Stone <daniels at collabora.com> wrote:

> From: Pekka Paalanen <pq at iki.fi>
> 
> A tool for accessing the zcompositor_debug_v1 interface features.
> 
> Installed along weston-info, because it should be potentially useful for
> people running libweston-based compositors.
> 
> Signed-off-by: Pekka Paalanen <pq at iki.fi>
> 
> Added a man page for weston-debug client
> 
> Signed-off-by: Maniraj Devadoss <Maniraj.Devadoss at in.bosch.com>
> [Pekka: fixed 'missing braces aroudn initializer' warning]
> 
> Add --list and --all arguments, using interface advertisement.
> 
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
>  Makefile.am            |  16 +-
>  clients/weston-debug.c | 453 +++++++++++++++++++++++++++++++++++++++++
>  man/weston-debug.man   |  46 +++++
>  3 files changed, 513 insertions(+), 2 deletions(-)
>  create mode 100644 clients/weston-debug.c
>  create mode 100644 man/weston-debug.man

...

> diff --git a/clients/weston-debug.c b/clients/weston-debug.c
> new file mode 100644
> index 000000000..59dacd269
> --- /dev/null
> +++ b/clients/weston-debug.c
> @@ -0,0 +1,453 @@
> +/*
> + * Copyright © 2017 Pekka Paalanen <pq at iki.fi>
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining
> + * a copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sublicense, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial
> + * portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + */
> +
> +#include "config.h"
> +
> +#include <errno.h>
> +#include <stdbool.h>
> +#include <stdint.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <unistd.h>
> +#include <getopt.h>
> +#include <assert.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +
> +#include <wayland-client.h>
> +
> +#include "shared/helpers.h"
> +#include "shared/zalloc.h"
> +#include "weston-debug-client-protocol.h"
> +
> +struct debug_app {
> +	struct {
> +		bool help;
> +		bool list;
> +		bool bind_all;
> +		char *output;
> +		char *outfd;
> +	} opt;
> +
> +	int out_fd;
> +	struct wl_display *dpy;
> +	struct wl_registry *registry;
> +	struct weston_debug_v1 *debug_iface;
> +	struct wl_list stream_list;
> +};
> +
> +struct debug_stream {
> +	struct wl_list link;
> +	bool should_bind;
> +	char *name;
> +	struct weston_debug_stream_v1 *obj;
> +};

...

> +static void
> +debug_advertise(void *data, struct weston_debug_v1 *debug, const char *name)
> +{
> +	struct debug_app *app = data;

Add empty line.

> +	(void) stream_find(app, name);
> +}
> +
> +static const struct weston_debug_v1_listener debug_listener = {
> +	debug_advertise,
> +};

...

> +static int
> +parse_cmdline(struct debug_app *app, int argc, char **argv)
> +{
> +	static const struct option opts[] = {
> +		{ "help", no_argument, NULL, 'h' },
> +		{ "list", no_argument, NULL, 'l' },
> +		{ "all-streams", no_argument, NULL, 'a' },
> +		{ "output", required_argument, NULL, 'o' },
> +		{ "outfd", required_argument, NULL, 'f' },
> +		{ 0 }
> +	};
> +	static const char optstr[] = "hlao:f:";
> +	int c;
> +	bool failed = false;
> +
> +	while (1) {
> +		c = getopt_long(argc, argv, optstr, opts, NULL);
> +		if (c == -1)
> +			break;
> +
> +		switch (c) {
> +		case 'h':
> +			app->opt.help = true;
> +			break;
> +		case 'l':
> +			app->opt.list = true;
> +			break;
> +		case 'a':
> +			app->opt.bind_all = true;
> +			break;
> +		case 'o':
> +			free(app->opt.output);
> +			app->opt.output = strdup(optarg);
> +			break;
> +		case 'f':
> +			free(app->opt.outfd);
> +			app->opt.outfd = strdup(optarg);
> +			break;
> +		case '?':
> +			failed = true;
> +			break;
> +		default:
> +			fprintf(stderr, "huh? getopt => %c (%d)\n", c, c);
> +			failed = true;
> +		}
> +	}
> +
> +	if (failed)
> +		return -1;
> +
> +	while (optind < argc) {
> +		struct debug_stream *stream = stream_alloc(app, argv[optind++]);

Add empty line.

> +		stream->should_bind = true;
> +	}
> +
> +	return 0;
> +}


When I tried the tool, I found this example:

$ weston-debug --list akjdakjdhask
Available debug streams:
    akjdakjdhask [will bind]
    scene-graph [will not bind]
    log [will not bind]
    proto [will not bind]
    xwm-wm-x11 [will not bind]
Debug stream 'akjdakjdhask' aborted: Debug stream name 'akjdakjdhask' is unknown.

It is confusing to see 'akjdakjdhask' listed as available and then said
to be unknown.


> diff --git a/man/weston-debug.man b/man/weston-debug.man
> new file mode 100644
> index 000000000..3a6a17617
> --- /dev/null
> +++ b/man/weston-debug.man
> @@ -0,0 +1,46 @@
> +.TH WESTON-DEBUG 1 "2017-08-02" "Weston __version__"
> +.SH NAME
> +weston-debug \- a tool for getting debug messages from compositor.
> +.SH SYNOPSIS
> +.B weston-debug [options] [names]
> +.
> +.\" ***************************************************************
> +.SH DESCRIPTION
> +
> +.B weston-debug
> +is a debugging tool which uses weston_debug_v1 interface to get the
> +debug messages from the compositor. The debug messages are categorized into different
> +debug streams by the compositor (example: logs, proto, list, etc.,) and the compositor
> +requires a file descriptor to stream the messages.
> +
> +This tool accepts a file name or a file desciptor (not both) and any desired debug stream
> +names from the user as command line arguments and subscribes the desired streams from the
> +compositor by using the zcompositor_debug_v1 interface. After the subscription, the

It is called weston_debug_v1 in this iteration.


> +compositor will start to write the debug messages to the shared file descriptor.
> +
> +If no file name or file descriptor argument is given, the tool will use the stdout file
> +descriptor. If no debug stream name argument is given, the tool will use the the name "list"
> +which results the names of all the supported debug streams by the compositor.

There is no stream named "list" in the compositor anymore.

> +
> +.
> +.\" ***************************************************************
> +.SH OPTIONS
> +.
> +.B weston-debug
> +accepts the following command line options.
> +.TP
> +. B \-h, \-\-help
> +Print the help text and exit with success.

--list and --all-streams arguments missing.

> +.TP
> +. B \-o FILE, \-\-output FILE
> +Direct output to file named FILE. Use - for stdout.
> +Stdout is the default. Mutually exclusive with -f.
> +.TP
> +. B \-f FD, \-\-outfd FD
> +Direct output to the file descriptor FD.
> +Stdout (1) is the default. Mutually exclusive with -o.
> +.TP
> +.B [names]
> +Names are whatever debug stream names the compositor supports. If none
> +are given, the name "list" is used, to which the compositor should reply
> +with a list of all supported names.

In the code, if no options are given, the tool now exits without
printing anything. How about defaulting to the --list behaviour?

Not sure how understandable the "[will not bind]" messages are when one
simply does 'weston-debug --list'. It sounds a bit like "it's there but
you can't have it". Maybe make it: bind ? " [subscribed]" : "".


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180806/1a55a8a4/attachment.sig>


More information about the wayland-devel mailing list