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(); } );