[PATCH weston 1/2] compositor-x11: stop using input_loop

Derek Foreman derekf at osg.samsung.com
Thu Mar 24 16:16:54 UTC 2016


On 24/03/16 10:10 AM, Pekka Paalanen wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> X11 is the only backend that still used the input event loop.
> 
> This patch is an identical rewrite of
> 6deb09ef8a72164947cdfa5f2414e292c7672c9c which was then reverted in
> 3bebe6461a9de5d8c5c7da0261c70cd250fa1fde for reasons unrecorded. This
> patch is also the revert of 22ba60e514e074e4bdee1529aa8d22600712f001.

I couldn't remember why 6deb09ef8a was reverted, so I dug through the
mailing list archives and found a rather amusing thread between you and
I. :)

Reviewed-by: Derek Foreman <derekf at osg.samsung.com>

For both patches.

(Now, is it worthwhile to revert d540f4bb to remove the unneeded
complexity?)

Thanks,
Derek

> Originally input devices were moved into their own event loop in
> 7ea10864c2fc7370f5ada88a3fc91ab5f188da00 and the reason for that is
> explained in 7dbf5e2ea744bde56b65ba45b935b77df4a783e1.
> 
> The idea behind the input event loop was that it would be beneficial to
> process and relay input events to clients just once during an output
> repaint cycle, because clients cannot update the image on screen any
> faster anyway. All input events also carry a timestamp, so we didn't
> lose any timing information. This was supposed to save power by reducing
> the process wake-ups and context switches. There was also a mention of
> reducing lag.
> 
> However, the concept of an output repaint loop does not really work out
> when you have several outputs, but the input devices are not exclusive
> to a certain output.
> 
> The logic for driving the input event loop in Weston core was written to
> assume a single output. When you have multiple outputs with independent
> repaint cycles, the input event loop handling becomes fairly random, one
> output freezes input while another output thaws it, etc.
> 
> The DRM backend stopped using the input event loop when it started using
> the libinput input backend, which became the default in
> 3f5e906268448f2d84b115c5f3d22165ce0021b1, and the old code was finally
> ripped out in 823ad33ef34fa32b14b300d987fb9d2e2a42e9c4.
> 
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> ---
>  src/compositor-x11.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compositor-x11.c b/src/compositor-x11.c
> index f1cb71b..91a7c2e 100644
> --- a/src/compositor-x11.c
> +++ b/src/compositor-x11.c
> @@ -1576,6 +1576,7 @@ x11_backend_create(struct weston_compositor *compositor,
>  {
>  	struct x11_backend *b;
>  	struct x11_output *output;
> +	struct wl_event_loop *loop;
>  	struct weston_config_section *section;
>  	int i, x = 0, output_count = 0;
>  	int width, height, scale, count;
> @@ -1705,8 +1706,9 @@ x11_backend_create(struct weston_compositor *compositor,
>  		x = pixman_region32_extents(&output->base.region)->x2;
>  	}
>  
> +	loop = wl_display_get_event_loop(compositor->wl_display);
>  	b->xcb_source =
> -		wl_event_loop_add_fd(compositor->input_loop,
> +		wl_event_loop_add_fd(loop,
>  				     xcb_get_file_descriptor(b->conn),
>  				     WL_EVENT_READABLE,
>  				     x11_backend_handle_event, b);
> 



More information about the wayland-devel mailing list