From f8f95e2dbd73d0d43211136e50a8d640f145872c Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 6 Nov 2013 23:47:30 +0100 Subject: OutputControl: reduce the number of OutputThread wakeups Wake up the OutputThread only if it hasn't already been woken up and if it isn't already in the playback loop. --- src/OutputThread.cxx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/OutputThread.cxx') diff --git a/src/OutputThread.cxx b/src/OutputThread.cxx index c6f2e4d30..30d3ba30f 100644 --- a/src/OutputThread.cxx +++ b/src/OutputThread.cxx @@ -510,6 +510,9 @@ ao_play(struct audio_output *ao) ao->chunk_finished = false; + assert(!ao->in_playback_loop); + ao->in_playback_loop = true; + while (chunk != nullptr && ao->command == AO_COMMAND_NONE) { assert(!ao->chunk_finished); @@ -525,6 +528,9 @@ ao_play(struct audio_output *ao) chunk = chunk->next; } + assert(ao->in_playback_loop); + ao->in_playback_loop = false; + ao->chunk_finished = true; ao->mutex.unlock(); @@ -656,8 +662,10 @@ audio_output_task(void *arg) chunks in the pipe */ continue; - if (ao->command == AO_COMMAND_NONE) + if (ao->command == AO_COMMAND_NONE) { + ao->woken_for_play = false; ao->cond.wait(ao->mutex); + } } } -- cgit v1.2.3