mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
alsa: Fix "Scheduling delay of..." message
The tsched_watermark is in bytes, not in usecs. Fix this by introducing a new variable, and also use that variable in some places for optimisation. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This commit is contained in:
parent
f6291d974a
commit
e2d1421f61
2 changed files with 25 additions and 18 deletions
|
|
@ -129,6 +129,7 @@ struct userdata {
|
|||
|
||||
pa_usec_t watermark_dec_not_before;
|
||||
pa_usec_t min_latency_ref;
|
||||
pa_usec_t tsched_watermark_usec;
|
||||
|
||||
pa_memchunk memchunk;
|
||||
|
||||
|
|
@ -318,6 +319,8 @@ static void fix_tsched_watermark(struct userdata *u) {
|
|||
|
||||
if (u->tsched_watermark < u->min_wakeup)
|
||||
u->tsched_watermark = u->min_wakeup;
|
||||
|
||||
u->tsched_watermark_usec = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
|
||||
}
|
||||
|
||||
static void increase_watermark(struct userdata *u) {
|
||||
|
|
@ -334,7 +337,7 @@ static void increase_watermark(struct userdata *u) {
|
|||
|
||||
if (old_watermark != u->tsched_watermark) {
|
||||
pa_log_info("Increasing wakeup watermark to %0.2f ms",
|
||||
(double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
|
||||
(double) u->tsched_watermark_usec / PA_USEC_PER_MSEC);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -384,7 +387,7 @@ static void decrease_watermark(struct userdata *u) {
|
|||
|
||||
if (old_watermark != u->tsched_watermark)
|
||||
pa_log_info("Decreasing wakeup watermark to %0.2f ms",
|
||||
(double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
|
||||
(double) u->tsched_watermark_usec / PA_USEC_PER_MSEC);
|
||||
|
||||
/* We don't change the latency range*/
|
||||
|
||||
|
|
@ -406,7 +409,7 @@ static void hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*p
|
|||
if (usec == (pa_usec_t) -1)
|
||||
usec = pa_bytes_to_usec(u->hwbuf_size, &u->sink->sample_spec);
|
||||
|
||||
wm = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
|
||||
wm = u->tsched_watermark_usec;
|
||||
|
||||
if (wm > usec)
|
||||
wm = usec/2;
|
||||
|
|
@ -677,7 +680,7 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
|
|||
pa_usec_t underrun_sleep = pa_bytes_to_usec_round_up(input_underrun, &u->sink->sample_spec);
|
||||
|
||||
*sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec);
|
||||
process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
|
||||
process_usec = u->tsched_watermark_usec;
|
||||
|
||||
if (*sleep_usec > process_usec)
|
||||
*sleep_usec -= process_usec;
|
||||
|
|
@ -832,7 +835,7 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
|
|||
pa_usec_t underrun_sleep = pa_bytes_to_usec_round_up(input_underrun, &u->sink->sample_spec);
|
||||
|
||||
*sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec);
|
||||
process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
|
||||
process_usec = u->tsched_watermark_usec;
|
||||
|
||||
if (*sleep_usec > process_usec)
|
||||
*sleep_usec -= process_usec;
|
||||
|
|
@ -1049,7 +1052,7 @@ static void reset_watermark(struct userdata *u, size_t tsched_watermark, pa_samp
|
|||
}
|
||||
|
||||
pa_log_info("Time scheduling watermark is %0.2fms",
|
||||
(double) pa_bytes_to_usec(u->tsched_watermark, ss) / PA_USEC_PER_MSEC);
|
||||
(double) u->tsched_watermark_usec / PA_USEC_PER_MSEC);
|
||||
}
|
||||
|
||||
/* Called from IO context */
|
||||
|
|
@ -1823,10 +1826,10 @@ static void thread_func(void *userdata) {
|
|||
(double) rtpoll_sleep / PA_USEC_PER_MSEC, (double) real_sleep / PA_USEC_PER_MSEC,
|
||||
(double) ((int64_t) real_sleep - (int64_t) rtpoll_sleep) / PA_USEC_PER_MSEC);
|
||||
#endif
|
||||
if (u->use_tsched && real_sleep > rtpoll_sleep + u->tsched_watermark)
|
||||
pa_log_info("Scheduling delay of %0.2fms > %0.2fms, you might want to investigate this to improve latency...",
|
||||
if (u->use_tsched && real_sleep > rtpoll_sleep + u->tsched_watermark_usec)
|
||||
pa_log_info("Scheduling delay of %0.2f ms > %0.2f ms, you might want to investigate this to improve latency...",
|
||||
(double) (real_sleep - rtpoll_sleep) / PA_USEC_PER_MSEC,
|
||||
(double) (u->tsched_watermark) / PA_USEC_PER_MSEC);
|
||||
(double) (u->tsched_watermark_usec) / PA_USEC_PER_MSEC);
|
||||
}
|
||||
|
||||
if (u->sink->flags & PA_SINK_DEFERRED_VOLUME)
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ struct userdata {
|
|||
|
||||
pa_usec_t watermark_dec_not_before;
|
||||
pa_usec_t min_latency_ref;
|
||||
pa_usec_t tsched_watermark_usec;
|
||||
|
||||
char *device_name; /* name of the PCM device */
|
||||
char *control_device; /* name of the control device */
|
||||
|
|
@ -293,6 +294,8 @@ static void fix_tsched_watermark(struct userdata *u) {
|
|||
|
||||
if (u->tsched_watermark < u->min_wakeup)
|
||||
u->tsched_watermark = u->min_wakeup;
|
||||
|
||||
u->tsched_watermark_usec = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
|
||||
}
|
||||
|
||||
static void increase_watermark(struct userdata *u) {
|
||||
|
|
@ -309,7 +312,7 @@ static void increase_watermark(struct userdata *u) {
|
|||
|
||||
if (old_watermark != u->tsched_watermark) {
|
||||
pa_log_info("Increasing wakeup watermark to %0.2f ms",
|
||||
(double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
|
||||
(double) u->tsched_watermark_usec / PA_USEC_PER_MSEC);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -359,7 +362,7 @@ static void decrease_watermark(struct userdata *u) {
|
|||
|
||||
if (old_watermark != u->tsched_watermark)
|
||||
pa_log_info("Decreasing wakeup watermark to %0.2f ms",
|
||||
(double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
|
||||
(double) u->tsched_watermark_usec / PA_USEC_PER_MSEC);
|
||||
|
||||
/* We don't change the latency range*/
|
||||
|
||||
|
|
@ -381,7 +384,7 @@ static void hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*p
|
|||
if (usec == (pa_usec_t) -1)
|
||||
usec = pa_bytes_to_usec(u->hwbuf_size, &u->source->sample_spec);
|
||||
|
||||
wm = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
|
||||
wm = u->tsched_watermark_usec;
|
||||
|
||||
if (wm > usec)
|
||||
wm = usec/2;
|
||||
|
|
@ -625,7 +628,7 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
|
|||
|
||||
if (u->use_tsched) {
|
||||
*sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec);
|
||||
process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
|
||||
process_usec = u->tsched_watermark_usec;
|
||||
|
||||
if (*sleep_usec > process_usec)
|
||||
*sleep_usec -= process_usec;
|
||||
|
|
@ -755,7 +758,7 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
|
|||
|
||||
if (u->use_tsched) {
|
||||
*sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec);
|
||||
process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
|
||||
process_usec = u->tsched_watermark_usec;
|
||||
|
||||
if (*sleep_usec > process_usec)
|
||||
*sleep_usec -= process_usec;
|
||||
|
|
@ -941,7 +944,7 @@ static void reset_watermark(struct userdata *u, size_t tsched_watermark, pa_samp
|
|||
}
|
||||
|
||||
pa_log_info("Time scheduling watermark is %0.2fms",
|
||||
(double) pa_bytes_to_usec(u->tsched_watermark, ss) / PA_USEC_PER_MSEC);
|
||||
(double) u->tsched_watermark_usec / PA_USEC_PER_MSEC);
|
||||
}
|
||||
|
||||
/* Called from IO context */
|
||||
|
|
@ -1534,9 +1537,10 @@ static void thread_func(void *userdata) {
|
|||
(double) rtpoll_sleep / PA_USEC_PER_MSEC, (double) real_sleep / PA_USEC_PER_MSEC,
|
||||
(double) ((int64_t) real_sleep - (int64_t) rtpoll_sleep) / PA_USEC_PER_MSEC);
|
||||
#endif
|
||||
if (u->use_tsched && real_sleep > rtpoll_sleep + u->tsched_watermark)
|
||||
pa_log_info("Scheduling delay of %0.2fms, you might want to investigate this to improve latency...",
|
||||
(double) (real_sleep - rtpoll_sleep) / PA_USEC_PER_MSEC);
|
||||
if (u->use_tsched && real_sleep > rtpoll_sleep + u->tsched_watermark_usec)
|
||||
pa_log_info("Scheduling delay of %0.2f ms > %0.2f ms, you might want to investigate this to improve latency...",
|
||||
(double) (real_sleep - rtpoll_sleep) / PA_USEC_PER_MSEC,
|
||||
(double) (u->tsched_watermark_usec) / PA_USEC_PER_MSEC);
|
||||
}
|
||||
|
||||
if (u->source->flags & PA_SOURCE_DEFERRED_VOLUME)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue