[PATCH weston 7/7] protocol: migrate to stable presentation-time.xml

Pekka Paalanen ppaalanen at gmail.com
Mon Feb 22 13:34:46 UTC 2016


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

Remove the unstable presentation_timing.xml file, and use
presentation-time.xml from wayland-protocols instead to generate all the
Presentation extension bindings.

The following renames are done according to the XML changes:
- generated header includes
- enum constants and macros prefixed with WP_
- interface symbol names prefixed with wp_
- protocol API calls prefixed with wp_

Clients use wp_presentation_interface.name rather than hardcoding the
global interface name: presentation-shm, weston-info, presentation-test.

Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

---

Note: When landing this patch, check the wayland-protocols version that
released presentation-time, and fix the version dependency in
configure.ac.
---
 Makefile.am                      |  21 ++-
 clients/presentation-shm.c       |  65 +++++-----
 clients/weston-info.c            |  19 +--
 configure.ac                     |   1 +
 protocol/presentation_timing.xml | 274 ---------------------------------------
 src/compositor-drm.c             |  22 ++--
 src/compositor-fbdev.c           |   4 +-
 src/compositor-headless.c        |   4 +-
 src/compositor-rdp.c             |   2 +-
 src/compositor-rpi.c             |   8 +-
 src/compositor-wayland.c         |   2 +-
 src/compositor-x11.c             |   4 +-
 src/compositor.c                 |  32 ++---
 src/compositor.h                 |   2 +-
 tests/presentation-test.c        |  34 ++---
 15 files changed, 111 insertions(+), 383 deletions(-)
 delete mode 100644 protocol/presentation_timing.xml

diff --git a/Makefile.am b/Makefile.am
index 505d40a..fe08d94 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -121,8 +121,8 @@ nodist_weston_SOURCES =					\
 	protocol/text-input-unstable-v1-server-protocol.h		\
 	protocol/input-method-unstable-v1-protocol.c			\
 	protocol/input-method-unstable-v1-server-protocol.h		\
-	protocol/presentation_timing-protocol.c		\
-	protocol/presentation_timing-server-protocol.h	\
+	protocol/presentation-time-protocol.c		\
+	protocol/presentation-time-server-protocol.h	\
 	protocol/scaler-protocol.c			\
 	protocol/scaler-server-protocol.h		\
 	protocol/linux-dmabuf-unstable-v1-protocol.c	\
@@ -501,8 +501,8 @@ weston_presentation_shm_SOURCES = 			\
 	clients/presentation-shm.c			\
 	shared/helpers.h
 nodist_weston_presentation_shm_SOURCES =		\
-	protocol/presentation_timing-protocol.c		\
-	protocol/presentation_timing-client-protocol.h
+	protocol/presentation-time-protocol.c		\
+	protocol/presentation-time-client-protocol.h
 weston_presentation_shm_CFLAGS = $(AM_CFLAGS) $(SIMPLE_CLIENT_CFLAGS)
 weston_presentation_shm_LDADD = $(SIMPLE_CLIENT_LIBS) libshared.la -lm -lrt
 
@@ -721,8 +721,8 @@ weston_info_SOURCES = 					\
 	clients/weston-info.c				\
 	shared/helpers.h
 nodist_weston_info_SOURCES =				\
-	protocol/presentation_timing-protocol.c		\
-	protocol/presentation_timing-client-protocol.h
+	protocol/presentation-time-protocol.c		\
+	protocol/presentation-time-client-protocol.h
 weston_info_LDADD = $(WESTON_INFO_LIBS) libshared.la
 weston_info_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
 
@@ -770,8 +770,8 @@ BUILT_SOURCES +=					\
 	protocol/weston-desktop-shell-protocol.c			\
 	protocol/scaler-client-protocol.h		\
 	protocol/scaler-protocol.c			\
-	protocol/presentation_timing-protocol.c				\
-	protocol/presentation_timing-client-protocol.h			\
+	protocol/presentation-time-protocol.c				\
+	protocol/presentation-time-client-protocol.h			\
 	protocol/fullscreen-shell-unstable-v1-protocol.c		\
 	protocol/fullscreen-shell-unstable-v1-client-protocol.h	\
 	protocol/xdg-shell-unstable-v5-protocol.c			\
@@ -1234,8 +1234,8 @@ presentation_weston_SOURCES = 			\
 	tests/presentation-test.c		\
 	shared/helpers.h
 nodist_presentation_weston_SOURCES =		\
-	protocol/presentation_timing-protocol.c	\
-	protocol/presentation_timing-client-protocol.h
+	protocol/presentation-time-protocol.c	\
+	protocol/presentation-time-client-protocol.h
 presentation_weston_CFLAGS = $(AM_CFLAGS) $(TEST_CLIENT_CFLAGS)
 presentation_weston_LDADD = libtest-client.la
 
@@ -1353,7 +1353,6 @@ EXTRA_DIST +=					\
 	protocol/weston-screenshooter.xml	\
 	protocol/text-cursor-position.xml	\
 	protocol/weston-test.xml		\
-	protocol/presentation_timing.xml	\
 	protocol/scaler.xml			\
 	protocol/ivi-application.xml		\
 	protocol/ivi-hmi-controller.xml
diff --git a/clients/presentation-shm.c b/clients/presentation-shm.c
index 120c40c..1feeb36 100644
--- a/clients/presentation-shm.c
+++ b/clients/presentation-shm.c
@@ -38,7 +38,7 @@
 #include <wayland-client.h>
 #include "shared/helpers.h"
 #include "shared/os-compatibility.h"
-#include "presentation_timing-client-protocol.h"
+#include "presentation-time-client-protocol.h"
 
 enum run_mode {
 	RUN_MODE_FEEDBACK,
@@ -67,7 +67,7 @@ struct display {
 	struct wl_shm *shm;
 	uint32_t formats;
 
-	struct presentation *presentation;
+	struct wp_presentation *presentation;
 	clockid_t clk_id;
 
 	struct wl_list output_list; /* struct output::link */
@@ -76,7 +76,7 @@ struct display {
 struct feedback {
 	struct window *window;
 	unsigned frame_no;
-	struct presentation_feedback *feedback;
+	struct wp_presentation_feedback *feedback;
 	struct timespec commit;
 	struct timespec target;
 	uint32_t frame_stamp;
@@ -251,7 +251,7 @@ static void
 destroy_feedback(struct feedback *feedback)
 {
 	if (feedback->feedback)
-		presentation_feedback_destroy(feedback->feedback);
+		wp_presentation_feedback_destroy(feedback->feedback);
 
 	wl_list_remove(&feedback->link);
 	free(feedback);
@@ -344,7 +344,7 @@ paint_pixels(void *image, int width, int height, uint32_t phase)
 
 static void
 feedback_sync_output(void *data,
-		     struct presentation_feedback *presentation_feedback,
+		     struct wp_presentation_feedback *presentation_feedback,
 		     struct wl_output *output)
 {
 	/* not interested */
@@ -357,10 +357,10 @@ pflags_to_str(uint32_t flags, char *str, unsigned len)
 		uint32_t flag;
 		char sym;
 	} desc[] = {
-		{ PRESENTATION_FEEDBACK_KIND_VSYNC, 's' },
-		{ PRESENTATION_FEEDBACK_KIND_HW_CLOCK, 'c' },
-		{ PRESENTATION_FEEDBACK_KIND_HW_COMPLETION, 'e' },
-		{ PRESENTATION_FEEDBACK_KIND_ZERO_COPY, 'z' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_VSYNC, 's' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK, 'c' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION, 'e' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY, 'z' },
 	};
 	unsigned i;
 
@@ -400,7 +400,7 @@ timespec_diff_to_usec(const struct timespec *a, const struct timespec *b)
 
 static void
 feedback_presented(void *data,
-		   struct presentation_feedback *presentation_feedback,
+		   struct wp_presentation_feedback *presentation_feedback,
 		   uint32_t tv_sec_hi,
 		   uint32_t tv_sec_lo,
 		   uint32_t tv_nsec,
@@ -456,7 +456,7 @@ feedback_presented(void *data,
 
 static void
 feedback_discarded(void *data,
-		   struct presentation_feedback *presentation_feedback)
+		   struct wp_presentation_feedback *presentation_feedback)
 {
 	struct feedback *feedback = data;
 
@@ -465,7 +465,7 @@ feedback_discarded(void *data,
 	destroy_feedback(feedback);
 }
 
-static const struct presentation_feedback_listener feedback_listener = {
+static const struct wp_presentation_feedback_listener feedback_listener = {
 	feedback_sync_output,
 	feedback_presented,
 	feedback_discarded
@@ -492,7 +492,7 @@ static void
 window_create_feedback(struct window *window, uint32_t frame_stamp)
 {
 	static unsigned seq;
-	struct presentation *pres = window->display->presentation;
+	struct wp_presentation *pres = window->display->presentation;
 	struct feedback *feedback;
 
 	seq++;
@@ -505,9 +505,9 @@ window_create_feedback(struct window *window, uint32_t frame_stamp)
 		return;
 
 	feedback->window = window;
-	feedback->feedback = presentation_feedback(pres, window->surface);
-	presentation_feedback_add_listener(feedback->feedback,
-					   &feedback_listener, feedback);
+	feedback->feedback = wp_presentation_feedback(pres, window->surface);
+	wp_presentation_feedback_add_listener(feedback->feedback,
+					      &feedback_listener, feedback);
 
 	feedback->frame_no = seq;
 
@@ -559,21 +559,22 @@ static const struct wl_callback_listener frame_listener_mode_feedback = {
 	redraw_mode_feedback
 };
 
-static const struct presentation_feedback_listener feedkick_listener;
+static const struct wp_presentation_feedback_listener feedkick_listener;
 
 static void
 window_feedkick(struct window *window)
 {
-	struct presentation *pres = window->display->presentation;
-	struct presentation_feedback *fback;
+	struct wp_presentation *pres = window->display->presentation;
+	struct wp_presentation_feedback *fback;
 
-	fback = presentation_feedback(pres, window->surface);
-	presentation_feedback_add_listener(fback, &feedkick_listener, window);
+	fback = wp_presentation_feedback(pres, window->surface);
+	wp_presentation_feedback_add_listener(fback, &feedkick_listener,
+					      window);
 }
 
 static void
 feedkick_presented(void *data,
-		   struct presentation_feedback *presentation_feedback,
+		   struct wp_presentation_feedback *presentation_feedback,
 		   uint32_t tv_sec_hi,
 		   uint32_t tv_sec_lo,
 		   uint32_t tv_nsec,
@@ -584,7 +585,7 @@ feedkick_presented(void *data,
 {
 	struct window *window = data;
 
-	presentation_feedback_destroy(presentation_feedback);
+	wp_presentation_feedback_destroy(presentation_feedback);
 	window->refresh_nsec = refresh_nsec;
 
 	switch (window->mode) {
@@ -602,11 +603,11 @@ feedkick_presented(void *data,
 
 static void
 feedkick_discarded(void *data,
-		   struct presentation_feedback *presentation_feedback)
+		   struct wp_presentation_feedback *presentation_feedback)
 {
 	struct window *window = data;
 
-	presentation_feedback_destroy(presentation_feedback);
+	wp_presentation_feedback_destroy(presentation_feedback);
 
 	switch (window->mode) {
 	case RUN_MODE_PRESENT:
@@ -621,7 +622,7 @@ feedkick_discarded(void *data,
 	}
 }
 
-static const struct presentation_feedback_listener feedkick_listener = {
+static const struct wp_presentation_feedback_listener feedkick_listener = {
 	feedback_sync_output,
 	feedkick_presented,
 	feedkick_discarded
@@ -687,7 +688,7 @@ display_add_output(struct display *d, uint32_t name, uint32_t version)
 }
 
 static void
-presentation_clock_id(void *data, struct presentation *presentation,
+presentation_clock_id(void *data, struct wp_presentation *presentation,
 		      uint32_t clk_id)
 {
 	struct display *d = data;
@@ -695,7 +696,7 @@ presentation_clock_id(void *data, struct presentation *presentation,
 	d->clk_id = clk_id;
 }
 
-static const struct presentation_listener presentation_listener = {
+static const struct wp_presentation_listener presentation_listener = {
 	presentation_clock_id
 };
 
@@ -730,12 +731,12 @@ registry_handle_global(void *data, struct wl_registry *registry,
 		wl_shm_add_listener(d->shm, &shm_listener, d);
 	} else if (strcmp(interface, "wl_output") == 0) {
 		display_add_output(d, name, version);
-	} else if (strcmp(interface, "presentation") == 0) {
+	} else if (strcmp(interface, wp_presentation_interface.name) == 0) {
 		d->presentation =
 			wl_registry_bind(registry,
-					 name, &presentation_interface, 1);
-		presentation_add_listener(d->presentation,
-					  &presentation_listener, d);
+					 name, &wp_presentation_interface, 1);
+		wp_presentation_add_listener(d->presentation,
+					     &presentation_listener, d);
 	}
 }
 
diff --git a/clients/weston-info.c b/clients/weston-info.c
index 49d64fe..9d42599 100644
--- a/clients/weston-info.c
+++ b/clients/weston-info.c
@@ -34,7 +34,7 @@
 
 #include "shared/helpers.h"
 #include "shared/os-compatibility.h"
-#include "presentation_timing-client-protocol.h"
+#include "presentation-time-client-protocol.h"
 
 typedef void (*print_info_t)(void *info);
 typedef void (*destroy_info_t)(void *info);
@@ -105,7 +105,7 @@ struct seat_info {
 
 struct presentation_info {
 	struct global_info global;
-	struct presentation *presentation;
+	struct wp_presentation *presentation;
 
 	clockid_t clk_id;
 };
@@ -595,7 +595,7 @@ destroy_presentation_info(void *info)
 {
 	struct presentation_info *prinfo = info;
 
-	presentation_destroy(prinfo->presentation);
+	wp_presentation_destroy(prinfo->presentation);
 }
 
 static const char *
@@ -630,7 +630,7 @@ print_presentation_info(void *info)
 }
 
 static void
-presentation_handle_clock_id(void *data, struct presentation *presentation,
+presentation_handle_clock_id(void *data, struct wp_presentation *presentation,
 			     uint32_t clk_id)
 {
 	struct presentation_info *prinfo = data;
@@ -638,7 +638,7 @@ presentation_handle_clock_id(void *data, struct presentation *presentation,
 	prinfo->clk_id = clk_id;
 }
 
-static const struct presentation_listener presentation_listener = {
+static const struct wp_presentation_listener presentation_listener = {
 	presentation_handle_clock_id
 };
 
@@ -647,15 +647,16 @@ add_presentation_info(struct weston_info *info, uint32_t id, uint32_t version)
 {
 	struct presentation_info *prinfo = xzalloc(sizeof *prinfo);
 
-	init_global_info(info, &prinfo->global, id, "presentation", version);
+	init_global_info(info, &prinfo->global, id,
+			 wp_presentation_interface.name, version);
 	prinfo->global.print = print_presentation_info;
 	prinfo->global.destroy = destroy_presentation_info;
 
 	prinfo->clk_id = -1;
 	prinfo->presentation = wl_registry_bind(info->registry, id,
-						&presentation_interface, 1);
-	presentation_add_listener(prinfo->presentation, &presentation_listener,
-				  prinfo);
+						&wp_presentation_interface, 1);
+	wp_presentation_add_listener(prinfo->presentation,
+				     &presentation_listener, prinfo);
 
 	info->roundtrip_needed = true;
 }
diff --git a/configure.ac b/configure.ac
index 276584f..92eaa3c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -181,6 +181,7 @@ fi
 PKG_CHECK_MODULES(LIBINPUT_BACKEND, [libinput >= 0.8.0])
 PKG_CHECK_MODULES(COMPOSITOR, [$COMPOSITOR_MODULES])
 
+# XXX: wayland-protocols needs a version bump for stable/presentation-time.
 PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.0],
 		  [ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
 AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir)
diff --git a/protocol/presentation_timing.xml b/protocol/presentation_timing.xml
deleted file mode 100644
index 10a5f14..0000000
--- a/protocol/presentation_timing.xml
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<protocol name="presentation_timing">
-<!-- wrap:70 -->
-
-  <copyright>
-    Copyright © 2013-2014 Collabora, Ltd.
-
-    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="presentation" version="1">
-    <description summary="timed presentation related wl_surface requests">
-
-<!-- Introduction -->
-
-      The main feature of this interface is accurate presentation
-      timing feedback to ensure smooth video playback while maintaining
-      audio/video synchronization. Some features use the concept of a
-      presentation clock, which is defined in presentation.clock_id
-      event.
-
-      Request 'feedback' can be regarded as an additional wl_surface
-      method. It is part of the double-buffered surface state update
-      mechanism, where other requests first set up the state and then
-      wl_surface.commit atomically applies the state into use. In
-      other words, wl_surface.commit submits a content update.
-
-<!-- Completing presentation -->
-
-      When the final realized presentation time is available, e.g.
-      after a framebuffer flip completes, the requested
-      presentation_feedback.presented events are sent. The final
-      presentation time can differ from the compositor's predicted
-      display update time and the update's target time, especially
-      when the compositor misses its target vertical blanking period.
-    </description>
-
-    <enum name="error">
-      <description summary="fatal presentation errors">
-        These fatal protocol errors may be emitted in response to
-        illegal presentation requests.
-      </description>
-      <entry name="invalid_timestamp" value="0"
-             summary="invalid value in tv_nsec"/>
-      <entry name="invalid_flag" value="1"
-             summary="invalid flag"/>
-    </enum>
-
-    <request name="destroy" type="destructor">
-      <description summary="unbind from the presentation interface">
-        Informs the server that the client will not be using this
-        protocol object anymore. This does not affect any existing
-        objects created by this interface.
-      </description>
-    </request>
-
-    <request name="feedback">
-      <description summary="request presentation feedback information">
-        Request presentation feedback for the current content submission
-        on the given surface. This creates a new presentation_feedback
-        object, which will deliver the feedback information once. If
-        multiple presentation_feedback objects are created for the same
-        submission, they will all deliver the same information.
-
-        For details on what information is returned, see
-        presentation_feedback interface.
-      </description>
-
-      <arg name="surface" type="object" interface="wl_surface"
-           summary="target surface"/>
-      <arg name="callback" type="new_id" interface="presentation_feedback"
-           summary="new feedback object"/>
-    </request>
-
-    <event name="clock_id">
-      <description summary="clock ID for timestamps">
-        This event tells the client in which clock domain the
-        compositor interprets the timestamps used by the presentation
-        extension. This clock is called the presentation clock.
-
-        The compositor sends this event when the client binds to the
-        presentation interface. The presentation clock does not change
-        during the lifetime of the client connection.
-
-        The clock identifier is platform dependent. Clients must be
-        able to query the current clock value directly, not by asking
-        the compositor.
-
-        On Linux/glibc, the identifier value is one of the clockid_t
-        values accepted by clock_gettime(). clock_gettime() is defined
-        by POSIX.1-2001.
-
-        Compositors should prefer a clock which does not jump and is
-        not slewed e.g. by NTP. The absolute value of the clock is
-        irrelevant. Precision of one millisecond or better is
-        recommended.
-
-        Timestamps in this clock domain are expressed as tv_sec_hi,
-        tv_sec_lo, tv_nsec triples, each component being an unsigned
-        32-bit value. Whole seconds are in tv_sec which is a 64-bit
-        value combined from tv_sec_hi and tv_sec_lo, and the
-        additional fractional part in tv_nsec as nanoseconds. Hence,
-        for valid timestamps tv_nsec must be in [0, 999999999].
-
-        Note that clock_id applies only to the presentation clock,
-        and implies nothing about e.g. the timestamps used in the
-        Wayland core protocol input events.
-      </description>
-
-      <arg name="clk_id" type="uint" summary="platform clock identifier"/>
-    </event>
-
-  </interface>
-
-  <interface name="presentation_feedback" version="1">
-    <description summary="presentation time feedback event">
-      A presentation_feedback object returns an indication that a
-      wl_surface content update has become visible to the user.
-      One object corresponds to one content update submission
-      (wl_surface.commit). There are two possible outcomes: the
-      content update is presented to the user, and a presentation
-      timestamp delivered; or, the user did not see the content
-      update because it was superseded or its surface destroyed,
-      and the content update is discarded.
-
-      Once a presentation_feedback object has delivered an 'presented'
-      or 'discarded' event it is automatically destroyed.
-    </description>
-
-    <event name="sync_output">
-      <description summary="presentation synchronized to this output">
-        As presentation can be synchronized to only one output at a
-        time, this event tells which output it was. This event is only
-        sent prior to the presented event.
-
-        As clients may bind to the same global wl_output multiple
-        times, this event is sent for each bound instance that matches
-        the synchronized output. If a client has not bound to the
-        right wl_output global at all, this event is not sent.
-      </description>
-
-      <arg name="output" type="object" interface="wl_output"
-           summary="presentation output"/>
-    </event>
-
-    <enum name="kind">
-      <description summary="bitmask of flags in presented event">
-        These flags provide information about how the presentation of
-        the related content update was done. The intent is to help
-        clients assess the reliability of the feedback and the visual
-        quality with respect to possible tearing and timings. The
-        flags are:
-
-        VSYNC:
-        The presentation was synchronized to the "vertical retrace" by
-        the display hardware such that tearing does not happen.
-        Relying on user space scheduling is not acceptable for this
-        flag. If presentation is done by a copy to the active
-        frontbuffer, then it must guarantee that tearing cannot
-        happen.
-
-        HW_CLOCK:
-        The display hardware provided measurements that the hardware
-        driver converted into a presentation timestamp. Sampling a
-        clock in user space is not acceptable for this flag.
-
-        HW_COMPLETION:
-        The display hardware signalled that it started using the new
-        image content. The opposite of this is e.g. a timer being used
-        to guess when the display hardware has switched to the new
-        image content.
-
-        ZERO_COPY:
-        The presentation of this update was done zero-copy. This means
-        the buffer from the client was given to display hardware as
-        is, without copying it. Compositing with OpenGL counts as
-        copying, even if textured directly from the client buffer.
-        Possible zero-copy cases include direct scanout of a
-        fullscreen surface and a surface on a hardware overlay.
-      </description>
-
-      <entry name="vsync" value="0x1" summary="presentation was vsync'd"/>
-      <entry name="hw_clock" value="0x2"
-             summary="hardware provided the presentation timestamp"/>
-      <entry name="hw_completion" value="0x4"
-             summary="hardware signalled the start of the presentation"/>
-      <entry name="zero_copy" value="0x8"
-             summary="presentation was done zero-copy"/>
-    </enum>
-
-    <event name="presented">
-      <description summary="the content update was displayed">
-        The associated content update was displayed to the user at the
-        indicated time (tv_sec_hi/lo, tv_nsec). For the interpretation of
-        the timestamp, see presentation.clock_id event.
-
-        The timestamp corresponds to the time when the content update
-        turned into light the first time on the surface's main output.
-        Compositors may approximate this from the framebuffer flip
-        completion events from the system, and the latency of the
-        physical display path if known.
-
-        This event is preceded by all related sync_output events
-        telling which output's refresh cycle the feedback corresponds
-        to, i.e. the main output for the surface. Compositors are
-        recommended to choose the output containing the largest part
-        of the wl_surface, or keeping the output they previously
-        chose. Having a stable presentation output association helps
-        clients predict future output refreshes (vblank).
-
-        Argument 'refresh' gives the compositor's prediction of how
-        many nanoseconds after tv_sec, tv_nsec the very next output
-        refresh may occur. This is to further aid clients in
-        predicting future refreshes, i.e., estimating the timestamps
-        targeting the next few vblanks. If such prediction cannot
-        usefully be done, the argument is zero.
-
-        The 64-bit value combined from seq_hi and seq_lo is the value
-        of the output's vertical retrace counter when the content
-        update was first scanned out to the display. This value must
-        be compatible with the definition of MSC in
-        GLX_OML_sync_control specification. Note, that if the display
-        path has a non-zero latency, the time instant specified by
-        this counter may differ from the timestamp's.
-
-        If the output does not have a constant refresh rate, explicit
-        video mode switches excluded, then the refresh argument must
-        be zero.
-
-        If the output does not have a concept of vertical retrace or a
-        refresh cycle, or the output device is self-refreshing without
-        a way to query the refresh count, then the arguments seq_hi
-        and seq_lo must be zero.
-      </description>
-
-      <arg name="tv_sec_hi" type="uint"
-           summary="high 32 bits of the seconds part of the presentation timestamp"/>
-      <arg name="tv_sec_lo" type="uint"
-           summary="low 32 bits of the seconds part of the presentation timestamp"/>
-      <arg name="tv_nsec" type="uint"
-           summary="nanoseconds part of the presentation timestamp"/>
-      <arg name="refresh" type="uint" summary="nanoseconds till next refresh"/>
-      <arg name="seq_hi" type="uint"
-           summary="high 32 bits of refresh counter"/>
-      <arg name="seq_lo" type="uint"
-           summary="low 32 bits of refresh counter"/>
-      <arg name="flags" type="uint" summary="combination of 'kind' values"/>
-    </event>
-
-    <event name="discarded">
-      <description summary="the content update was not displayed">
-        The content update was never displayed to the user.
-      </description>
-    </event>
-  </interface>
-
-</protocol>
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 538e56e..e01f6b9 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -55,7 +55,7 @@
 #include "libinput-seat.h"
 #include "launcher-util.h"
 #include "vaapi-recorder.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 #include "linux-dmabuf.h"
 
 #ifndef DRM_CAP_TIMESTAMP_MONOTONIC
@@ -608,13 +608,13 @@ drm_output_set_gamma(struct weston_output *output_base,
 }
 
 /* Determine the type of vblank synchronization to use for the output.
- * 
+ *
  * The pipe parameter indicates which CRTC is in use.  Knowing this, we
  * can determine which vblank sequence type to use for it.  Traditional
  * cards had only two CRTCs, with CRTC 0 using no special flags, and
  * CRTC 1 using DRM_VBLANK_SECONDARY.  The first bit of the pipe
  * parameter indicates this.
- * 
+ *
  * Bits 1-5 of the pipe parameter are 5 bit wide pipe number between
  * 0-31.  If this is non-zero it indicates we're dealing with a
  * multi-gpu situation and we need to calculate the vblank sync
@@ -778,7 +778,7 @@ drm_output_start_repaint_loop(struct weston_output *output_base)
 		if (timespec_to_nsec(&vbl2now) < refresh_nsec) {
 			drm_output_update_msc(output, vbl.reply.sequence);
 			weston_output_finish_frame(output_base, &ts,
-						PRESENTATION_FEEDBACK_INVALID);
+						WP_PRESENTATION_FEEDBACK_INVALID);
 			return;
 		}
 	}
@@ -800,7 +800,7 @@ finish_frame:
 	/* if we cannot page-flip, immediately finish frame */
 	weston_compositor_read_presentation_clock(output_base->compositor, &ts);
 	weston_output_finish_frame(output_base, &ts,
-				   PRESENTATION_FEEDBACK_INVALID);
+				   WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
 static void
@@ -821,8 +821,8 @@ vblank_handler(int fd, unsigned int frame, unsigned int sec, unsigned int usec,
 	struct drm_sprite *s = (struct drm_sprite *)data;
 	struct drm_output *output = s->output;
 	struct timespec ts;
-	uint32_t flags = PRESENTATION_FEEDBACK_KIND_HW_COMPLETION |
-			 PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
+	uint32_t flags = WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION |
+			 WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
 
 	drm_output_update_msc(output, frame);
 	output->vblank_pending = 0;
@@ -847,9 +847,9 @@ page_flip_handler(int fd, unsigned int frame,
 {
 	struct drm_output *output = (struct drm_output *) data;
 	struct timespec ts;
-	uint32_t flags = PRESENTATION_FEEDBACK_KIND_VSYNC |
-			 PRESENTATION_FEEDBACK_KIND_HW_COMPLETION |
-			 PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
+	uint32_t flags = WP_PRESENTATION_FEEDBACK_KIND_VSYNC |
+			 WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION |
+			 WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
 
 	drm_output_update_msc(output, frame);
 
@@ -1298,7 +1298,7 @@ drm_assign_planes(struct weston_output *output_base)
 			/* All other planes are a direct scanout of a
 			 * single client buffer.
 			 */
-			ev->psf_flags = PRESENTATION_FEEDBACK_KIND_ZERO_COPY;
+			ev->psf_flags = WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY;
 		}
 
 		pixman_region32_fini(&surface_overlap);
diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
index 36d7ae0..19c5e3b 100644
--- a/src/compositor-fbdev.c
+++ b/src/compositor-fbdev.c
@@ -48,7 +48,7 @@
 #include "pixman-renderer.h"
 #include "libinput-seat.h"
 #include "gl-renderer.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 
 struct fbdev_backend {
 	struct weston_backend base;
@@ -121,7 +121,7 @@ fbdev_output_start_repaint_loop(struct weston_output *output)
 	struct timespec ts;
 
 	weston_compositor_read_presentation_clock(output->compositor, &ts);
-	weston_output_finish_frame(output, &ts, PRESENTATION_FEEDBACK_INVALID);
+	weston_output_finish_frame(output, &ts, WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
 static void
diff --git a/src/compositor-headless.c b/src/compositor-headless.c
index ba0d8d7..16b5c39 100644
--- a/src/compositor-headless.c
+++ b/src/compositor-headless.c
@@ -34,7 +34,7 @@
 #include "shared/helpers.h"
 #include "compositor.h"
 #include "pixman-renderer.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 
 struct headless_backend {
 	struct weston_backend base;
@@ -64,7 +64,7 @@ headless_output_start_repaint_loop(struct weston_output *output)
 	struct timespec ts;
 
 	weston_compositor_read_presentation_clock(output->compositor, &ts);
-	weston_output_finish_frame(output, &ts, PRESENTATION_FEEDBACK_INVALID);
+	weston_output_finish_frame(output, &ts, WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
 static int
diff --git a/src/compositor-rdp.c b/src/compositor-rdp.c
index 3526ad1..e603b76 100644
--- a/src/compositor-rdp.c
+++ b/src/compositor-rdp.c
@@ -343,7 +343,7 @@ rdp_output_start_repaint_loop(struct weston_output *output)
 	struct timespec ts;
 
 	weston_compositor_read_presentation_clock(output->compositor, &ts);
-	weston_output_finish_frame(output, &ts, PRESENTATION_FEEDBACK_INVALID);
+	weston_output_finish_frame(output, &ts, WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
 static int
diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
index f48ddc4..75b808e 100644
--- a/src/compositor-rpi.c
+++ b/src/compositor-rpi.c
@@ -50,7 +50,7 @@
 #include "rpi-renderer.h"
 #include "launcher-util.h"
 #include "libinput-seat.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 
 #if 0
 #define DBG(...) \
@@ -223,7 +223,7 @@ rpi_output_start_repaint_loop(struct weston_output *output)
 
 	/* XXX: do a phony dispmanx update and trigger on its completion? */
 	weston_compositor_read_presentation_clock(output->compositor, &ts);
-	weston_output_finish_frame(output, &ts, PRESENTATION_FEEDBACK_INVALID);
+	weston_output_finish_frame(output, &ts, WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
 static int
@@ -257,8 +257,8 @@ static void
 rpi_output_update_complete(struct rpi_output *output,
 			   const struct timespec *stamp)
 {
-	uint32_t flags = PRESENTATION_FEEDBACK_KIND_VSYNC |
-			 PRESENTATION_FEEDBACK_KIND_HW_COMPLETION;
+	uint32_t flags = WP_PRESENTATION_FEEDBACK_KIND_VSYNC |
+			 WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION;
 
 	DBG("frame update complete(%ld.%09ld)\n",
 	    (long)stamp->tv_sec, (long)stamp->tv_nsec);
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index d1c020d..8a1878c 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -47,7 +47,7 @@
 #include "shared/os-compatibility.h"
 #include "shared/cairo-util.h"
 #include "fullscreen-shell-unstable-v1-client-protocol.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 #include "linux-dmabuf.h"
 
 #define WINDOW_TITLE "Weston Compositor"
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index 13a5d73..cca6ab7 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -55,7 +55,7 @@
 #include "shared/config-parser.h"
 #include "shared/helpers.h"
 #include "shared/image-loader.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 #include "linux-dmabuf.h"
 
 #define DEFAULT_AXIS_STEP_DISTANCE wl_fixed_from_int(10)
@@ -371,7 +371,7 @@ x11_output_start_repaint_loop(struct weston_output *output)
 	struct timespec ts;
 
 	weston_compositor_read_presentation_clock(output->compositor, &ts);
-	weston_output_finish_frame(output, &ts, PRESENTATION_FEEDBACK_INVALID);
+	weston_output_finish_frame(output, &ts, WP_PRESENTATION_FEEDBACK_INVALID);
 }
 
 static int
diff --git a/src/compositor.c b/src/compositor.c
index 98efb4c..3e3fc8c 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -55,7 +55,7 @@
 
 #include "compositor.h"
 #include "scaler-server-protocol.h"
-#include "presentation_timing-server-protocol.h"
+#include "presentation-time-server-protocol.h"
 #include "shared/helpers.h"
 #include "shared/os-compatibility.h"
 #include "shared/timespec-util.h"
@@ -443,7 +443,7 @@ static void
 weston_presentation_feedback_discard(
 		struct weston_presentation_feedback *feedback)
 {
-	presentation_feedback_send_discarded(feedback->resource);
+	wp_presentation_feedback_send_discarded(feedback->resource);
 	wl_resource_destroy(feedback->resource);
 }
 
@@ -473,16 +473,16 @@ weston_presentation_feedback_present(
 		if (wl_resource_get_client(o) != client)
 			continue;
 
-		presentation_feedback_send_sync_output(feedback->resource, o);
+		wp_presentation_feedback_send_sync_output(feedback->resource, o);
 	}
 
 	secs = ts->tv_sec;
-	presentation_feedback_send_presented(feedback->resource,
-					     secs >> 32, secs & 0xffffffff,
-					     ts->tv_nsec,
-					     refresh_nsec,
-					     seq >> 32, seq & 0xffffffff,
-					     flags | feedback->psf_flags);
+	wp_presentation_feedback_send_presented(feedback->resource,
+						secs >> 32, secs & 0xffffffff,
+						ts->tv_nsec,
+						refresh_nsec,
+						seq >> 32, seq & 0xffffffff,
+						flags | feedback->psf_flags);
 	wl_resource_destroy(feedback->resource);
 }
 
@@ -496,7 +496,7 @@ weston_presentation_feedback_present_list(struct wl_list *list,
 {
 	struct weston_presentation_feedback *feedback, *tmp;
 
-	assert(!(flags & PRESENTATION_FEEDBACK_INVALID) ||
+	assert(!(flags & WP_PRESENTATION_FEEDBACK_INVALID) ||
 	       wl_list_empty(list));
 
 	wl_list_for_each_safe(feedback, tmp, list, link)
@@ -2489,7 +2489,7 @@ weston_output_finish_frame(struct weston_output *output,
 	 * the deadline given by repaint_msec? In that case we delay until
 	 * the deadline of the next frame, to give clients a more predictable
 	 * timing of the repaint cycle to lock on. */
-	if (presented_flags == PRESENTATION_FEEDBACK_INVALID && msec < 0)
+	if (presented_flags == WP_PRESENTATION_FEEDBACK_INVALID && msec < 0)
 		msec += refresh_nsec / 1000000;
 
 	if (msec < 1)
@@ -4605,7 +4605,7 @@ presentation_feedback(struct wl_client *client,
 		goto err_calloc;
 
 	feedback->resource = wl_resource_create(client,
-					&presentation_feedback_interface,
+					&wp_presentation_feedback_interface,
 					1, callback);
 	if (!feedback->resource)
 		goto err_create;
@@ -4624,7 +4624,7 @@ err_calloc:
 	wl_client_post_no_memory(client);
 }
 
-static const struct presentation_interface presentation_implementation = {
+static const struct wp_presentation_interface presentation_implementation = {
 	presentation_destroy,
 	presentation_feedback
 };
@@ -4636,7 +4636,7 @@ bind_presentation(struct wl_client *client,
 	struct weston_compositor *compositor = data;
 	struct wl_resource *resource;
 
-	resource = wl_resource_create(client, &presentation_interface,
+	resource = wl_resource_create(client, &wp_presentation_interface,
 				      version, id);
 	if (resource == NULL) {
 		wl_client_post_no_memory(client);
@@ -4645,7 +4645,7 @@ bind_presentation(struct wl_client *client,
 
 	wl_resource_set_implementation(resource, &presentation_implementation,
 				       compositor, NULL);
-	presentation_send_clock_id(resource, compositor->presentation_clock);
+	wp_presentation_send_clock_id(resource, compositor->presentation_clock);
 }
 
 static void
@@ -4754,7 +4754,7 @@ weston_compositor_create(struct wl_display *display, void *user_data)
 			      ec, bind_scaler))
 		goto fail;
 
-	if (!wl_global_create(ec->wl_display, &presentation_interface, 1,
+	if (!wl_global_create(ec->wl_display, &wp_presentation_interface, 1,
 			      ec, bind_presentation))
 		goto fail;
 
diff --git a/src/compositor.h b/src/compositor.h
index 58ae94b..794a1b0 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -1221,7 +1221,7 @@ weston_compositor_stack_plane(struct weston_compositor *ec,
 			      struct weston_plane *above);
 
 /* An invalid flag in presented_flags to catch logic errors. */
-#define PRESENTATION_FEEDBACK_INVALID (1U << 31)
+#define WP_PRESENTATION_FEEDBACK_INVALID (1U << 31)
 
 void
 weston_output_finish_frame(struct weston_output *output,
diff --git a/tests/presentation-test.c b/tests/presentation-test.c
index 27f33da..a985c06 100644
--- a/tests/presentation-test.c
+++ b/tests/presentation-test.c
@@ -33,20 +33,20 @@
 
 #include "shared/helpers.h"
 #include "weston-test-client-helper.h"
-#include "presentation_timing-client-protocol.h"
+#include "presentation-time-client-protocol.h"
 
-static struct presentation *
+static struct wp_presentation *
 get_presentation(struct client *client)
 {
 	struct global *g;
 	struct global *global_pres = NULL;
-	static struct presentation *pres;
+	static struct wp_presentation *pres;
 
 	if (pres)
 		return pres;
 
 	wl_list_for_each(g, &client->global_list, link) {
-		if (strcmp(g->interface, "presentation"))
+		if (strcmp(g->interface, wp_presentation_interface.name))
 			continue;
 
 		if (global_pres)
@@ -60,7 +60,7 @@ get_presentation(struct client *client)
 	assert(global_pres->version == 1);
 
 	pres = wl_registry_bind(client->wl_registry, global_pres->name,
-				&presentation_interface, 1);
+				&wp_presentation_interface, 1);
 	assert(pres);
 
 	return pres;
@@ -68,7 +68,7 @@ get_presentation(struct client *client)
 
 struct feedback {
 	struct client *client;
-	struct presentation_feedback *obj;
+	struct wp_presentation_feedback *obj;
 
 	enum {
 		FB_PENDING = 0,
@@ -93,7 +93,7 @@ timespec_from_proto(struct timespec *tm, uint32_t tv_sec_hi,
 
 static void
 feedback_sync_output(void *data,
-		     struct presentation_feedback *presentation_feedback,
+		     struct wp_presentation_feedback *presentation_feedback,
 		     struct wl_output *output)
 {
 	struct feedback *fb = data;
@@ -106,7 +106,7 @@ feedback_sync_output(void *data,
 
 static void
 feedback_presented(void *data,
-		   struct presentation_feedback *presentation_feedback,
+		   struct wp_presentation_feedback *presentation_feedback,
 		   uint32_t tv_sec_hi,
 		   uint32_t tv_sec_lo,
 		   uint32_t tv_nsec,
@@ -127,7 +127,7 @@ feedback_presented(void *data,
 
 static void
 feedback_discarded(void *data,
-		   struct presentation_feedback *presentation_feedback)
+		   struct wp_presentation_feedback *presentation_feedback)
 {
 	struct feedback *fb = data;
 
@@ -135,7 +135,7 @@ feedback_discarded(void *data,
 	fb->result = FB_DISCARDED;
 }
 
-static const struct presentation_feedback_listener feedback_listener = {
+static const struct wp_presentation_feedback_listener feedback_listener = {
 	feedback_sync_output,
 	feedback_presented,
 	feedback_discarded
@@ -148,8 +148,8 @@ feedback_create(struct client *client, struct wl_surface *surface)
 
 	fb = xzalloc(sizeof *fb);
 	fb->client = client;
-	fb->obj = presentation_feedback(get_presentation(client), surface);
-	presentation_feedback_add_listener(fb->obj, &feedback_listener, fb);
+	fb->obj = wp_presentation_feedback(get_presentation(client), surface);
+	wp_presentation_feedback_add_listener(fb->obj, &feedback_listener, fb);
 
 	return fb;
 }
@@ -169,10 +169,10 @@ pflags_to_str(uint32_t flags, char *str, unsigned len)
 		uint32_t flag;
 		char sym;
 	} desc[] = {
-		{ PRESENTATION_FEEDBACK_KIND_VSYNC, 's' },
-		{ PRESENTATION_FEEDBACK_KIND_HW_CLOCK, 'c' },
-		{ PRESENTATION_FEEDBACK_KIND_HW_COMPLETION, 'e' },
-		{ PRESENTATION_FEEDBACK_KIND_ZERO_COPY, 'z' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_VSYNC, 's' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK, 'c' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_HW_COMPLETION, 'e' },
+		{ WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY, 'z' },
 	};
 	unsigned i;
 
@@ -212,7 +212,7 @@ feedback_print(struct feedback *fb)
 static void
 feedback_destroy(struct feedback *fb)
 {
-	presentation_feedback_destroy(fb->obj);
+	wp_presentation_feedback_destroy(fb->obj);
 	free(fb);
 }
 
-- 
2.4.10



More information about the wayland-devel mailing list