[Spice-devel] [PATCH 08/16] worker: move red_destroy_surface_item()
Frediano Ziglio
fziglio at redhat.com
Tue Nov 10 09:44:31 PST 2015
>
> On Tue, 2015-11-10 at 14:16 +0000, Frediano Ziglio wrote:
> > From: Marc-André Lureau <marcandre.lureau at gmail.com>
> >
> > ---
> > server/display-channel.c | 36 ++++++++++++++++++++++++++++++++++
> > server/display-channel.h | 19 ++++++++++++++++++
> > server/red_worker.c | 50 +-------------------------------------
> > ----------
> > 3 files changed, 56 insertions(+), 49 deletions(-)
> >
> > diff --git a/server/display-channel.c b/server/display-channel.c
> > index 8775496..b5d8830 100644
> > --- a/server/display-channel.c
> > +++ b/server/display-channel.c
> > @@ -226,6 +226,42 @@ void
> > dcc_push_monitors_config(DisplayChannelClient *dcc)
> > red_channel_client_push(&dcc->common.base);
> > }
> >
> > +static SurfaceDestroyItem *surface_destroy_item_new(RedChannel
> > *channel,
> > + uint32_t
> > surface_id)
> > +{
> > + SurfaceDestroyItem *destroy;
> > +
> > + destroy = spice_malloc(sizeof(SurfaceDestroyItem));
> > + destroy->surface_destroy.surface_id = surface_id;
> > + red_channel_pipe_item_init(channel, &destroy->pipe_item,
> > + PIPE_ITEM_TYPE_DESTROY_SURFACE);
> > +
> > + return destroy;
> > +}
> > +
> > +void dcc_push_destroy_surface(DisplayChannelClient *dcc, uint32_t
> > surface_id)
> > +{
> > + DisplayChannel *display;
> > + RedChannel *channel;
> > + SurfaceDestroyItem *destroy;
> > +
> > + if (!dcc) {
> > + return;
> > + }
> > +
> > + display = DCC_TO_DC(dcc);
> > + channel = RED_CHANNEL(display);
> > +
> > + if (COMMON_CHANNEL(display)->during_target_migrate ||
> > + !dcc->surface_client_created[surface_id]) {
> > + return;
> > + }
> > +
> > + dcc->surface_client_created[surface_id] = FALSE;
> > + destroy = surface_destroy_item_new(channel, surface_id);
> > + red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &destroy
> > ->pipe_item);
> > +}
> > +
> > int display_channel_get_streams_timeout(DisplayChannel *display)
> > {
> > int timeout = INT_MAX;
> > diff --git a/server/display-channel.h b/server/display-channel.h
> > index 24fb354..76e4d11 100644
> > --- a/server/display-channel.h
> > +++ b/server/display-channel.h
> > @@ -236,6 +236,8 @@ DisplayChannelClient* dcc_new
> > (DisplayCha
> >
> > uint32_t *caps,
> >
> > int num_caps);
> > void dcc_push_monitors_config
> > (DisplayChannelClient *dcc);
> > +void dcc_push_destroy_surface
> > (DisplayChannelClient *dcc,
> > +
> > uint32_t surface_id);
> >
> > typedef struct DrawablePipeItem {
> > RingItem base; /* link for a list of pipe items held by
> > Drawable */
> > @@ -313,6 +315,23 @@ struct DisplayChannel {
> > stat_info_t lz4_stat;
> > #endif
> > };
> > +typedef struct SurfaceDestroyItem {
> > + SpiceMsgSurfaceDestroy surface_destroy;
> > + PipeItem pipe_item;
> > +} SurfaceDestroyItem;
> > +
> > +typedef struct SurfaceCreateItem {
> > + SpiceMsgSurfaceCreate surface_create;
> > + PipeItem pipe_item;
> > +} SurfaceCreateItem;
> > +
> > +typedef struct UpgradeItem {
> > + PipeItem base;
> > + int refs;
> > + Drawable *drawable;
> > + SpiceClipRects *rects;
> > +} UpgradeItem;
> > +
>
>
> UpgradeItem seems unrelated to this change, and is only used in
> red_worker.c at this point.
>
> >
> > void display_channel_set_stream_video
> > (DisplayChannel *display,
> >
> > int stream_video);
> > diff --git a/server/red_worker.c b/server/red_worker.c
> > index 9e544c2..a51fe88 100644
> > --- a/server/red_worker.c
> > +++ b/server/red_worker.c
> > @@ -217,16 +217,6 @@ struct SpiceWatch {
> >
> > #define MAX_LZ_ENCODERS MAX_CACHE_CLIENTS
> >
> > -typedef struct SurfaceCreateItem {
> > - SpiceMsgSurfaceCreate surface_create;
> > - PipeItem pipe_item;
> > -} SurfaceCreateItem;
> > -
> > -typedef struct SurfaceDestroyItem {
> > - SpiceMsgSurfaceDestroy surface_destroy;
> > - PipeItem pipe_item;
> > -} SurfaceDestroyItem;
> > -
> > #define MAX_PIPE_SIZE 50
> >
> > #define WIDE_CLIENT_ACK_WINDOW 40
> > @@ -318,13 +308,6 @@ struct _Drawable {
> > } u;
> > };
> >
> > -typedef struct UpgradeItem {
> > - PipeItem base;
> > - int refs;
> > - Drawable *drawable;
> > - SpiceClipRects *rects;
> > -} UpgradeItem;
> > -
> > typedef struct DrawContext {
> > SpiceCanvas *canvas;
> > int canvas_draws_on_surface;
> > @@ -959,37 +942,6 @@ static void drawables_init(RedWorker *worker)
> > }
> >
> >
> > -static SurfaceDestroyItem *get_surface_destroy_item(RedChannel
> > *channel,
> > - uint32_t
> > surface_id)
> > -{
> > - SurfaceDestroyItem *destroy;
> > -
> > - destroy = spice_malloc(sizeof(SurfaceDestroyItem));
> > -
> > - destroy->surface_destroy.surface_id = surface_id;
> > -
> > - red_channel_pipe_item_init(channel,
> > - &destroy->pipe_item, PIPE_ITEM_TYPE_DESTROY_SURFACE);
> > -
> > - return destroy;
> > -}
> > -
> > -static inline void red_destroy_surface_item(RedWorker *worker,
> > - DisplayChannelClient *dcc, uint32_t surface_id)
> > -{
> > - SurfaceDestroyItem *destroy;
> > - RedChannel *channel;
> > -
> > - if (!dcc || worker->display_channel
> > ->common.during_target_migrate ||
> > - !dcc->surface_client_created[surface_id]) {
> > - return;
> > - }
> > - dcc->surface_client_created[surface_id] = FALSE;
> > - channel = RED_CHANNEL(worker->display_channel);
> > - destroy = get_surface_destroy_item(channel, surface_id);
> > - red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &destroy
> > ->pipe_item);
> > -}
> > -
> > static void stop_streams(DisplayChannel *display)
> > {
> > Ring *ring = &display->streams;
> > @@ -1037,7 +989,7 @@ static void red_surface_unref(RedWorker *worker,
> > uint32_t surface_id)
> > region_destroy(&surface->draw_dirty_region);
> > surface->context.canvas = NULL;
> > FOREACH_DCC(worker->display_channel, link, next, dcc) {
> > - red_destroy_surface_item(worker, dcc, surface_id);
> > + dcc_push_destroy_surface(dcc, surface_id);
> > }
> >
> > spice_warn_if(!ring_is_empty(&surface->depend_on_me));
>
>
>
> ACK without the UpgradeItem move
>
Updated and merged
Frediano
More information about the Spice-devel
mailing list