diff --git a/profiler/build/win32/Tracy.vcxproj b/profiler/build/win32/Tracy.vcxproj index adfa6fa7..e30e581b 100644 --- a/profiler/build/win32/Tracy.vcxproj +++ b/profiler/build/win32/Tracy.vcxproj @@ -172,6 +172,7 @@ + diff --git a/profiler/build/win32/Tracy.vcxproj.filters b/profiler/build/win32/Tracy.vcxproj.filters index 76547827..74b22675 100644 --- a/profiler/build/win32/Tracy.vcxproj.filters +++ b/profiler/build/win32/Tracy.vcxproj.filters @@ -305,6 +305,9 @@ server + + server + diff --git a/server/TracySort.hpp b/server/TracySort.hpp new file mode 100644 index 00000000..1fa609c7 --- /dev/null +++ b/server/TracySort.hpp @@ -0,0 +1,20 @@ +#ifndef __TRACYSORT_HPP__ +#define __TRACYSORT_HPP__ + +#if ( defined _MSC_VER && _MSVC_LANG >= 201703L ) || __cplusplus >= 201703L +# if __has_include() +# include +# include +# else +# define NO_PARALLEL_SORT +# endif +#else +# define NO_PARALLEL_SORT +#endif + +#ifdef NO_PARALLEL_SORT +# include "tracy_pdqsort.h" +#endif + + +#endif diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 6563a6a6..233088bd 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -13,24 +13,11 @@ #include #include -#if ( defined _MSC_VER && _MSVC_LANG >= 201703L ) || __cplusplus >= 201703L -# if __has_include() -# include -# else -# define MY_LIBCPP_SUCKS -# endif -#else -# define MY_LIBCPP_SUCKS -#endif - -#ifdef MY_LIBCPP_SUCKS -# include "tracy_pdqsort.h" -#endif - #include "../common/TracyProtocol.hpp" #include "../common/TracySystem.hpp" #include "TracyFileRead.hpp" #include "TracyFileWrite.hpp" +#include "TracySort.hpp" #include "TracyTaskDispatch.hpp" #include "TracyVersion.hpp" #include "TracyWorker.hpp" @@ -1599,7 +1586,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) { if( m_shutdown.load( std::memory_order_relaxed ) ) return; auto& zones = v.second.zones; -#ifdef MY_LIBCPP_SUCKS +#ifdef NO_PARALLEL_SORT pdqsort_branchless( zones.begin(), zones.end(), []( const auto& lhs, const auto& rhs ) { return lhs.Zone()->Start() < rhs.Zone()->Start(); } ); #else std::sort( std::execution::par_unseq, zones.begin(), zones.end(), []( const auto& lhs, const auto& rhs ) { return lhs.Zone()->Start() < rhs.Zone()->Start(); } ); @@ -3160,7 +3147,7 @@ void Worker::HandlePostponedPlots() if( src.empty() ) continue; if( std::chrono::duration_cast( std::chrono::high_resolution_clock::now().time_since_epoch() ).count() - plot->postponeTime < 100 ) continue; auto& dst = plot->data; -#ifdef MY_LIBCPP_SUCKS +#ifdef NO_PARALLEL_SORT pdqsort_branchless( src.begin(), src.end(), [] ( const auto& l, const auto& r ) { return l.time.Val() < r.time.Val(); } ); #else std::sort( std::execution::par_unseq, src.begin(), src.end(), [] ( const auto& l, const auto& r ) { return l.time.Val() < r.time.Val(); } ); @@ -4792,7 +4779,7 @@ void Worker::CreateMemAllocPlot() void Worker::ReconstructMemAllocPlot() { auto& mem = m_data.memory; -#ifdef MY_LIBCPP_SUCKS +#ifdef NO_PARALLEL_SORT pdqsort_branchless( mem.frees.begin(), mem.frees.end(), [&mem] ( const auto& lhs, const auto& rhs ) { return mem.data[lhs].TimeFree() < mem.data[rhs].TimeFree(); } ); #else std::sort( std::execution::par_unseq, mem.frees.begin(), mem.frees.end(), [&mem] ( const auto& lhs, const auto& rhs ) { return mem.data[lhs].TimeFree() < mem.data[rhs].TimeFree(); } );