[RFC xserver 1/3] xwayland: refactor into xwl_window_post_damage()

Olivier Fourdan ofourdan at redhat.com
Mon Dec 5 15:06:27 UTC 2016


> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> Refactor xwl_screen_post_damage() and split the window specific code
> into a new function xwl_window_post_damage().
> 
> This is a pure refactoring, there are no behavioral changes. An assert
> is added to xwl_window_post_damage() to ensure frame callbacks are not
> leaked if a future patch changes the call.
> 
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> ---
>  hw/xwayland/xwayland.c | 56
>  +++++++++++++++++++++++++++++---------------------
>  1 file changed, 33 insertions(+), 23 deletions(-)
> 
> diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
> index 9e1ecf8..c2ac4b3 100644
> --- a/hw/xwayland/xwayland.c
> +++ b/hw/xwayland/xwayland.c
> @@ -458,44 +458,54 @@ static const struct wl_callback_listener frame_listener
> = {
>  };
>  
>  static void
> -xwl_screen_post_damage(struct xwl_screen *xwl_screen)
> +xwl_window_post_damage(struct xwl_window *xwl_window)
>  {
> -    struct xwl_window *xwl_window, *next_xwl_window;
> +    struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
>      RegionPtr region;
>      BoxPtr box;
>      struct wl_buffer *buffer;
>      PixmapPtr pixmap;
>  
> -    xorg_list_for_each_entry_safe(xwl_window, next_xwl_window,
> -                                  &xwl_screen->damage_window_list,
> link_damage) {
> -        /* If we're waiting on a frame callback from the server,
> -         * don't attach a new buffer. */
> -        if (xwl_window->frame_callback)
> -            continue;
> +    assert(!xwl_window->frame_callback);
>  
> -        region = DamageRegion(xwl_window->damage);
> -        pixmap = (*xwl_screen->screen->GetWindowPixmap)
> (xwl_window->window);
> +    region = DamageRegion(xwl_window->damage);
> +    pixmap = (*xwl_screen->screen->GetWindowPixmap) (xwl_window->window);
>  
>  #if GLAMOR_HAS_GBM
> -        if (xwl_screen->glamor)
> -            buffer = xwl_glamor_pixmap_get_wl_buffer(pixmap);
> +    if (xwl_screen->glamor)
> +        buffer = xwl_glamor_pixmap_get_wl_buffer(pixmap);
>  #endif
> -        if (!xwl_screen->glamor)
> -            buffer = xwl_shm_pixmap_get_wl_buffer(pixmap);
> +    if (!xwl_screen->glamor)
> +        buffer = xwl_shm_pixmap_get_wl_buffer(pixmap);
>  
> -        wl_surface_attach(xwl_window->surface, buffer, 0, 0);
> +    wl_surface_attach(xwl_window->surface, buffer, 0, 0);
>  
> -        box = RegionExtents(region);
> -        wl_surface_damage(xwl_window->surface, box->x1, box->y1,
> -                          box->x2 - box->x1, box->y2 - box->y1);
> +    box = RegionExtents(region);
> +    wl_surface_damage(xwl_window->surface, box->x1, box->y1,
> +                        box->x2 - box->x1, box->y2 - box->y1);
>  
> -        xwl_window->frame_callback = wl_surface_frame(xwl_window->surface);
> -        wl_callback_add_listener(xwl_window->frame_callback,
> &frame_listener, xwl_window);
> +    xwl_window->frame_callback = wl_surface_frame(xwl_window->surface);
> +    wl_callback_add_listener(xwl_window->frame_callback, &frame_listener,
> xwl_window);
>  
> -        wl_surface_commit(xwl_window->surface);
> -        DamageEmpty(xwl_window->damage);
> +    wl_surface_commit(xwl_window->surface);
> +    DamageEmpty(xwl_window->damage);
>  
> -        xorg_list_del(&xwl_window->link_damage);
> +    xorg_list_del(&xwl_window->link_damage);
> +}
> +
> +static void
> +xwl_screen_post_damage(struct xwl_screen *xwl_screen)
> +{
> +    struct xwl_window *xwl_window, *next_xwl_window;
> +
> +    xorg_list_for_each_entry_safe(xwl_window, next_xwl_window,
> +                                  &xwl_screen->damage_window_list,
> link_damage) {
> +        /* If we're waiting on a frame callback from the server,
> +         * don't attach a new buffer. */
> +        if (xwl_window->frame_callback)
> +            continue;
> +
> +        xwl_window_post_damage(xwl_window);
>      }
>  }
>  
> --
> 2.7.3

Reviewed-by: Olivier Fourdan <ofourdan at redhat.com>


More information about the xorg-devel mailing list