another hack for windows timers, DSP load calculation
This commit is contained in:
parent
7670e463cc
commit
159cb4d2f9
@ -1167,17 +1167,24 @@ DummyAudioBackend::main_process_thread ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!_freewheeling) {
|
if (!_freewheeling) {
|
||||||
|
const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
|
||||||
clock2 = _x_get_monotonic_usec();
|
clock2 = _x_get_monotonic_usec();
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
// querying the performance counter can fail occasionally
|
bool win_timers_ok = true;
|
||||||
if (clock1 < 0 || clock2 < 0) {
|
/* querying the performance counter can fail occasionally (-1).
|
||||||
|
* Also on some multi-core systems, timers are CPU specific and not
|
||||||
|
* synchronized. We assume they differ more than a few milliseconds
|
||||||
|
* (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) {
|
||||||
clock2 = clock1 = 0;
|
clock2 = clock1 = 0;
|
||||||
|
win_timers_ok = false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
const int64_t elapsed_time = clock2 - clock1;
|
const int64_t elapsed_time = clock2 - clock1;
|
||||||
const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
|
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
if (clock1 >= 0 && clock2 >= 0)
|
if (win_timers_ok)
|
||||||
#endif
|
#endif
|
||||||
{ // low pass filter
|
{ // low pass filter
|
||||||
_dsp_load = _dsp_load + .05 * ((elapsed_time / (float) nomial_time) - _dsp_load) + 1e-12;
|
_dsp_load = _dsp_load + .05 * ((elapsed_time / (float) nomial_time) - _dsp_load) + 1e-12;
|
||||||
@ -1192,6 +1199,8 @@ DummyAudioBackend::main_process_thread ()
|
|||||||
_dsp_load = 1.0f;
|
_dsp_load = 1.0f;
|
||||||
Glib::usleep (100); // don't hog cpu
|
Glib::usleep (100); // don't hog cpu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* beginning of netx cycle */
|
||||||
clock1 = _x_get_monotonic_usec();
|
clock1 = _x_get_monotonic_usec();
|
||||||
|
|
||||||
bool connections_changed = false;
|
bool connections_changed = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user