[Spice-devel] [PATCH 08/18] worker: display_channel_flush_all_surfaces

Fabiano Fidêncio fabiano at fidencio.org
Thu Nov 19 01:03:24 PST 2015


On Wed, Nov 18, 2015 at 5:17 PM, Frediano Ziglio <fziglio at redhat.com> wrote:
> From: Marc-André Lureau <marcandre.lureau at gmail.com>
>
> ---
>  server/display-channel.c | 11 +++++++++++
>  server/display-channel.h |  1 +
>  server/red_worker.c      | 22 +++-------------------
>  3 files changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/server/display-channel.c b/server/display-channel.c
> index 1702bd6..ce973c5 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -838,3 +838,14 @@ int display_channel_wait_for_migrate_data(DisplayChannel *display)
>      }
>      return FALSE;
>  }
> +
> +void display_channel_flush_all_surfaces(DisplayChannel *display)
> +{
> +    int x;
> +
> +    for (x = 0; x < NUM_SURFACES; ++x) {
> +        if (display->surfaces[x].context.canvas) {
> +            display_channel_current_flush(display, x);
> +        }
> +    }
> +}
> diff --git a/server/display-channel.h b/server/display-channel.h
> index 595ced8..afb9ec5 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -272,6 +272,7 @@ int                        display_channel_add_drawable              (DisplayCha
>  void                       display_channel_current_flush             (DisplayChannel *display,
>                                                                        int surface_id);
>  int                        display_channel_wait_for_migrate_data     (DisplayChannel *display);
> +void                       display_channel_flush_all_surfaces        (DisplayChannel *display);
>
>  static inline int is_equal_path(SpicePath *path1, SpicePath *path2)
>  {
> diff --git a/server/red_worker.c b/server/red_worker.c
> index de9117a..51352a8 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -6204,28 +6204,12 @@ static void handle_dev_destroy_primary_surface_async(void *opaque, void *payload
>      destroy_primary_surface(worker, surface_id);
>  }
>
> -static void flush_all_surfaces(DisplayChannel *display)
> -{
> -    int x;
> -
> -    for (x = 0; x < NUM_SURFACES; ++x) {
> -        if (display->surfaces[x].context.canvas) {
> -            display_channel_current_flush(display, x);
> -        }
> -    }
> -}
> -
> -static void dev_flush_surfaces(RedWorker *worker)
> -{
> -    flush_all_qxl_commands(worker);
> -    flush_all_surfaces(worker->display_channel);
> -}
> -
>  static void handle_dev_flush_surfaces_async(void *opaque, void *payload)
>  {
>      RedWorker *worker = opaque;
>
> -    dev_flush_surfaces(worker);
> +    flush_all_qxl_commands(worker);
> +    display_channel_flush_all_surfaces(worker->display_channel);
>  }
>
>  static void handle_dev_stop(void *opaque, void *payload)
> @@ -6236,7 +6220,7 @@ static void handle_dev_stop(void *opaque, void *payload)
>      spice_assert(worker->running);
>      worker->running = FALSE;
>      red_display_clear_glz_drawables(worker->display_channel);
> -    flush_all_surfaces(worker->display_channel);
> +    display_channel_flush_all_surfaces(worker->display_channel);
>      /* todo: when the waiting is expected to take long (slow connection and
>       * overloaded pipe), don't wait, and in case of migration,
>       * purge the pipe, send destroy_all_surfaces
> --
> 2.4.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

ACK!

-- 
Fabiano Fidêncio


More information about the Spice-devel mailing list