[Spice-devel] [PATCH v2 1/2] Improve encapsulation of DisplayChannel
Frediano Ziglio
fziglio at redhat.com
Fri Sep 16 12:47:37 UTC 2016
> >
> > Add a couple new functions to the header so that they can be called by
> > other objects rather than poking into the internals of the struct.
> > ---
> > server/dcc-send.c | 16 +++++------
> > server/display-channel.c | 71
> > ++++++++++++++++++++++++++++++++++++++++++++----
> > server/display-channel.h | 37 +++++++++++++------------
> > server/red-worker.c | 44 ++++++------------------------
> > server/stream.c | 18 ++++++------
> > 5 files changed, 109 insertions(+), 77 deletions(-)
> >
> ....
> > diff --git a/server/display-channel.c b/server/display-channel.c
> > index 108e69b..56bb029 100644
> > --- a/server/display-channel.c
> > +++ b/server/display-channel.c
> > @@ -203,6 +203,13 @@ void display_channel_surface_unref(DisplayChannel
> > *display, uint32_t surface_id)
> > spice_warn_if_fail(ring_is_empty(&surface->depend_on_me));
> > }
> >
> > +/* TODO: perhaps rename to "ready" or "realized" ? */
> > +bool display_channel_surface_has_canvas(DisplayChannel *display,
> > + uint32_t surface_id)
> > +{
> > + return display->surfaces[surface_id].context.canvas != NULL;
> > +}
> > +
>
> I honestly prefer bool and true/false but we decided to use gboolean and not
> bool.
> This function is mainly doing the same think of validate_surface without
> the logging stuff.
> Perhaps adding a flag "warnings" to validate_surface is enough?
>
>
> ...
>
> > diff --git a/server/display-channel.h b/server/display-channel.h
> > index 7b71480..022cd93 100644
> > --- a/server/display-channel.h
> > +++ b/server/display-channel.h
> > @@ -208,10 +208,17 @@ struct DisplayChannel {
> > ImageEncoderSharedData encoder_shared_data;
> > };
> >
> > -static inline int get_stream_id(DisplayChannel *display, Stream *stream)
> > -{
> > - return (int)(stream - display->streams_buf);
> > -}
> > +
> > +#define FOREACH_DCC(channel, _link, _next, _data) \
> > + for (_link = (channel ? RED_CHANNEL(channel)->clients : NULL), \
> > + _next = (_link ? _link->next : NULL), \
> > + _data = (_link ? _link->data : NULL); \
> > + _link; \
> > + _link = _next, \
> > + _next = (_link ? _link->next : NULL), \
> > + _data = (_link ? _link->data : NULL))
> > +
> > +int display_channel_get_stream_id(DisplayChannel *display, Stream
> > *stream);
> >
> > typedef struct RedSurfaceDestroyItem {
> > RedPipeItem pipe_item;
> > @@ -258,6 +265,8 @@ void
> > display_channel_compress_stats_print (const Disp
> > void display_channel_compress_stats_reset
> > (DisplayChannel *display);
> > void display_channel_surface_unref
> > (DisplayChannel *display,
> > uint32_t
> > surface_id);
> > +bool display_channel_surface_has_canvas
> > (DisplayChannel *display,
> > +
>
> Although this is consistent with the rest it does not follow our style.
>
> > uint32_t
> > surface_id);
> > void display_channel_current_flush
> > (DisplayChannel *display,
> > int
> > surface_id);
> > int display_channel_wait_for_migrate_data
> > (DisplayChannel *display);
> ...
>
Actually.
Would not be easier to have a
RedSurface *display_channel_get_surface(DisplayChannel *display, uint32_t surface_id);
which check surface_id and canvas and return the valid surface or NULL?
This at the same time replace validation of surface ids and accessing surfaces
array inside DisplayChannel.
Personally I don't like that much the display_channel_surface_has_canvas as
it gives implementation detail to the user which could ignore the presence
of a "canvas" in the surface.
Frediano
More information about the Spice-devel
mailing list