[Spice-devel] [PATCH 02/22] worker: move get_drawable to display-channel.c

Fabiano Fidêncio fabiano at fidencio.org
Wed Dec 2 08:38:44 PST 2015


On Wed, Dec 2, 2015 at 5:19 PM, Frediano Ziglio <fziglio at redhat.com> wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/display-channel.c | 60 +++++++++++++++++++++++++++++++++++++++++++++
>  server/display-channel.h |  5 ++++
>  server/red_worker.c      | 64 +++---------------------------------------------
>  3 files changed, 68 insertions(+), 61 deletions(-)
>
> diff --git a/server/display-channel.c b/server/display-channel.c
> index cecbd44..2eeb021 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -916,6 +916,66 @@ void display_channel_print_stats(DisplayChannel *display)
>  #endif
>  }
>
> +static int validate_drawable_bbox(DisplayChannel *display, RedDrawable *drawable)
> +{
> +        DrawContext *context;
> +        uint32_t surface_id = drawable->surface_id;
> +
> +        /* surface_id must be validated before calling into
> +         * validate_drawable_bbox
> +         */
> +        if (!validate_surface(display, drawable->surface_id)) {
> +            return FALSE;
> +        }
> +        context = &display->surfaces[surface_id].context;
> +
> +        if (drawable->bbox.top < 0)
> +                return FALSE;
> +        if (drawable->bbox.left < 0)
> +                return FALSE;
> +        if (drawable->bbox.bottom < 0)
> +                return FALSE;
> +        if (drawable->bbox.right < 0)
> +                return FALSE;
> +        if (drawable->bbox.bottom > context->height)
> +                return FALSE;
> +        if (drawable->bbox.right > context->width)
> +                return FALSE;
> +
> +        return TRUE;
> +}
> +
> +Drawable *display_channel_get_drawable(DisplayChannel *display, uint8_t effect,
> +                                       RedDrawable *red_drawable, uint32_t group_id,
> +                                       uint32_t process_commands_generation)
> +{
> +    Drawable *drawable;
> +    int x;
> +
> +    if (!validate_drawable_bbox(display, red_drawable)) {
> +        return NULL;
> +    }
> +    for (x = 0; x < 3; ++x) {
> +        if (red_drawable->surface_deps[x] != -1
> +            && !validate_surface(display, red_drawable->surface_deps[x])) {
> +            return NULL;
> +        }
> +    }
> +
> +    drawable = display_channel_drawable_try_new(display, group_id, process_commands_generation);
> +    if (!drawable) {
> +        return NULL;
> +    }
> +
> +    drawable->tree_item.effect = effect;
> +    drawable->red_drawable = red_drawable_ref(red_drawable);
> +
> +    drawable->surface_id = red_drawable->surface_id;
> +    memcpy(drawable->surface_deps, red_drawable->surface_deps, sizeof(drawable->surface_deps));
> +
> +    return drawable;
> +}
> +
>  void display_channel_add_drawable(DisplayChannel *display, Drawable *drawable)
>  {
>      int success = FALSE, surface_id = drawable->surface_id;
> diff --git a/server/display-channel.h b/server/display-channel.h
> index 7187600..6c0862c 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -300,6 +300,11 @@ void                       display_channel_destroy_surfaces          (DisplayCha
>  void                       display_channel_destroy_surface           (DisplayChannel *display,
>                                                                        uint32_t surface_id);
>  uint32_t                   display_channel_generate_uid              (DisplayChannel *display);
> +Drawable *                 display_channel_get_drawable              (DisplayChannel *display,
> +                                                                      uint8_t effect,
> +                                                                      RedDrawable *red_drawable,
> +                                                                      uint32_t group_id,
> +                                                                      uint32_t process_commands_generation);
>  void                       display_channel_process_surface_cmd       (DisplayChannel *display,
>                                                                        RedSurfaceCmd *surface,
>                                                                        uint32_t group_id,
> diff --git a/server/red_worker.c b/server/red_worker.c
> index f14aaff..ff288e4 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -119,35 +119,6 @@ static int display_is_connected(RedWorker *worker)
>          &worker->display_channel->common.base));
>  }
>
> -static int validate_drawable_bbox(DisplayChannel *display, RedDrawable *drawable)
> -{
> -        DrawContext *context;
> -        uint32_t surface_id = drawable->surface_id;
> -
> -        /* surface_id must be validated before calling into
> -         * validate_drawable_bbox
> -         */
> -        if (!validate_surface(display, drawable->surface_id)) {
> -            return FALSE;
> -        }
> -        context = &display->surfaces[surface_id].context;
> -
> -        if (drawable->bbox.top < 0)
> -                return FALSE;
> -        if (drawable->bbox.left < 0)
> -                return FALSE;
> -        if (drawable->bbox.bottom < 0)
> -                return FALSE;
> -        if (drawable->bbox.right < 0)
> -                return FALSE;
> -        if (drawable->bbox.bottom > context->height)
> -                return FALSE;
> -        if (drawable->bbox.right > context->width)
> -                return FALSE;
> -
> -        return TRUE;
> -}
> -
>  static int cursor_is_connected(RedWorker *worker)
>  {
>      return worker->cursor_channel &&
> @@ -271,37 +242,6 @@ static inline int red_handle_self_bitmap(RedWorker *worker, Drawable *drawable)
>      return TRUE;
>  }
>
> -static Drawable *get_drawable(RedWorker *worker, uint8_t effect, RedDrawable *red_drawable,
> -                              uint32_t group_id)
> -{
> -    DisplayChannel *display = worker->display_channel;
> -    Drawable *drawable;
> -    int x;
> -
> -    if (!validate_drawable_bbox(display, red_drawable)) {
> -        return NULL;
> -    }
> -    for (x = 0; x < 3; ++x) {
> -        if (red_drawable->surface_deps[x] != -1
> -            && !validate_surface(display, red_drawable->surface_deps[x])) {
> -            return NULL;
> -        }
> -    }
> -
> -    drawable = display_channel_drawable_try_new(display, group_id, worker->process_commands_generation);
> -    if (!drawable) {
> -        return NULL;
> -    }
> -
> -    drawable->tree_item.effect = effect;
> -    drawable->red_drawable = red_drawable_ref(red_drawable);
> -
> -    drawable->surface_id = red_drawable->surface_id;
> -    memcpy(drawable->surface_deps, red_drawable->surface_deps, sizeof(drawable->surface_deps));
> -
> -    return drawable;
> -}
> -
>  static inline void add_to_surface_dependency(DisplayChannel *display, int depend_on_surface_id,
>                                               DependItem *depend_item, Drawable *drawable)
>  {
> @@ -362,7 +302,9 @@ static inline void red_process_draw(RedWorker *worker, RedDrawable *red_drawable
>  {
>      DisplayChannel *display = worker->display_channel;
>      int surface_id;
> -    Drawable *drawable = get_drawable(worker, red_drawable->effect, red_drawable, group_id);
> +    Drawable *drawable =
> +        display_channel_get_drawable(display, red_drawable->effect, red_drawable, group_id,
> +                                     worker->process_commands_generation);
>
>      if (!drawable) {
>          return;
> --
> 2.4.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

Acked-by: Fabiano Fidêncio <fidencio at redhat.com>

-- 
Fabiano Fidêncio


More information about the Spice-devel mailing list