diff --git a/BREAKING-CHANGES.txt b/BREAKING-CHANGES.txt index 805b2e387e..25b850d2cc 100644 --- a/BREAKING-CHANGES.txt +++ b/BREAKING-CHANGES.txt @@ -4,6 +4,25 @@ JUCE breaking changes develop ======= +Change +------ +Thread::wait and WaitableEvent::wait now take a double rather than an int to +indicate the number of milliseconds to wait. + +Possible Issues +--------------- +Calls to either wait function may trigger warnings. + +Workaround +---------- +Explicitly cast the value to double. + +Rationale +--------- +Changing to double allows sub-millisecond waits which was important for +supporting changes to the HighResolutionTimer. + + Change ------ RealtimeOptions member workDurationMs was replaced by three optional member diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index 4b246e0a76..4185fcd83d 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -1059,12 +1059,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -1077,8 +1075,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" @@ -3120,12 +3116,10 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -3138,8 +3132,6 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj index c2655e2d6c..cfd6a186dc 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj @@ -1346,9 +1346,6 @@ true - - true - true @@ -1382,9 +1379,6 @@ true - - true - true @@ -3355,7 +3349,6 @@ - diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters index 85a2c050d4..4a99297aac 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters @@ -1960,9 +1960,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -2002,12 +1999,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -5283,9 +5274,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index f5f57bca6f..ee09c4c366 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -1346,9 +1346,6 @@ true - - true - true @@ -1382,9 +1379,6 @@ true - - true - true @@ -3355,7 +3349,6 @@ - diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index e3c0cbcf99..2f118afbfa 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -1960,9 +1960,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -2002,12 +1999,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -5283,9 +5274,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index ebf6f6f7f0..376cc8967c 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -1346,9 +1346,6 @@ true - - true - true @@ -1382,9 +1379,6 @@ true - - true - true @@ -3355,7 +3349,6 @@ - diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index beecbab95f..0090613495 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -1960,9 +1960,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -2002,12 +1999,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -5283,9 +5274,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index 3d44172fd5..595746c68e 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -935,12 +935,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -953,8 +951,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" @@ -2694,12 +2690,10 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -2712,8 +2706,6 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index 837e6a66db..3a122b09f0 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -1186,9 +1186,6 @@ true - - true - true @@ -1222,9 +1219,6 @@ true - - true - true @@ -2908,7 +2902,6 @@ - diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index 9dc1d4087b..0c8a0e1ed8 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -1669,9 +1669,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1711,12 +1708,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4560,9 +4551,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index 0d6a033bd6..d26f5f241e 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -968,12 +968,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -986,8 +984,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" @@ -2882,12 +2878,10 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -2900,8 +2894,6 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj index 062b8235d7..795945e645 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj @@ -1194,9 +1194,6 @@ true - - true - true @@ -1230,9 +1227,6 @@ true - - true - true @@ -3091,7 +3085,6 @@ - diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters index d4ffffef44..4fcfcdf62c 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters @@ -1744,9 +1744,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1786,12 +1783,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4839,9 +4830,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index 18a2e3aba4..46d9d4ca3b 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -1194,9 +1194,6 @@ true - - true - true @@ -1230,9 +1227,6 @@ true - - true - true @@ -3091,7 +3085,6 @@ - diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index 6a7ef6d789..2c0ff11d93 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -1744,9 +1744,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1786,12 +1783,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4839,9 +4830,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 5aece0efcf..2e8337e207 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -1194,9 +1194,6 @@ true - - true - true @@ -1230,9 +1227,6 @@ true - - true - true @@ -3091,7 +3085,6 @@ - diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index f7f405ca3c..d6a55b0f33 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -1744,9 +1744,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1786,12 +1783,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4839,9 +4830,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj index 438acdac27..504c088012 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj +++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj @@ -256,9 +256,6 @@ true - - true - true @@ -292,9 +289,6 @@ true - - true - true @@ -553,7 +547,6 @@ - diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters index 908e7d2153..77902d1382 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters +++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters @@ -193,9 +193,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -235,12 +232,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -651,9 +642,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index c96cded924..c17ac0a3f5 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -939,12 +939,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -957,8 +955,6 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" @@ -2778,12 +2774,10 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_CFHelpers_mac.h" "../../../../../modules/juce_core/native/juce_CommonFile_linux.cpp" "../../../../../modules/juce_core/native/juce_ComSmartPtr_windows.h" - "../../../../../modules/juce_core/native/juce_FileDescriptor_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_android.cpp" "../../../../../modules/juce_core/native/juce_Files_linux.cpp" "../../../../../modules/juce_core/native/juce_Files_mac.mm" "../../../../../modules/juce_core/native/juce_Files_windows.cpp" - "../../../../../modules/juce_core/native/juce_HighResolutionTimerThread.h" "../../../../../modules/juce_core/native/juce_IPAddress_posix.h" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.cpp" "../../../../../modules/juce_core/native/juce_JNIHelpers_android.h" @@ -2796,8 +2790,6 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_linux.cpp" - "../../../../../modules/juce_core/native/juce_PlatformTimer_mac.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" "../../../../../modules/juce_core/native/juce_Registry_windows.cpp" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index 749b6fee0c..fc9d0182d1 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -1186,9 +1186,6 @@ true - - true - true @@ -1222,9 +1219,6 @@ true - - true - true @@ -2999,7 +2993,6 @@ - diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index a59b1c15e4..910f7564c6 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -1699,9 +1699,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1741,12 +1738,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4701,9 +4692,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj index 5aabe5e9b9..70e948210a 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj @@ -392,9 +392,6 @@ true - - true - true @@ -428,9 +425,6 @@ true - - true - true @@ -1846,7 +1840,6 @@ - diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters index 878c673341..b0fc221c32 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters @@ -670,9 +670,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -712,12 +709,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -2724,9 +2715,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj index 20bb0d163c..604c7878c0 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj @@ -392,9 +392,6 @@ true - - true - true @@ -428,9 +425,6 @@ true - - true - true @@ -1846,7 +1840,6 @@ - diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters index 28a47abfe3..bf6b52ad66 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters @@ -670,9 +670,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -712,12 +709,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -2724,9 +2715,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj index b1d0efcd6f..9f8b23e59f 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj @@ -392,9 +392,6 @@ true - - true - true @@ -428,9 +425,6 @@ true - - true - true @@ -1846,7 +1840,6 @@ - diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters index a8191832d3..15c39f8c7e 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters @@ -670,9 +670,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -712,12 +709,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -2724,9 +2715,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj index e79151ce74..092d4d4a86 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj @@ -1202,9 +1202,6 @@ true - - true - true @@ -1238,9 +1235,6 @@ true - - true - true @@ -3157,7 +3151,6 @@ - diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters index 043503eeed..b7e10e429d 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1768,9 +1768,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1810,12 +1807,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4929,9 +4920,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index a63b929ada..37cb2fb961 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -1202,9 +1202,6 @@ true - - true - true @@ -1238,9 +1235,6 @@ true - - true - true @@ -3157,7 +3151,6 @@ - diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index dcff85ab4c..52c631f8f8 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1768,9 +1768,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1810,12 +1807,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4929,9 +4920,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index a108af5e49..df5b611280 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -1202,9 +1202,6 @@ true - - true - true @@ -1238,9 +1235,6 @@ true - - true - true @@ -3157,7 +3151,6 @@ - diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index fe03147190..635d74841f 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1768,9 +1768,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1810,12 +1807,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4929,9 +4920,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj index de0333ddbb..72f9183760 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj @@ -1185,9 +1185,6 @@ true - - true - true @@ -1221,9 +1218,6 @@ true - - true - true @@ -2975,7 +2969,6 @@ - diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters index 72a786b72f..43806d2f2f 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters @@ -1696,9 +1696,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -1738,12 +1735,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native @@ -4668,9 +4659,6 @@ JUCE Modules\juce_core\native - - JUCE Modules\juce_core\native - JUCE Modules\juce_core\native diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index 5319e9832b..6ed8bd9c0e 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -188,7 +188,6 @@ #include "files/juce_WildcardFileFilter.cpp" #include "native/juce_ThreadPriorities_native.h" #include "native/juce_PlatformTimerListener.h" -#include "native/juce_HighResolutionTimerThread.h" //============================================================================== #if ! JUCE_WINDOWS @@ -207,7 +206,7 @@ #include "native/juce_SharedCode_intel.h" #include "native/juce_SystemStats_mac.mm" #include "native/juce_Threads_mac.mm" - #include "native/juce_PlatformTimer_mac.mm" + #include "native/juce_PlatformTimer_generic.cpp" //============================================================================== #elif JUCE_WINDOWS @@ -228,8 +227,7 @@ #endif #include "native/juce_SystemStats_linux.cpp" #include "native/juce_Threads_linux.cpp" - #include "native/juce_FileDescriptor_linux.cpp" - #include "native/juce_PlatformTimer_linux.cpp" + #include "native/juce_PlatformTimer_generic.cpp" //============================================================================== #elif JUCE_BSD @@ -254,8 +252,7 @@ #include "native/juce_SystemStats_android.cpp" #include "native/juce_Threads_android.cpp" #include "native/juce_RuntimePermissions_android.cpp" - #include "native/juce_FileDescriptor_linux.cpp" - #include "native/juce_PlatformTimer_linux.cpp" + #include "native/juce_PlatformTimer_generic.cpp" //============================================================================== #elif JUCE_WASM diff --git a/modules/juce_core/native/juce_FileDescriptor_linux.cpp b/modules/juce_core/native/juce_FileDescriptor_linux.cpp deleted file mode 100644 index 28e0a4b51b..0000000000 --- a/modules/juce_core/native/juce_FileDescriptor_linux.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library. - Copyright (c) 2022 - Raw Material Software Limited - - JUCE is an open source library subject to commercial or open-source - licensing. - - The code included in this file is provided under the terms of the ISC license - http://www.isc.org/downloads/software-support-policy/isc-license. Permission - To use, copy, modify, and/or distribute this software for any purpose with or - without fee is hereby granted provided that the above copyright notice and - this permission notice appear in all copies. - - JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER - EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE - DISCLAIMED. - - ============================================================================== -*/ - -namespace juce -{ - -class FileDescriptor -{ -public: - explicit FileDescriptor (int fileDescriptorId) - : id { fileDescriptorId } {} - - ~FileDescriptor() - { - if (isValid()) - close (id); - } - - bool isValid() const { return id >= 0; } - int get() const { return id; } - - template - DataType readData() const - { - if (! isValid()) - return {}; - - alignas (DataType) std::array buffer; - size_t numberOfBytesRead { 0 }; - - while (numberOfBytesRead < buffer.size()) - { - const auto result = read (get(), buffer.data() + numberOfBytesRead, buffer.size() - numberOfBytesRead); - - if (result < 0) - return {}; - - numberOfBytesRead += (size_t) result; - } - - return readUnaligned (buffer.data()); - } - - template - void writeData (const DataType& value) const - { - if (! isValid()) - return; - - alignas (DataType) std::array buffer; - writeUnaligned (buffer.data(), value); - size_t numberOfBytesWritten { 0 }; - - while (numberOfBytesWritten < buffer.size()) - { - const auto result = write (get(), buffer.data() + numberOfBytesWritten, buffer.size() - numberOfBytesWritten); - - if (result < 0) - return; - - numberOfBytesWritten += (size_t) result; - } - } - -private: - int id{}; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FileDescriptor) - JUCE_DECLARE_NON_MOVEABLE (FileDescriptor) -}; - -class EventFd -{ -public: - EventFd() = default; - void signal() const { fd.writeData ((uint64_t) 1); } - - int get() const { return fd.get(); } - bool isValid() const { return fd.isValid(); } - -private: - FileDescriptor fd { eventfd (0, EFD_CLOEXEC) }; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EventFd) - JUCE_DECLARE_NON_MOVEABLE (EventFd) -}; - -class TimerFd -{ -public: - TimerFd() = default; - - bool setIntervalMs (int ms) const - { - if (! fd.isValid()) - return false; - - jassert (ms >= 0); - - const auto seconds = ms / 1'000; - const auto nanoseconds = (ms % 1'000) * 1'000'000; - - const itimerspec spec - { - { seconds, nanoseconds }, - { seconds, nanoseconds } - }; - - return timerfd_settime (fd.get(), 0, &spec, nullptr) == 0; - } - - int getIntervalMs() const - { - if (! fd.isValid()) - return 0; - - itimerspec result{}; - - if (timerfd_gettime (fd.get(), &result) != 0) - return 0; - - return static_cast (result.it_interval.tv_sec * 1'000 + result.it_interval.tv_nsec / 1'000'000); - } - - int getAndClearNumberOfExpirations() const - { - return (int) fd.readData(); - } - - int get() const { return fd.get(); } - bool isValid() const { return fd.isValid(); } - -private: - FileDescriptor fd { timerfd_create (CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK) }; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TimerFd) - JUCE_DECLARE_NON_MOVEABLE (TimerFd) -}; - -} // namespace juce diff --git a/modules/juce_core/native/juce_HighResolutionTimerThread.h b/modules/juce_core/native/juce_HighResolutionTimerThread.h deleted file mode 100644 index a6f87b8d09..0000000000 --- a/modules/juce_core/native/juce_HighResolutionTimerThread.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library. - Copyright (c) 2022 - Raw Material Software Limited - - JUCE is an open source library subject to commercial or open-source - licensing. - - The code included in this file is provided under the terms of the ISC license - http://www.isc.org/downloads/software-support-policy/isc-license. Permission - To use, copy, modify, and/or distribute this software for any purpose with or - without fee is hereby granted provided that the above copyright notice and - this permission notice appear in all copies. - - JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER - EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE - DISCLAIMED. - - ============================================================================== -*/ - -namespace juce -{ - -class HighResolutionTimerThread final : private Thread -{ -public: - struct Impl - { - virtual ~Impl() = default; - virtual void runThread() = 0; - virtual void signalThreadShouldExit() = 0; - }; - - HighResolutionTimerThread (Impl& implementation) - : Thread { "HighResolutionTimerThread" }, - impl { implementation } - { - startThread (Thread::Priority::highest); - } - - ~HighResolutionTimerThread() override - { - impl.signalThreadShouldExit(); - waitForThreadToExit (-1); - } - - bool isRunning() const { return isThreadRunning(); } - -private: - void run() override - { - impl.runThread(); - } - - Impl& impl; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HighResolutionTimerThread) - JUCE_DECLARE_NON_MOVEABLE (HighResolutionTimerThread) -}; - -} // namespace juce diff --git a/modules/juce_core/native/juce_PlatformTimerListener.h b/modules/juce_core/native/juce_PlatformTimerListener.h index a62e24c6cf..fe04fa7373 100644 --- a/modules/juce_core/native/juce_PlatformTimerListener.h +++ b/modules/juce_core/native/juce_PlatformTimerListener.h @@ -26,7 +26,7 @@ namespace juce struct PlatformTimerListener { virtual ~PlatformTimerListener() = default; - virtual void onTimerExpired (int numberOfExpirations) = 0; + virtual void onTimerExpired() = 0; }; } // namespace juce diff --git a/modules/juce_core/native/juce_PlatformTimer_generic.cpp b/modules/juce_core/native/juce_PlatformTimer_generic.cpp index 57df331ff8..321e5f7fb0 100644 --- a/modules/juce_core/native/juce_PlatformTimer_generic.cpp +++ b/modules/juce_core/native/juce_PlatformTimer_generic.cpp @@ -23,86 +23,124 @@ namespace juce { -class PlatformTimer final : private HighResolutionTimerThread::Impl +class PlatformTimer final : private Thread { public: explicit PlatformTimer (PlatformTimerListener& ptl) - : listener { ptl } {} + : Thread { "HighResolutionTimerThread" }, + listener { ptl } + { + startThread (Priority::highest); + } + + ~PlatformTimer() + { + stopThread (-1); + } void startTimer (int newIntervalMs) { - if (! thread.isRunning()) - return; + jassert (newIntervalMs > 0); + jassert (timer == nullptr); { - std::scoped_lock lock { mutex }; - intervalMs = newIntervalMs; - nextEventTime = Time::getCurrentTime() + RelativeTime::milliseconds (newIntervalMs); + std::scoped_lock lock { runCopyMutex }; + timer = std::make_shared (listener, newIntervalMs); } - event.signal(); + notify(); } void cancelTimer() { - jassert (thread.isRunning()); + jassert (timer != nullptr); - { - std::scoped_lock lock { mutex }; - jassert (intervalMs > 0); - intervalMs = 0; - } + timer->cancel(); - event.signal(); + // Note the only race condition we need to protect against + // here is the copy in run(). + // + // Calls to startTimer(), cancelTimer(), and getIntervalMs() + // are already guaranteed to be both thread safe and well + // synchronised. + + std::scoped_lock lock { runCopyMutex }; + timer = nullptr; } int getIntervalMs() const { - std::scoped_lock lock { mutex }; - return thread.isRunning() ? intervalMs : 0; + return isThreadRunning() && timer != nullptr ? timer->getIntervalMs() : 0; } private: - int millisecondsUntilNextEvent() + void run() final { - std::scoped_lock lock { mutex }; - return intervalMs > 0 ? jmax (0, (int) (nextEventTime - Time::getCurrentTime()).inMilliseconds()) : -1; - } - - bool nextEvent() - { - std::scoped_lock lock { mutex }; - if (intervalMs <= 0 || nextEventTime > Time::getCurrentTime()) - return false; - - nextEventTime += RelativeTime::milliseconds (intervalMs); - return true; - } - - void runThread() override - { - while (! shouldExitThread.load()) + const auto copyTimer = [&] { - if (nextEvent()) - listener.onTimerExpired (1); - else - event.wait (millisecondsUntilNextEvent()); + std::scoped_lock lock { runCopyMutex }; + return timer; + }; + + while (! threadShouldExit()) + { + if (auto t = copyTimer()) + t->run(); + + wait (-1); } } - void signalThreadShouldExit() override + class Timer { - shouldExitThread.store (true); - event.signal(); - } + public: + Timer (PlatformTimerListener& l, int i) + : listener { l }, intervalMs { i } {} + + int getIntervalMs() const + { + return intervalMs; + } + + void cancel() + { + stop.signal(); + } + + void run() + { + #if JUCE_MAC || JUCE_IOS + tryToUpgradeCurrentThreadToRealtime (Thread::RealtimeOptions{}.withPeriodMs (intervalMs)); + #endif + + const auto millisecondsUntil = [] (auto time) + { + return jmax (0.0, time - Time::getMillisecondCounterHiRes()); + }; + + while (! stop.wait (millisecondsUntil (nextEventTime))) + { + if (Time::getMillisecondCounterHiRes() >= nextEventTime) + { + listener.onTimerExpired(); + nextEventTime += intervalMs; + } + } + } + + private: + PlatformTimerListener& listener; + const int intervalMs; + double nextEventTime = Time::getMillisecondCounterHiRes() + intervalMs; + WaitableEvent stop { true }; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Timer) + JUCE_DECLARE_NON_MOVEABLE (Timer) + }; PlatformTimerListener& listener; - mutable std::mutex mutex; - int intervalMs{}; - Time nextEventTime; - WaitableEvent event; - std::atomic shouldExitThread { false }; - HighResolutionTimerThread thread { *this }; + mutable std::mutex runCopyMutex; + std::shared_ptr timer; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTimer) JUCE_DECLARE_NON_MOVEABLE (PlatformTimer) diff --git a/modules/juce_core/native/juce_PlatformTimer_linux.cpp b/modules/juce_core/native/juce_PlatformTimer_linux.cpp deleted file mode 100644 index 875ca129ad..0000000000 --- a/modules/juce_core/native/juce_PlatformTimer_linux.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library. - Copyright (c) 2022 - Raw Material Software Limited - - JUCE is an open source library subject to commercial or open-source - licensing. - - The code included in this file is provided under the terms of the ISC license - http://www.isc.org/downloads/software-support-policy/isc-license. Permission - To use, copy, modify, and/or distribute this software for any purpose with or - without fee is hereby granted provided that the above copyright notice and - this permission notice appear in all copies. - - JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER - EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE - DISCLAIMED. - - ============================================================================== -*/ - -namespace juce -{ - -class PlatformTimer final : private HighResolutionTimerThread::Impl -{ -public: - explicit PlatformTimer (PlatformTimerListener& ptl) - : listener { ptl } {} - - void startTimer (int newIntervalMs) - { - timer.setIntervalMs (newIntervalMs); - } - - void cancelTimer() - { - startTimer (0); - } - - int getIntervalMs() const - { - return thread.isRunning() ? timer.getIntervalMs() : 0; - } - -private: - void runThread() override - { - if (! (timer.isValid() && exitThread.isValid())) - return; - - pollfd pollData[] - { - { timer.get(), POLLIN, 0 }, - { exitThread.get(), POLLIN, 0 } - }; - - const auto& [timerPollData, exitThreadPollData] = pollData; - - for (;;) - { - if (poll (pollData, numElementsInArray (pollData), -1) <= 0) - return; - - if (exitThreadPollData.revents & POLLIN) - return; - - if (timerPollData.revents & POLLIN) - listener.onTimerExpired (timer.getAndClearNumberOfExpirations()); - } - } - - void signalThreadShouldExit() override - { - exitThread.signal(); - } - - PlatformTimerListener& listener; - const TimerFd timer; - const EventFd exitThread; - HighResolutionTimerThread thread { *this }; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTimer) - JUCE_DECLARE_NON_MOVEABLE (PlatformTimer) -}; - -} diff --git a/modules/juce_core/native/juce_PlatformTimer_mac.mm b/modules/juce_core/native/juce_PlatformTimer_mac.mm deleted file mode 100644 index 9ad7b690f6..0000000000 --- a/modules/juce_core/native/juce_PlatformTimer_mac.mm +++ /dev/null @@ -1,118 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library. - Copyright (c) 2022 - Raw Material Software Limited - - JUCE is an open source library subject to commercial or open-source - licensing. - - The code included in this file is provided under the terms of the ISC license - http://www.isc.org/downloads/software-support-policy/isc-license. Permission - To use, copy, modify, and/or distribute this software for any purpose with or - without fee is hereby granted provided that the above copyright notice and - this permission notice appear in all copies. - - JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER - EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE - DISCLAIMED. - - ============================================================================== -*/ - -namespace juce -{ - -class PlatformTimer final : private HighResolutionTimerThread::Impl -{ -public: - explicit PlatformTimer (PlatformTimerListener& ptl) - : listener { ptl } {} - - void startTimer (int newIntervalMs) - { - jassert (newIntervalMs > 0); - jassert (timer == nullptr); - - if (runLoop == nullptr) - return; - - const auto intervalSeconds = static_cast (newIntervalMs) / 1'000.0; - - CFRunLoopTimerContext context{}; - context.info = &listener; - - const auto callback = [] (CFRunLoopTimerRef, void* ctx) - { - static_cast (ctx)->onTimerExpired (1); - }; - - timer.reset (CFRunLoopTimerCreate (kCFAllocatorDefault, - intervalSeconds + CFAbsoluteTimeGetCurrent(), - intervalSeconds, - 0, - 0, - callback, - &context)); - - CFRunLoopAddTimer (runLoop, timer.get(), kCFRunLoopDefaultMode); - } - - void cancelTimer() - { - jassert (runLoop != nullptr); - jassert (timer != nullptr); - - CFRunLoopRemoveTimer (runLoop, timer.get(), kCFRunLoopDefaultMode); - timer.reset(); - } - - int getIntervalMs() const - { - return timer != nullptr ? (int) (CFRunLoopTimerGetInterval (timer.get()) * 1'000.0) : 0; - } - -private: - static void preventRunLoopFromEarlyExits() - { - CFRunLoopSourceContext context{}; - CFRunLoopAddSource (CFRunLoopGetCurrent(), - CFRunLoopSourceCreate (kCFAllocatorDefault, 0, &context), - kCFRunLoopDefaultMode); - } - - void setRunLoop() - { - CFRunLoopPerformBlock (CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, ^() - { - runLoopPromise.set_value (CFRunLoopGetCurrent()); - }); - } - - void runThread() override - { - preventRunLoopFromEarlyExits(); - setRunLoop(); - CFRunLoopRun(); - } - - void signalThreadShouldExit() override - { - if (runLoop != nullptr) - CFRunLoopStop (runLoop); - } - - PlatformTimerListener& listener; - CFUniquePtr timer; - std::promise runLoopPromise; - HighResolutionTimerThread thread { *this }; - CFRunLoopRef runLoop = [&]() -> CFRunLoopRef - { - return thread.isRunning() ? runLoopPromise.get_future().get() : nullptr; - }(); - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTimer) - JUCE_DECLARE_NON_MOVEABLE (PlatformTimer) -}; - -} // namespace juce diff --git a/modules/juce_core/native/juce_PlatformTimer_windows.cpp b/modules/juce_core/native/juce_PlatformTimer_windows.cpp index ad99b70f6c..13d3ead177 100644 --- a/modules/juce_core/native/juce_PlatformTimer_windows.cpp +++ b/modules/juce_core/native/juce_PlatformTimer_windows.cpp @@ -35,7 +35,7 @@ public: const auto callback = [] (UINT, UINT, DWORD_PTR context, DWORD_PTR, DWORD_PTR) { - reinterpret_cast (context)->onTimerExpired (1); + reinterpret_cast (context)->onTimerExpired(); }; timerId = timeSetEvent ((UINT) newIntervalMs, 1, callback, (DWORD_PTR) &listener, TIME_PERIODIC | TIME_CALLBACK_FUNCTION); diff --git a/modules/juce_core/threads/juce_HighResolutionTimer.cpp b/modules/juce_core/threads/juce_HighResolutionTimer.cpp index 07172d2cd4..cec292233a 100644 --- a/modules/juce_core/threads/juce_HighResolutionTimer.cpp +++ b/modules/juce_core/threads/juce_HighResolutionTimer.cpp @@ -41,6 +41,8 @@ public: if (timer.getIntervalMs() > 0) timer.cancelTimer(); + jassert (timer.getIntervalMs() == 0); + if (newIntervalMs > 0) timer.startTimer (jmax (0, newIntervalMs)); @@ -64,26 +66,26 @@ public: } private: - void onTimerExpired (int numberOfExpirations) final + void onTimerExpired() final { callbackThreadId.store (std::this_thread::get_id()); - std::scoped_lock lock { callbackMutex }; - - shouldCancelCallbacks.store (! isTimerRunning()); - - for (int i = 0; i < numberOfExpirations && ! shouldCancelCallbacks.load(); ++i) { - try + std::scoped_lock lock { callbackMutex }; + + if (isTimerRunning()) { - owner.hiResTimerCallback(); - } - catch (...) - { - // Exceptions thrown in a timer callback won't be - // propagated to the main thread, it's best to find a - // way to avoid them if possible - jassertfalse; + try + { + owner.hiResTimerCallback(); + } + catch (...) + { + // Exceptions thrown in a timer callback won't be + // propagated to the main thread, it's best to find + // a way to avoid them if possible + jassertfalse; + } } } diff --git a/modules/juce_core/threads/juce_Thread.cpp b/modules/juce_core/threads/juce_Thread.cpp index 759b613753..7136608803 100644 --- a/modules/juce_core/threads/juce_Thread.cpp +++ b/modules/juce_core/threads/juce_Thread.cpp @@ -285,7 +285,7 @@ void Thread::setAffinityMask (const uint32 newAffinityMask) } //============================================================================== -bool Thread::wait (const int timeOutMilliseconds) const +bool Thread::wait (double timeOutMilliseconds) const { return defaultEvent.wait (timeOutMilliseconds); } diff --git a/modules/juce_core/threads/juce_Thread.h b/modules/juce_core/threads/juce_Thread.h index 65e2f0c5ec..8b9fd7c96e 100644 --- a/modules/juce_core/threads/juce_Thread.h +++ b/modules/juce_core/threads/juce_Thread.h @@ -440,7 +440,7 @@ public: @returns true if the event has been signalled, false if the timeout expires. */ - bool wait (int timeOutMilliseconds) const; + bool wait (double timeOutMilliseconds) const; /** Wakes up the thread. diff --git a/modules/juce_core/threads/juce_ThreadPool.cpp b/modules/juce_core/threads/juce_ThreadPool.cpp index e218966b68..3d6a78913f 100644 --- a/modules/juce_core/threads/juce_ThreadPool.cpp +++ b/modules/juce_core/threads/juce_ThreadPool.cpp @@ -169,13 +169,13 @@ void ThreadPool::addJob (std::function jobToRun) { struct LambdaJobWrapper : public ThreadPoolJob { - LambdaJobWrapper (std::function j) : ThreadPoolJob ("lambda"), job (j) {} + LambdaJobWrapper (std::function j) : ThreadPoolJob ("lambda"), job (std::move (j)) {} JobStatus runJob() override { job(); return ThreadPoolJob::jobHasFinished; } std::function job; }; - addJob (new LambdaJobWrapper (jobToRun), true); + addJob (new LambdaJobWrapper (std::move (jobToRun)), true); } int ThreadPool::getNumJobs() const noexcept diff --git a/modules/juce_core/threads/juce_WaitableEvent.cpp b/modules/juce_core/threads/juce_WaitableEvent.cpp index 14323707b2..f2b29ab050 100644 --- a/modules/juce_core/threads/juce_WaitableEvent.cpp +++ b/modules/juce_core/threads/juce_WaitableEvent.cpp @@ -28,19 +28,19 @@ WaitableEvent::WaitableEvent (bool manualReset) noexcept { } -bool WaitableEvent::wait (int timeOutMilliseconds) const +bool WaitableEvent::wait (double timeOutMilliseconds) const { std::unique_lock lock (mutex); if (! triggered) { - if (timeOutMilliseconds < 0) + if (timeOutMilliseconds < 0.0) { condition.wait (lock, [this] { return triggered == true; }); } else { - if (! condition.wait_for (lock, std::chrono::milliseconds (timeOutMilliseconds), + if (! condition.wait_for (lock, std::chrono::duration { timeOutMilliseconds }, [this] { return triggered == true; })) { return false; diff --git a/modules/juce_core/threads/juce_WaitableEvent.h b/modules/juce_core/threads/juce_WaitableEvent.h index 406ad74ccd..ca55f904b1 100644 --- a/modules/juce_core/threads/juce_WaitableEvent.h +++ b/modules/juce_core/threads/juce_WaitableEvent.h @@ -61,7 +61,7 @@ public: @returns true if the object has been signalled, false if the timeout expires first. @see signal, reset */ - bool wait (int timeOutMilliseconds = -1) const; + bool wait (double timeOutMilliseconds = -1.0) const; /** Wakes up any threads that are currently waiting on this object.