[Spice-devel] [PATCH 03/15] worker: move red_process_draw to display-channel.c

Jonathon Jongsma jjongsma at redhat.com
Thu Dec 3 12:02:52 PST 2015


On Thu, 2015-12-03 at 16:26 +0000, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> Acked-by: Fabiano FidĂȘncio <fidencio at redhat.com>

I'll ACK it as well

Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


> ---
>  server/display-channel.c | 25 +++++++++++++++++++++----
>  server/display-channel.h |  7 ++-----
>  server/red_worker.c      | 20 ++------------------
>  3 files changed, 25 insertions(+), 27 deletions(-)
> 
> diff --git a/server/display-channel.c b/server/display-channel.c
> index 007512e..94c32e3 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -1098,9 +1098,9 @@ static int validate_drawable_bbox(DisplayChannel
> *display, RedDrawable *drawable
>   *
>   * @return initialized Drawable or NULL on failure
>   */
> -Drawable *display_channel_get_drawable(DisplayChannel *display, uint8_t
> effect,
> -                                       RedDrawable *red_drawable, uint32_t
> group_id,
> -                                       uint32_t process_commands_generation)
> +static 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;
> @@ -1145,7 +1145,7 @@ Drawable *display_channel_get_drawable(DisplayChannel
> *display, uint8_t effect,
>   * Add a Drawable to the items to draw.
>   * On failure the Drawable is not added.
>   */
> -void display_channel_add_drawable(DisplayChannel *display, Drawable
> *drawable)
> +static void display_channel_add_drawable(DisplayChannel *display, Drawable
> *drawable)
>  {
>      int success = FALSE, surface_id = drawable->surface_id;
>      RedDrawable *red_drawable = drawable->red_drawable;
> @@ -1195,6 +1195,23 @@ void display_channel_add_drawable(DisplayChannel
> *display, Drawable *drawable)
>  #endif
>  }
>  
> +void display_channel_process_draw(DisplayChannel *display, RedDrawable
> *red_drawable,
> +                                  uint32_t group_id, int
> process_commands_generation)
> +{
> +    Drawable *drawable =
> +        display_channel_get_drawable(display, red_drawable->effect,
> red_drawable, group_id,
> +                                     process_commands_generation);
> +
> +    if (!drawable) {
> +        return;
> +    }
> +
> +    display_channel_add_drawable(display, drawable);
> +
> +    display_channel_drawable_unref(display, drawable);
> +}
> +
> +
>  int display_channel_wait_for_migrate_data(DisplayChannel *display)
>  {
>      uint64_t end_time = red_get_monotonic_time() +
> DISPLAY_CLIENT_MIGRATE_DATA_TIMEOUT;
> diff --git a/server/display-channel.h b/server/display-channel.h
> index 83b50ca..a990e09 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -286,8 +286,6 @@ void                       display_channel_surface_unref  
>            (DisplayCha
>                                                                       
>  uint32_t surface_id);
>  bool                       display_channel_surface_has_canvas       
>  (DisplayChannel *display,
>                                                                       
>  uint32_t surface_id);
> -void                       display_channel_add_drawable             
>  (DisplayChannel *display,
> -                                                                     
>  Drawable *drawable);
>  void                       display_channel_current_flush            
>  (DisplayChannel *display,
>                                                                        int
> surface_id);
>  int                        display_channel_wait_for_migrate_data    
>  (DisplayChannel *display);
> @@ -300,11 +298,10 @@ 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,
> +void                       display_channel_process_draw             
>  (DisplayChannel *display,
>                                                                       
>  RedDrawable *red_drawable,
>                                                                       
>  uint32_t group_id,
> -                                                                     
>  uint32_t process_commands_generation);
> +                                                                      int
> 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 1204bb1..9ba57e4 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -165,23 +165,6 @@ void red_drawable_unref(RedWorker *worker, RedDrawable
> *red_drawable,
>      free(red_drawable);
>  }
>  
> -static inline void red_process_draw(RedWorker *worker, RedDrawable
> *red_drawable,
> -                                    uint32_t group_id)
> -{
> -    DisplayChannel *display = worker->display_channel;
> -    Drawable *drawable =
> -        display_channel_get_drawable(display, red_drawable->effect,
> red_drawable, group_id,
> -                                     worker->process_display_generation);
> -
> -    if (!drawable) {
> -        return;
> -    }
> -
> -    display_channel_add_drawable(worker->display_channel, drawable);
> -
> -    display_channel_drawable_unref(display, drawable);
> -}
> -
>  static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size, int
> *ring_is_empty)
>  {
>      QXLCommandExt ext_cmd;
> @@ -284,7 +267,8 @@ static int red_process_display(RedWorker *worker, uint32_t
> max_pipe_size, int *r
>  
>              if (!red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
>                                   red_drawable, ext_cmd.cmd.data,
> ext_cmd.flags)) {
> -                red_process_draw(worker, red_drawable, ext_cmd.group_id);
> +                display_channel_process_draw(worker->display_channel,
> red_drawable, ext_cmd.group_id,
> +                                             worker
> ->process_display_generation);
>              }
>              // release the red_drawable
>              red_drawable_unref(worker, red_drawable, ext_cmd.group_id);


More information about the Spice-devel mailing list