Fix data race regarding prof_time in AudioDriver and AudioServer

This commit is contained in:
jsjtxietian 2024-02-06 11:29:44 +08:00
parent b4e2a24c1f
commit cf1ede9129
2 changed files with 10 additions and 10 deletions

View file

@ -316,7 +316,7 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) {
} }
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
prof_time += OS::get_singleton()->get_ticks_usec() - prof_ticks; prof_time.add(OS::get_singleton()->get_ticks_usec() - prof_ticks);
#endif #endif
} }
@ -1400,7 +1400,7 @@ void AudioServer::update() {
// Driver time includes server time + effects times // Driver time includes server time + effects times
// Server time includes effects times // Server time includes effects times
uint64_t driver_time = AudioDriver::get_singleton()->get_profiling_time(); uint64_t driver_time = AudioDriver::get_singleton()->get_profiling_time();
uint64_t server_time = prof_time; uint64_t server_time = prof_time.get();
// Subtract the server time from the driver time // Subtract the server time from the driver time
if (driver_time > server_time) { if (driver_time > server_time) {
@ -1459,7 +1459,7 @@ void AudioServer::update() {
} }
AudioDriver::get_singleton()->reset_profiling_time(); AudioDriver::get_singleton()->reset_profiling_time();
prof_time = 0; prof_time.set(0);
#endif #endif
for (CallbackItem *ci : update_callback_list) { for (CallbackItem *ci : update_callback_list) {

View file

@ -52,8 +52,8 @@ class AudioDriver {
uint64_t _last_mix_frames = 0; uint64_t _last_mix_frames = 0;
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
uint64_t prof_ticks = 0; SafeNumeric<uint64_t> prof_ticks;
uint64_t prof_time = 0; SafeNumeric<uint64_t> prof_time;
#endif #endif
protected: protected:
@ -69,8 +69,8 @@ protected:
int _get_configured_mix_rate(); int _get_configured_mix_rate();
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
_FORCE_INLINE_ void start_counting_ticks() { prof_ticks = OS::get_singleton()->get_ticks_usec(); } _FORCE_INLINE_ void start_counting_ticks() { prof_ticks.set(OS::get_singleton()->get_ticks_usec()); }
_FORCE_INLINE_ void stop_counting_ticks() { prof_time += OS::get_singleton()->get_ticks_usec() - prof_ticks; } _FORCE_INLINE_ void stop_counting_ticks() { prof_time.add(OS::get_singleton()->get_ticks_usec() - prof_ticks.get()); }
#else #else
_FORCE_INLINE_ void start_counting_ticks() {} _FORCE_INLINE_ void start_counting_ticks() {}
_FORCE_INLINE_ void stop_counting_ticks() {} _FORCE_INLINE_ void stop_counting_ticks() {}
@ -125,8 +125,8 @@ public:
unsigned int get_input_size() { return input_size; } unsigned int get_input_size() { return input_size; }
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
uint64_t get_profiling_time() const { return prof_time; } uint64_t get_profiling_time() const { return prof_time.get(); }
void reset_profiling_time() { prof_time = 0; } void reset_profiling_time() { prof_time.set(0); }
#endif #endif
AudioDriver() {} AudioDriver() {}
@ -183,7 +183,7 @@ private:
uint64_t mix_count = 0; uint64_t mix_count = 0;
uint64_t mix_frames = 0; uint64_t mix_frames = 0;
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
uint64_t prof_time = 0; SafeNumeric<uint64_t> prof_time;
#endif #endif
float channel_disable_threshold_db = 0.0f; float channel_disable_threshold_db = 0.0f;