[RFC weston 1/2] libweston: Add event loop abstraction API

Pekka Paalanen ppaalanen at gmail.com
Wed Feb 21 11:17:22 UTC 2018


On Wed, 21 Feb 2018 11:54:43 +0200
Pekka Paalanen <ppaalanen at gmail.com> wrote:

> On Mon, 19 Feb 2018 20:19:04 +0100
> Quentin Glidic <sardemff7+wayland at sardemff7.net> wrote:
> 
> > From: Quentin Glidic <sardemff7+git at sardemff7.net>
> > 
> > This will allow compositors to pick any event loop implementation they
> > want, and integrating the libweston components with it.
> > Specifically, idle and timeout sources can now have proper priorities to
> > avoid being ghosted by client event processing.
> > 
> > Signed-off-by: Quentin Glidic <sardemff7+git at sardemff7.net>
> > ---
> >  compositor/main.c      | 182 +++++++++++++++++++++++++++++++++++++++++++++++--
> >  libweston/compositor.c |  86 +++++++++++++++++++++++
> >  libweston/compositor.h |  67 ++++++++++++++++++
> >  3 files changed, 329 insertions(+), 6 deletions(-)
> >   
> 
> Hi,
> 
> in principle, the idea of making an interface for this is ok by me, but
> I would like to hear others' opinions as well.
> 
> The comments below are about the API details.


> > @@ -1959,6 +1961,71 @@ weston_pending_output_coldplug(struct weston_compositor *compositor);
> >  struct weston_output *
> >  weston_output_from_resource(struct wl_resource *resource);
> >  
> > +enum weston_event_source_priority {
> > +	WESTON_EVENT_SOURCE_PRIORITY_HIGH = -100,
> > +	WESTON_EVENT_SOURCE_PRIORITY_DEFAULT = 0,
> > +	WESTON_EVENT_SOURCE_PRIORITY_TIMEOUT = 0,
> > +	WESTON_EVENT_SOURCE_PRIORITY_FD = 0,
> > +	WESTON_EVENT_SOURCE_PRIORITY_IDLE = 200,
> > +	WESTON_EVENT_SOURCE_PRIORITY_LOW = 300,
> > +};  
> 
> There can be several kinds of fd sources etc., maybe the API functions
> should take an int instead of enum as argument? This list will probably
> change in any case to list not high/default/low, but
> input-device/output-device/repaint-timing/shell-timeout/...

It seems I have forgotten how libwayland-server works. For each
readable client socket, it does one read up to a max number of bytes
and processes all the fully received messages in the buffer. It does
this at most once for each connection on one event loop cycle.

The above means that a single client flooding the socket cannot starve
other clients or any other processing either.

Furthermore, all Wayland protocol requests are "fast", meaning that
they shouldn't take very long, which makes it less likely for a
flooding client to be able to hog an unfair portion of the server
processing time. However, this is just a speculation. One would have to
audit all requests and do some testing to verify. One thing coming to
mind would be to create and destroy a huge wl_shm_pool, in case the
mmap()/munmap() overhead is significant.

I stand corrected, maybe we don't need the priorities in the event loop
after all.


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/20180221/3458aa48/attachment.sig>


More information about the wayland-devel mailing list