[Spice-devel] [PATCH 02/22] worker: move get_drawable to display-channel.c
Fabiano Fidêncio
fabiano at fidencio.org
Wed Dec 2 08:38:44 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>
--
Fabiano Fidêncio
More information about the Spice-devel
mailing list