DSP load calculation: favor peak over average.
This commit is contained in:
parent
729bc00f13
commit
e3cd57ecb6
@ -1433,7 +1433,7 @@ AlsaAudioBackend::main_process_thread ()
|
||||
_pcmi->pcm_start ();
|
||||
int no_proc_errors = 0;
|
||||
const int bailout = 2 * _samplerate / _samples_per_period;
|
||||
const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
|
||||
const int64_t nominal_time = 1e6 * _samples_per_period / _samplerate;
|
||||
|
||||
manager.registration_callback();
|
||||
manager.graph_order_callback();
|
||||
@ -1539,7 +1539,14 @@ AlsaAudioBackend::main_process_thread ()
|
||||
/* calculate DSP load */
|
||||
clock2 = g_get_monotonic_time();
|
||||
const int64_t elapsed_time = clock2 - clock1;
|
||||
_dsp_load = elapsed_time / (float) nomial_time;
|
||||
// low pass filter
|
||||
const float load = elapsed_time / (float) nominal_time;
|
||||
if (load > _dsp_load) {
|
||||
_dsp_load = load;
|
||||
} else {
|
||||
const float a = .1 * _samples_per_period / _samplerate;
|
||||
_dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12;
|
||||
}
|
||||
}
|
||||
|
||||
if (xrun && (_pcmi->capt_xrun() > 0 || _pcmi->play_xrun() > 0)) {
|
||||
|
@ -1584,7 +1584,14 @@ CoreAudioBackend::process_callback (const uint32_t n_samples, const uint64_t hos
|
||||
/* calc DSP load. */
|
||||
clock2 = g_get_monotonic_time();
|
||||
const int64_t elapsed_time = clock2 - clock1;
|
||||
_dsp_load = elapsed_time / nominal_time;
|
||||
// low pass filter
|
||||
const float load = elapsed_time / (float) nominal_time;
|
||||
if (load > _dsp_load) {
|
||||
_dsp_load = load;
|
||||
} else {
|
||||
const float a = .1 * _samples_per_period / _samplerate;
|
||||
_dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12;
|
||||
}
|
||||
|
||||
pthread_mutex_unlock (&_process_callback_mutex);
|
||||
return 0;
|
||||
|
@ -1224,7 +1224,7 @@ DummyAudioBackend::main_process_thread ()
|
||||
}
|
||||
|
||||
if (!_freewheel) {
|
||||
const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
|
||||
const int64_t nominal_time = 1e6 * _samples_per_period / _samplerate;
|
||||
clock2 = _x_get_monotonic_usec();
|
||||
#ifdef PLATFORM_WINDOWS
|
||||
bool win_timers_ok = true;
|
||||
@ -1234,7 +1234,7 @@ DummyAudioBackend::main_process_thread ()
|
||||
* (4 * nominal cycle time) and simply ignore cases where the
|
||||
* execution switches cores.
|
||||
*/
|
||||
if (clock1 < 0 || clock2 < 0 || (clock1 > clock2) || (clock2 - clock1) > 4 * nomial_time) {
|
||||
if (clock1 < 0 || clock2 < 0 || (clock1 > clock2) || (clock2 - clock1) > 4 * nominal_time) {
|
||||
clock2 = clock1 = 0;
|
||||
win_timers_ok = false;
|
||||
}
|
||||
@ -1244,11 +1244,17 @@ DummyAudioBackend::main_process_thread ()
|
||||
if (win_timers_ok)
|
||||
#endif
|
||||
{ // low pass filter
|
||||
_dsp_load = _dsp_load + .05 * ((elapsed_time / (float) nomial_time) - _dsp_load) + 1e-12;
|
||||
const float load = elapsed_time / (float) nominal_time;
|
||||
if (load > _dsp_load) {
|
||||
_dsp_load = load;
|
||||
} else {
|
||||
const float a = .1 * _samples_per_period / _samplerate;
|
||||
_dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12;
|
||||
}
|
||||
}
|
||||
|
||||
if (elapsed_time < nomial_time) {
|
||||
Glib::usleep (nomial_time - elapsed_time);
|
||||
if (elapsed_time < nominal_time) {
|
||||
Glib::usleep (nominal_time - elapsed_time);
|
||||
} else {
|
||||
Glib::usleep (100); // don't hog cpu
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user