From 5cbc6302492232a138d585844e86f0ed02f1d739 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 9 Dec 2024 11:31:35 +0100 Subject: [PATCH] centralized fatica_cpu_meter --- templates/android/src/jni.cpp | 4 +--- templates/common/fatica.h | 18 ++++++++++++++---- templates/ios/src/native.mm | 4 +--- templates/lv2/src/lv2.c | 4 +--- templates/vst3/src/vst3.c | 4 +--- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/templates/android/src/jni.cpp b/templates/android/src/jni.cpp index b373fe7..8db8f5b 100644 --- a/templates/android/src/jni.cpp +++ b/templates/android/src/jni.cpp @@ -203,9 +203,7 @@ static void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, #ifdef PARAM_OUT_CPU_INDEX const unsigned long long processTimeEnd = fatica_time_process(); - const unsigned long long processTime100n = processTimeEnd - processTimeStart; - const double processTimeS = ((double) processTime100n) * 1.0e-7; - cpu_meter = cpu_meter * 0.9f + ((float) (processTimeS * sample_rate)) * 0.1f; + fatica_cpu_meter(&cpu_meter, processTimeStart, processTimeEnd, frameCount, sample_rate); #endif } diff --git a/templates/common/fatica.h b/templates/common/fatica.h index 1e69165..311c16c 100644 --- a/templates/common/fatica.h +++ b/templates/common/fatica.h @@ -5,6 +5,7 @@ // unit = 100-nanosecond starting from somewhen unsigned long long fatica_time_process(void); +void fatica_cpu_meter(float *value, unsigned long long start, unsigned long long end, uint32_t sample_count, float sample_rate); // Implementation @@ -28,10 +29,12 @@ unsigned long long fatica_time_process(void) { #elif defined(__linux__) -# if __STDC_VERSION__ >= 199901L -# define _XOPEN_SOURCE 600 -# else -# define _XOPEN_SOURCE 500 +# ifndef _XOPEN_SOURCE +# if __STDC_VERSION__ >= 199901L +# define _XOPEN_SOURCE 600 +# else +# define _XOPEN_SOURCE 500 +# endif # endif # include # include @@ -62,4 +65,11 @@ unsigned long long fatica_time_process(void) { #else # error "System not supported" #endif + +void fatica_cpu_meter(float *value, unsigned long long start, unsigned long long end, uint32_t sample_count, float sample_rate) { + const unsigned long long processTime100n = end - start; + const double processTimeMs = ((double) processTime100n) * 1.0e-4; + *value = *value * 0.99f + ((float) (processTimeMs * sample_count / (sample_rate * 1000))) * 0.01f; +} + #endif // FATICA_H diff --git a/templates/ios/src/native.mm b/templates/ios/src/native.mm index dfee0c1..63c51a4 100644 --- a/templates/ios/src/native.mm +++ b/templates/ios/src/native.mm @@ -173,9 +173,7 @@ static void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, #ifdef PARAM_OUT_CPU_INDEX const unsigned long long processTimeEnd = fatica_time_process(); - const unsigned long long processTime100n = processTimeEnd - processTimeStart; - const double processTimeS = ((double) processTime100n) * 1.0e-7; - cpu_meter = cpu_meter * 0.9f + ((float) (processTimeS * sample_rate)) * 0.1f; + fatica_cpu_meter(&cpu_meter, processTimeStart, processTimeEnd, frameCount, sample_rate); #endif } diff --git a/templates/lv2/src/lv2.c b/templates/lv2/src/lv2.c index 8827444..6e2c5bd 100644 --- a/templates/lv2/src/lv2.c +++ b/templates/lv2/src/lv2.c @@ -323,9 +323,7 @@ static void run(LV2_Handle instance, uint32_t sample_count) { #ifdef PARAM_OUT_CPU_INDEX const unsigned long long processTimeEnd = fatica_time_process(); - const unsigned long long processTime100n = processTimeEnd - processTimeStart; - const double processTimeS = ((double) processTime100n) * 1.0e-7; - i->cpu_meter = i->cpu_meter * 0.9f + ((float) (processTimeS * i->sample_rate)) * 0.1f; + fatica_cpu_meter(&i->cpu_meter, processTimeStart, processTimeEnd, sample_count, i->sample_rate); #endif } diff --git a/templates/vst3/src/vst3.c b/templates/vst3/src/vst3.c index c3bf0b1..3e9a439 100644 --- a/templates/vst3/src/vst3.c +++ b/templates/vst3/src/vst3.c @@ -870,9 +870,7 @@ static Steinberg_tresult pluginProcess(void* thisInterface, struct Steinberg_Vst #ifdef PARAM_OUT_CPU_INDEX const unsigned long long processTimeEnd = fatica_time_process(); - const unsigned long long processTime100n = processTimeEnd - processTimeStart; - const double processTimeS = ((double) processTime100n) * 1.0e-7; - p->cpu_meter = p->cpu_meter * 0.9f + ((float) (processTimeS * p->sampleRate)) * 0.1f; + fatica_cpu_meter(&p->cpu_meter, processTimeStart, processTimeEnd, data->numSamples, p->sampleRate); #endif return Steinberg_kResultOk;