[PATCH weston v5 02/14] protocol: add weston-debug.xml
Daniel Stone
daniels at collabora.com
Fri Jul 20 19:03:23 UTC 2018
From: Pekka Paalanen <pq at iki.fi>
This is a new debugging extension for non-production environments. The
aim is to replace all build-time choosable debug prints in the
compositor with runtime subscribable debug streams.
Signed-off-by: Pekka Paalanen <pq at iki.fi>
Added new libweston-$MAJOR-protocols.pc file and install that
for external projects to find the XML files installed by libweston.
Signed-off-by: Maniraj Devadoss <Maniraj.Devadoss at in.bosch.com>
Use noarch_pkgconfig_DATA instead, add ${pc_sysrootdir}, drop
unnecessary EXTRA_DIST of weston-debug.xml.
Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
Add explicit advertisement of available debug interfaces.
Signed-off-by: Daniel Stone <daniels at collabora.com>
---
Makefile.am | 10 ++
configure.ac | 1 +
libweston/libweston-protocols.pc.in | 7 ++
protocol/weston-debug.xml | 136 ++++++++++++++++++++++++++++
4 files changed, 154 insertions(+)
create mode 100644 libweston/libweston-protocols.pc.in
create mode 100644 protocol/weston-debug.xml
diff --git a/Makefile.am b/Makefile.am
index 3bce47a11..66eb365c5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -106,6 +106,10 @@ libweston_ at LIBWESTON_MAJOR@_la_SOURCES = \
shared/platform.h \
shared/weston-egl-ext.h
+libweston_ at LIBWESTON_MAJOR@_datadir = $(datadir)/weston/protocols
+dist_libweston_ at LIBWESTON_MAJOR@_data_DATA = \
+ protocol/weston-debug.xml
+
lib_LTLIBRARIES += libweston-desktop- at LIBWESTON_MAJOR@.la
libweston_desktop_ at LIBWESTON_MAJOR@_la_CPPFLAGS = $(AM_CPPFLAGS) -DIN_WESTON
libweston_desktop_ at LIBWESTON_MAJOR@_la_CFLAGS = $(AM_CFLAGS) $(COMPOSITOR_CFLAGS)
@@ -152,6 +156,8 @@ endif
nodist_libweston_ at LIBWESTON_MAJOR@_la_SOURCES = \
protocol/weston-screenshooter-protocol.c \
protocol/weston-screenshooter-server-protocol.h \
+ protocol/weston-debug-protocol.c \
+ protocol/weston-debug-server-protocol.h \
protocol/text-cursor-position-protocol.c \
protocol/text-cursor-position-server-protocol.h \
protocol/text-input-unstable-v1-protocol.c \
@@ -276,6 +282,10 @@ pkgconfig_DATA = \
libweston-desktop/libweston-desktop-${LIBWESTON_MAJOR}.pc \
compositor/weston.pc
+noarch_pkgconfigdir = $(datadir)/pkgconfig
+noarch_pkgconfig_DATA = \
+ libweston/libweston-${LIBWESTON_MAJOR}-protocols.pc
+
wayland_sessiondir = $(datadir)/wayland-sessions
dist_wayland_session_DATA = compositor/weston.desktop
diff --git a/configure.ac b/configure.ac
index 093d6b549..3a138ea91 100644
--- a/configure.ac
+++ b/configure.ac
@@ -695,6 +695,7 @@ AC_CONFIG_FILES([Makefile libweston/version.h compositor/weston.pc])
# libweston_abi_version here, and outside [] because of m4 quoting rules
AC_CONFIG_FILES([libweston/libweston-]libweston_major_version[.pc:libweston/libweston.pc.in])
AC_CONFIG_FILES([libweston/libweston-]libweston_major_version[-uninstalled.pc:libweston/libweston-uninstalled.pc.in])
+AC_CONFIG_FILES([libweston/libweston-]libweston_major_version[-protocols.pc:libweston/libweston-protocols.pc.in])
AC_CONFIG_FILES([libweston-desktop/libweston-desktop-]libweston_major_version[.pc:libweston-desktop/libweston-desktop.pc.in])
AC_CONFIG_FILES([libweston-desktop/libweston-desktop-]libweston_major_version[-uninstalled.pc:libweston-desktop/libweston-desktop-uninstalled.pc.in])
diff --git a/libweston/libweston-protocols.pc.in b/libweston/libweston-protocols.pc.in
new file mode 100644
index 000000000..6547a0d5a
--- /dev/null
+++ b/libweston/libweston-protocols.pc.in
@@ -0,0 +1,7 @@
+prefix=@prefix@
+datarootdir=@datarootdir@
+pkgdatadir=${pc_sysrootdir}@datadir@/@PACKAGE@/protocols
+
+Name: libWeston Protocols
+Description: libWeston protocol files
+Version: @WESTON_VERSION@
diff --git a/protocol/weston-debug.xml b/protocol/weston-debug.xml
new file mode 100644
index 000000000..1154c3ae2
--- /dev/null
+++ b/protocol/weston-debug.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="weston_debug">
+
+ <copyright>
+ 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.
+ </copyright>
+
+ <interface name="weston_debug_v1" version="1">
+ <description summary="weston internal debugging">
+ This is a generic debugging interface for Weston internals, the global
+ object advertized through wl_registry.
+
+ WARNING: This interface by design allows a denial-of-service attack. It
+ should not be offered in production, or proper authorization mechnisms
+ must be enforced.
+
+ The idea is for a client to provide a file descriptor that the server
+ uses for printing debug information. The server uses the file
+ descriptor in blocking writes mode, which exposes the denial-of-service
+ risk. The blocking mode is necessary to ensure all debug messages can
+ be easily printed in place. It also ensures message ordering if a
+ client subcribes to more than one debug stream.
+
+ The available debugging features depend on the server.
+
+ A debug stream can be one-shot where the server prints the requested
+ information and then closes it, or continuous where server keeps on
+ printing until the client stops it. Or anything in between.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy factory object">
+ Destroys the factory object, but does not affect any other objects.
+ </description>
+ </request>
+
+ <event name="available">
+ <description summary="advertise available debug scope">
+ Advertises an available debug scope which the client may be able to
+ bind to. No information is provided by the server about the content
+ contained within the debug streams provided by the scope, once a
+ client has subscribed.
+ </description>
+
+ <arg name="name" type="string" allow-null="false"
+ summary="debug stream name"/>
+ </event>
+
+ <request name="subscribe">
+ <description summary="subscribe to a debug stream">
+ Subscribe to a named debug stream. The server will start printing
+ to the given file descriptor.
+
+ If the named debug stream is a one-shot dump, the server will send
+ weston_debug_stream_v1.complete event once all requested data has
+ been printed. Otherwise, the server will continue streaming debug
+ prints until the subscription object is destroyed.
+
+ If the debug stream name is unknown to the server, the server will
+ immediately respond with weston_debug_stream_v1.failure event.
+ </description>
+
+ <arg name="name" type="string" allow-null="false"
+ summary="debug stream name"/>
+ <arg name="streamfd" type="fd" summary="write stream file descriptor"/>
+ <arg name="stream" type="new_id" interface="weston_debug_stream_v1"
+ summary="created debug stream object"/>
+ </request>
+ </interface>
+
+ <interface name="weston_debug_stream_v1" version="1">
+ <description summary="A subscribed debug stream">
+ Represents one subscribed debug stream, created with
+ weston_debug_v1.subscribe. When the object is created, it is associated
+ with a given file descriptor. The server will continue writing to the
+ file descriptor until the object is destroyed or the server sends an
+ event through the object.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="close a debug stream">
+ Destroys the object, which causes the server to stop writing into
+ and closes the associated file descriptor if it was not closed
+ already.
+
+ Use a wl_display.sync if the clients needs to guarantee the file
+ descriptor is closed before continuing.
+ </description>
+ </request>
+
+ <event name="complete">
+ <description summary="server completed the debug stream">
+ The server has successfully finished writing to and has closed the
+ associated file descriptor.
+
+ This event is delivered only for one-shot debug streams where the
+ server dumps some data and stop. This is never delivered for
+ continuous debbug streams because they by definition never complete.
+ </description>
+ </event>
+
+ <event name="failure">
+ <description summary="server cannot continue the debug stream">
+ The server has stopped writing to and has closed the
+ associated file descriptor. The data already written to the file
+ descriptor is correct, but it may be truncated.
+
+ This event may be delivered at any time and for any kind of debug
+ stream. It may be due to a failure in or shutdown of the server.
+ The message argument may provide a hint of the reason.
+ </description>
+
+ <arg name="message" type="string" allow-null="true"
+ summary="human readable reason"/>
+ </event>
+ </interface>
+</protocol>
--
2.17.1
More information about the wayland-devel
mailing list