[Spice-devel] [PATCH spice-server 2/2] sound: Use memcpy instead of manually copy volume array
Frediano Ziglio
fziglio at redhat.com
Wed Feb 15 17:26:52 UTC 2017
>
> On Wed, 2017-02-15 at 12:07 -0500, Frediano Ziglio wrote:
> > >
> > > On Thu, Feb 02, 2017 at 04:29:37PM +0000, Frediano Ziglio wrote:
> > > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > > > ---
> > > > server/sound.c | 6 ++----
> > > > 1 file changed, 2 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/server/sound.c b/server/sound.c
> > > > index 7c36174..b692646 100644
> > > > --- a/server/sound.c
> > > > +++ b/server/sound.c
> > > > @@ -384,7 +384,6 @@ static int
> > > > snd_playback_send_migrate(PlaybackChannelClient *client)
> > > > static int snd_send_volume(SndChannelClient *client, uint32_t
> > > > cap, int
> > > > msg)
> > > > {
> > > > SpiceMsgAudioVolume *vol;
> > > > - uint8_t c;
> > > > RedChannelClient *rcc = RED_CHANNEL_CLIENT(client);
> > > > SpiceMarshaller *m =
> > > > red_channel_client_get_marshaller(rcc);
> > > > SndChannel *channel =
> > > > SND_CHANNEL(red_channel_client_get_channel(rcc));
> > > > @@ -398,9 +397,8 @@ static int snd_send_volume(SndChannelClient
> > > > *client,
> > > > uint32_t cap, int msg)
> > > > st->volume_nchannels * sizeof (uint16_t));
> > > > red_channel_client_init_send_data(rcc, msg);
> > > > vol->nchannels = st->volume_nchannels;
> > > > - for (c = 0; c < st->volume_nchannels; ++c) {
> > > > - vol->volume[c] = st->volume[c];
> > > > - }
> > > > + SPICE_VERIFY(sizeof(vol->volume[0]) == sizeof(st-
> > > > >volume[0]));
> > > > + memcpy(vol->volume, st->volume, sizeof(st->volume[0]) *
> > > > st->volume_nchannels);
> > >
> > > I think I prefer the loop version (easier to read).
> > > If you really insist on having the memcpy version,
> > > Acked-by: Christophe Fergeau <cfergeau at redhat.com>
> > >
> >
> > Let's size decide!
> >
> > Before:
> > text data bss dec hex
> > filename
> > 16588 0 96 16684 412c
> > server/.libs/sound.o
> >
> > After:
> > text data bss dec hex
> > filename
> > 16684 0 96 16780 418c
> > server/.libs/sound.o
> >
> I guess it is due to the SPICE_VERIFY usage
>
No, SPICE_VERIFY is a compile time check, I verified, it
take 0 byte.
I think that when gcc when see memcpy it thinks it must do the
more fast thing and inline the memcpy to optimize large
memory copies.
Frediano
More information about the Spice-devel
mailing list