[Spice-devel] [PATCH spice-server 1/3] red_worker: cleanup red_clear_surface_drawables_from_pipes

Marc-André Lureau marcandre.lureau at gmail.com
Thu Sep 26 08:00:14 PDT 2013


ack

On Thu, Sep 26, 2013 at 4:55 PM, Yonit Halperin <yhalperi at redhat.com> wrote:
> (1) merge 'force' and 'wait_for_outgoing_item' to one parameter.
>     'wait_for_outgoing_item' is a derivative of 'force'.
> (2) move the call to red_wait_outgoing_item to red_clear_surface_drawables_from_pipe
> ---
>  server/red_worker.c | 30 ++++++++++++++++++------------
>  1 file changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 0c611d0..9cfacfa 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -2004,7 +2004,7 @@ static void red_current_clear(RedWorker *worker, int surface_id)
>  }
>
>  static void red_clear_surface_drawables_from_pipe(DisplayChannelClient *dcc, int surface_id,
> -                                                  int force)
> +                                                  int wait_if_used)
>  {
>      Ring *ring;
>      PipeItem *item;
> @@ -2054,7 +2054,7 @@ static void red_clear_surface_drawables_from_pipe(DisplayChannelClient *dcc, int
>
>          if (depend_found) {
>              spice_debug("surface %d dependent item found %p, %p", surface_id, drawable, item);
> -            if (force) {
> +            if (wait_if_used) {
>                  break;
>              } else {
>                  return;
> @@ -2062,24 +2062,30 @@ static void red_clear_surface_drawables_from_pipe(DisplayChannelClient *dcc, int
>          }
>      }
>
> +    if (!wait_if_used) {
> +        return;
> +    }
> +
>      if (item) {
>          red_channel_client_wait_pipe_item_sent(&dcc->common.base, item);
> +    } else {
> +        /*
> +         * in case that the pipe didn't contain any item that is dependent on the surface, but
> +         * there is one during sending.
> +         */
> +        red_wait_outgoing_item(&dcc->common.base);
>      }
>  }
>
> -static void red_clear_surface_drawables_from_pipes(RedWorker *worker, int surface_id,
> -    int force, int wait_for_outgoing_item)
> +static void red_clear_surface_drawables_from_pipes(RedWorker *worker,
> +                                                   int surface_id,
> +                                                   int wait_if_used)
>  {
>      RingItem *item, *next;
>      DisplayChannelClient *dcc;
>
>      WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) {
> -        red_clear_surface_drawables_from_pipe(dcc, surface_id, force);
> -        if (wait_for_outgoing_item) {
> -            // in case that the pipe didn't contain any item that is dependent on the surface, but
> -            // there is one during sending.
> -            red_wait_outgoing_item(&dcc->common.base);
> -        }
> +        red_clear_surface_drawables_from_pipe(dcc, surface_id, wait_if_used);
>      }
>  }
>
> @@ -4248,7 +4254,7 @@ static inline void red_process_surface(RedWorker *worker, RedSurfaceCmd *surface
>             otherwise "current" will hold items that other drawables may depend on, and then
>             red_current_clear will remove them from the pipe. */
>          red_current_clear(worker, surface_id);
> -        red_clear_surface_drawables_from_pipes(worker, surface_id, FALSE, FALSE);
> +        red_clear_surface_drawables_from_pipes(worker, surface_id, FALSE);
>          red_destroy_surface(worker, surface_id);
>          break;
>      default:
> @@ -10921,7 +10927,7 @@ static inline void destroy_surface_wait(RedWorker *worker, int surface_id)
>         otherwise "current" will hold items that other drawables may depend on, and then
>         red_current_clear will remove them from the pipe. */
>      red_current_clear(worker, surface_id);
> -    red_clear_surface_drawables_from_pipes(worker, surface_id, TRUE, TRUE);
> +    red_clear_surface_drawables_from_pipes(worker, surface_id, TRUE);
>  }
>
>  static void dev_destroy_surface_wait(RedWorker *worker, uint32_t surface_id)
> --
> 1.8.1.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel



-- 
Marc-André Lureau


More information about the Spice-devel mailing list