diff --git a/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.cpp b/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.cpp index 3306e2439a..3f255e1285 100644 --- a/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.cpp +++ b/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.cpp @@ -204,6 +204,21 @@ void AudioWorkgroup::join (WorkgroupToken& token) const token.reset(); } +size_t AudioWorkgroup::getMaxParallelThreadCount() const +{ + #if JUCE_AUDIOWORKGROUP_TYPES_AVAILABLE + + if (@available (macos 11.0, ios 14.0, *)) + { + if (auto wg = WorkgroupProvider::getWorkgroup (*this)) + return (size_t) os_workgroup_max_parallel_threads (wg, nullptr); + } + + #endif + + return 0; +} + AudioWorkgroup::operator bool() const { return WorkgroupProvider::getWorkgroup (*this) != nullptr; } #if JUCE_AUDIOWORKGROUP_TYPES_AVAILABLE diff --git a/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.h b/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.h index 72681cf7ea..82810d846d 100644 --- a/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.h +++ b/modules/juce_audio_basics/utilities/juce_AudioWorkgroup.h @@ -203,6 +203,13 @@ public: */ void reset() { erased = nullptr; } + /** Returns the recommended maximum number of parallel threads that should join this workgroup. + + This recommendation is based on the workgroup attributes and current hardware, but not on + system load. On a very busy system, it may be more effective to use fewer parallel threads. + */ + size_t getMaxParallelThreadCount() const; + private: const WorkgroupProvider* getWorkgroupProvider() const { return erased != nullptr ? erased() : nullptr; }