<p><br>
><br>
> As a third parameter, add the number of samples to read/write in<br>
> every iteration. This will help slow CPUs.<br>
><br>
> Signed-off-by: David Henningsson <<a href="mailto:david.henningsson@canonical.com">david.henningsson@canonical.com</a>><br>
> ---<br>
>  src/tests/alsa-time-test.c | 22 +++++++++++++---------<br>
>  1 file changed, 13 insertions(+), 9 deletions(-)<br>
><br>
> diff --git a/src/tests/alsa-time-test.c b/src/tests/alsa-time-test.c<br>
> index 3c82fdc..5d75756 100644<br>
> --- a/src/tests/alsa-time-test.c<br>
> +++ b/src/tests/alsa-time-test.c<br>
> @@ -27,12 +27,14 @@ int main(int argc, char *argv[]) {<br>
>      unsigned periods = 2;<br>
>      snd_pcm_uframes_t boundary, buffer_size = 44100/10; /* 100s */<br>
>      int dir = 1;<br>
> +    int fillrate;<br>
>      struct timespec start, last_timestamp = { 0, 0 };<br>
>      uint64_t start_us, last_us = 0;<br>
>      snd_pcm_sframes_t last_avail = 0, last_delay = 0;<br>
>      struct pollfd *pollfds;<br>
>      int n_pollfd;<br>
>      int64_t sample_count = 0;<br>
> +    uint16_t *samples;<br>
>      struct sched_param sp;<br>
><br>
>      r = -1;<br>
> @@ -54,6 +56,10 @@ int main(int argc, char *argv[]) {<br>
><br>
>      dev = argc > 1 ? argv[1] : "front:AudioPCI";<br>
>      cap = argc > 2 ? atoi(argv[2]) : 0;<br>
> +    fillrate = argc > 3 ? atoi(argv[3]) : 1;<br>
> +<br>
> +    samples = calloc(fillrate, 2*sizeof(uint16_t));<br>
> +    assert(samples);<br>
><br>
>      if (cap == 0)<br>
>        r = snd_pcm_open(&pcm, dev, SND_PCM_STREAM_PLAYBACK, 0);<br>
> @@ -108,7 +114,7 @@ int main(int argc, char *argv[]) {<br>
><br>
>      r = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size);<br>
>      assert(r == 0);<br>
> -    r = snd_pcm_sw_params_set_start_threshold(pcm, swparams, buffer_size);<br>
> +    r = snd_pcm_sw_params_set_start_threshold(pcm, swparams, buffer_size - (buffer_size % fillrate));</p>
<p>Start threshold become zero when fillrate > buffer size</p>
<p>The program abort when fillrate > ( buffer_size / periods)</p>
<p>when drivers have hardware specific  constraints (e.g. some hda controllers have 128 bytes alignment step , periods_mins > 2, or period_bytes_max is less than 2205 * frame size</p>
<p>The buffer time may not be 1 seconds and 0.05 seconds period time</p>
<p>For sound card which can report DMA residue, when your fillrate are not multiple of DMA brust size, the elasped time between two successive result is not exactly the fillrate time but with deviation of  DMA  brust time<br>
time , </p>
<p>Do the program want  to find out<br>
1) whether driver really support arbitrary period size<br>
2) whether driver reprort DMA residue when the fillrate is less than period size</p>
<p>Not sure why the program always abort when using pulse plugin</p>