[Spice-devel] [PATCH] Remove X == TRUE tests for non-boolean values
Frediano Ziglio
fziglio at redhat.com
Mon Feb 27 16:10:54 UTC 2017
> > On 27 Feb 2017, at 13:12, Christophe Fergeau < cfergeau at redhat.com > wrote:
>
> > On Mon, Feb 27, 2017 at 06:58:47AM -0500, Frediano Ziglio wrote:
>
> > > > Using X == TRUE is fragile, since the input value is a uint8_t. It
> > > > would
> > > > be
> > >
> >
>
> > > > surprising if the value was set to 2 or 0xFF and the test failed.
> > >
> >
>
> > > > Signed-off-by: Christophe de Dinechin < dinechin at redhat.com >
> > >
> >
>
> > > Acked-by: Frediano Ziglio < fziglio at redhat.com >
> >
>
> > This apparently is going to cause warnings with gcc 7, see
>
> > https://www.redhat.com/archives/libvir-list/2017-February/msg01199.html
>
> > if (dcc->priv->surface_client_created[surface_id] != 0) {} should work,
>
> > or
>
> > diff --git a/server/dcc-private.h b/server/dcc-private.h
>
> > index 64b32a7..1cf3b0d 100644
>
> > --- a/server/dcc-private.h
>
> > +++ b/server/dcc-private.h
>
> > @@ -51,7 +51,7 @@ struct DisplayChannelClientPrivate
>
> > int num_pixmap_cache_items;
>
> > } send_data;
>
> > - uint8_t surface_client_created[NUM_SURFACES];
>
> > + bool surface_client_created[NUM_SURFACES];
>
> > QRegion surface_client_lossy_region[NUM_SURFACES];
>
> > StreamAgent stream_agents[NUM_STREAMS];
>
> > which seems to be a more accurate type for 'surface_client_created’.
>
> Looking at the declaration, I just noticed we pre-allocate 10000 surfaces.
> Why is this not dynamic allocation? Is it sane to allocate 250K statically
> with each DisplayChannelClientPrivate?
I think mostly old style pool allocations. Considering that usually we use only 1 surface would be indeed much smaller.
> I’m tempted to replace this with a dynamic array of QRegion *, where a
> non-NULL pointer indicates that the client has been created. OK with that? I
> expect some operations will be faster because they won’t iterate
I would use a new structure like
typedef struct {
QRegion region;
} RedClientSurfaceInfo;
make source code a bit longer (not the binary) but can be easily extended and it's easier to
understand a dcc->client_surface_info[i] != NULL than a dcc->surface_client_lossy_region[i] != NULL.
> over 10000 mostly empty surfaces. There will be one extra indirection when
> accessing the surface_client_lossy region, but x86_64 became pretty darn
> good at chasing pointers like that thanks to C++ vtables ;-)
Last sentence is a bit cryptic I think :-)
Could be true.
I don't think the extra indirection is a big deal, it's mostly used on surface/channel creation/destroying.
> Christophe
> > Chistophe
>
> > > > ---
> > >
> >
>
> > > > server/dcc.c | 4 ++--
> > >
> >
>
> > > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> >
>
> > > > diff --git a/server/dcc.c b/server/dcc.c
> > >
> >
>
> > > > index afe37b1..7cfa72b 100644
> > >
> >
>
> > > > --- a/server/dcc.c
> > >
> >
>
> > > > +++ b/server/dcc.c
> > >
> >
>
> > > > @@ -398,7 +398,7 @@ static void
> > >
> >
>
> > > > add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
> > >
> >
>
> > > > surface_id = drawable->surface_deps[x];
> > >
> >
>
> > > > if (surface_id != -1) {
> > >
> >
>
> > > > - if (dcc->priv->surface_client_created[surface_id] == TRUE) {
> > >
> >
>
> > > > + if (dcc->priv->surface_client_created[surface_id]) {
> > >
> >
>
> > > > continue;
> > >
> >
>
> > > > }
> > >
> >
>
> > > > dcc_create_surface(dcc, surface_id);
> > >
> >
>
> > > > @@ -407,7 +407,7 @@ static void
> > >
> >
>
> > > > add_drawable_surface_images(DisplayChannelClient *dcc, Drawable *dra
> > >
> >
>
> > > > }
> > >
> >
>
> > > > }
> > >
> >
>
> > > > - if (dcc->priv->surface_client_created[drawable->surface_id] == TRUE)
> > > > {
> > >
> >
>
> > > > + if (dcc->priv->surface_client_created[drawable->surface_id]) {
> > >
> >
>
> > > > return;
> > >
> >
>
> > > > }
> > >
> >
>
Frediano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170227/d5062f85/attachment.html>
More information about the Spice-devel
mailing list