From e938d4936fc36e278b05dab2850edfbbd3e044fa Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 5 Jun 2023 01:42:24 +0200 Subject: [PATCH] Further speed up Windows freewheel export --- libs/backends/portaudio/portaudio_backend.cc | 10 +++++++++- libs/backends/portaudio/portaudio_backend.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index 4a4ed2580d..82d38f0a6e 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -75,6 +75,7 @@ PortAudioBackend::PortAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _freewheel_ack (false) , _reinit_thread_callback (false) , _measure_latency (false) + , _freewheel_processed (0) , _cycle_count(0) , _total_deviation_us(0) , _max_deviation_us(0) @@ -949,6 +950,7 @@ PortAudioBackend::freewheel_process_thread() // tell the engine we're ready to GO. engine.freewheel_callback (_freewheeling); first_run = false; + _freewheel_processed = 0; _main_thread = pthread_self(); AudioEngine::thread_init_callback (this); _midiio->set_enabled(false); @@ -1487,6 +1489,8 @@ PortAudioBackend::blocking_process_thread () engine.freewheel_callback (_freewheel); if (!_freewheel) { _dsp_calc.reset (); + } else { + _freewheel_processed = 0; } } @@ -1663,7 +1667,11 @@ PortAudioBackend::blocking_process_freewheel() } _dsp_load = 1.0; - Glib::usleep(100); // don't hog cpu + _freewheel_processed += _samples_per_period; + if (_freewheel_processed > _samplerate) { + _freewheel_processed = 0; + Glib::usleep(100); // don't hog cpu + } return true; } diff --git a/libs/backends/portaudio/portaudio_backend.h b/libs/backends/portaudio/portaudio_backend.h index 60babf74c3..643e21294a 100644 --- a/libs/backends/portaudio/portaudio_backend.h +++ b/libs/backends/portaudio/portaudio_backend.h @@ -298,6 +298,7 @@ class PortAudioBackend : public AudioBackend, public PortEngineSharedImpl { bool _freewheel_ack; bool _reinit_thread_callback; bool _measure_latency; + int _freewheel_processed; ARDOUR::DSPLoadCalculator _dsp_calc;