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

Frediano Ziglio fziglio at redhat.com
Thu Dec 3 02:52:47 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>
> 

Merged

Frediano


More information about the Spice-devel mailing list