[pulseaudio-discuss] [PATCH 2/2] pstream: Optimise read of smaller packages
David Henningsson
david.henningsson at canonical.com
Sun Apr 7 02:59:58 PDT 2013
On 04/05/2013 09:44 PM, David Henningsson wrote:
> During a stream, most packets sent are either memblocks (with SHM info),
> or requests for more data. These are only slightly bigger than the
> header.
>
> This patch makes it possible to read these packages in one call to do_read,
> thus saving us an extra poll syscall.
>
> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
> ---
> src/pulsecore/pstream.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c
> index d92178f..c6f1302 100644
> --- a/src/pulsecore/pstream.c
> +++ b/src/pulsecore/pstream.c
> @@ -27,6 +27,7 @@
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> +#include <errno.h>
>
> #ifdef HAVE_NETINET_IN_H
> #include <netinet/in.h>
> @@ -652,6 +653,7 @@ static int do_read(pa_pstream *p) {
> pa_assert(p);
> pa_assert(PA_REFCNT_VALUE(p) > 0);
>
> +again:
> if (p->read.index < PA_PSTREAM_DESCRIPTOR_SIZE) {
> d = (uint8_t*) p->read.descriptor + p->read.index;
> l = PA_PSTREAM_DESCRIPTOR_SIZE - p->read.index;
> @@ -774,6 +776,10 @@ static int do_read(pa_pstream *p) {
> }
> }
>
> + /* Optimisation: See if we can read the payload too */
> + if ((p->read.data || p->read.memblock) && (r == PA_PSTREAM_DESCRIPTOR_SIZE))
> + goto again;
> +
> } else if (p->read.index > PA_PSTREAM_DESCRIPTOR_SIZE) {
> /* Frame payload available */
>
> @@ -894,6 +900,8 @@ fail:
It's probably better to do:
if (r == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))
r = 0;
else
r = -1;
> if (release_memblock)
> pa_memblock_release(release_memblock);
>
return r;
That way we don't have to make the assumption that pa_memblock_release
can't destroy errno.
> + if (r == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))
> + return 0; /* Let's just try again later, when socket is readable. */
> return -1;
> }
>
>
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list