[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